View Javadoc

1   package com.atlassian.plugin.repositories;
2   
3   import com.atlassian.plugin.XmlPluginArtifact;
4   import com.atlassian.plugin.test.PluginTestUtils;
5   
6   import junit.framework.TestCase;
7   import org.apache.commons.io.FileUtils;
8   
9   import java.io.File;
10  import java.io.IOException;
11  
12  public class TestFilePluginInstaller extends TestCase
13  {
14      private File tmpDir;
15      private File pluginDir;
16  
17      @Override
18      protected void setUp() throws Exception
19      {
20          tmpDir = PluginTestUtils.createTempDirectory(TestFilePluginInstaller.class).getAbsoluteFile();
21          pluginDir = new File(tmpDir, "plugins");
22          pluginDir.mkdir();
23      }
24  
25      public void testInstallPlugin() throws IOException
26      {
27          FilePluginInstaller installer = new FilePluginInstaller(pluginDir);
28          File pluginFile = File.createTempFile("plugin", ".jar", tmpDir);
29  
30          installer.installPlugin("foo", new XmlPluginArtifact(pluginFile));
31          assertTrue(new File(pluginDir, pluginFile.getName()).exists());
32      }
33  
34      public void testInstallPluginWithExisting() throws IOException
35      {
36          FilePluginInstaller installer = new FilePluginInstaller(pluginDir);
37          File pluginFile = File.createTempFile("plugin", ".jar", pluginDir);
38          FileUtils.writeStringToFile(pluginFile, "foo");
39  
40          File upgradedFile = new File(tmpDir, pluginFile.getName());
41          FileUtils.writeStringToFile(upgradedFile, "bar");
42  
43          installer.installPlugin("foo", new XmlPluginArtifact(upgradedFile));
44          assertEquals("bar", FileUtils.readFileToString(pluginFile));
45          assertTrue(new File(pluginDir, FilePluginInstaller.ORIGINAL_PREFIX + pluginFile.getName()).exists());
46      }
47  
48      public void testInstallPluginWithExistingOld() throws IOException
49      {
50          FilePluginInstaller installer = new FilePluginInstaller(pluginDir);
51          File pluginFile = File.createTempFile("plugin", ".jar", pluginDir);
52          FileUtils.writeStringToFile(pluginFile, "foo");
53  
54          File upgradedFile = new File(tmpDir, pluginFile.getName());
55          FileUtils.writeStringToFile(upgradedFile, "bar");
56  
57          File upgraded2File = new File(tmpDir, pluginFile.getName());
58          FileUtils.writeStringToFile(upgraded2File, "bar");
59  
60          installer.installPlugin("foo", new XmlPluginArtifact(upgradedFile));
61          assertEquals("bar", FileUtils.readFileToString(pluginFile));
62          assertTrue(new File(pluginDir, FilePluginInstaller.ORIGINAL_PREFIX + pluginFile.getName()).exists());
63      }
64  
65      public void testRevertInstalledPlugin() throws IOException
66      {
67          FilePluginInstaller installer = new FilePluginInstaller(pluginDir);
68          File pluginFile = File.createTempFile("plugin", ".jar", tmpDir);
69  
70          installer.installPlugin("foo", new XmlPluginArtifact(pluginFile));
71  
72          installer.revertInstalledPlugin("foo");
73          assertFalse(new File(pluginDir, pluginFile.getName()).exists());
74      }
75  
76      public void testRevertInstalledPluginWithOld() throws IOException
77      {
78          FilePluginInstaller installer = new FilePluginInstaller(pluginDir);
79          File pluginFile = File.createTempFile("plugin", ".jar", pluginDir);
80          FileUtils.writeStringToFile(pluginFile, "foo");
81  
82          File upgradedFile = new File(tmpDir, pluginFile.getName());
83          FileUtils.writeStringToFile(upgradedFile, "bar");
84  
85          installer.installPlugin("foo", new XmlPluginArtifact(upgradedFile));
86          assertEquals("bar", FileUtils.readFileToString(pluginFile));
87          File oldFile = new File(pluginDir, FilePluginInstaller.ORIGINAL_PREFIX + pluginFile.getName());
88          assertTrue(oldFile.exists());
89  
90          installer.revertInstalledPlugin("foo");
91          assertFalse(oldFile.exists());
92          assertEquals("foo", FileUtils.readFileToString(pluginFile));
93      }
94  
95      public void testRevertUpgradedTwicePlugin() throws IOException
96      {
97          FilePluginInstaller installer = new FilePluginInstaller(pluginDir);
98          File pluginFile = File.createTempFile("plugin", ".jar", pluginDir);
99          FileUtils.writeStringToFile(pluginFile, "foo");
100 
101         File upgradedFile = new File(tmpDir, pluginFile.getName());
102         FileUtils.writeStringToFile(upgradedFile, "bar");
103         installer.installPlugin("foo", new XmlPluginArtifact(upgradedFile));
104         assertEquals("bar", FileUtils.readFileToString(pluginFile));
105 
106         File upgraded2File = new File(tmpDir, pluginFile.getName());
107         FileUtils.writeStringToFile(upgraded2File, "baz");
108         installer.installPlugin("foo", new XmlPluginArtifact(upgraded2File));
109         assertEquals("baz", FileUtils.readFileToString(pluginFile));
110 
111         installer.revertInstalledPlugin("foo");
112         assertEquals("foo", FileUtils.readFileToString(pluginFile));
113     }
114 
115     public void testRevertInstalledPluginWithTwoPrevious() throws IOException
116     {
117         FilePluginInstaller installer = new FilePluginInstaller(pluginDir);
118         File originalFile = File.createTempFile("plugin", ".jar", tmpDir);
119         FileUtils.writeStringToFile(originalFile, "foo");
120         installer.installPlugin("foo", new XmlPluginArtifact(originalFile));
121 
122         File upgradedFile = new File(tmpDir, originalFile.getName());
123         FileUtils.writeStringToFile(upgradedFile, "bar");
124         installer.installPlugin("foo", new XmlPluginArtifact(upgradedFile));
125 
126         File upgraded2File = new File(tmpDir, originalFile.getName());
127         FileUtils.writeStringToFile(upgraded2File, "baz");
128         installer.installPlugin("foo", new XmlPluginArtifact(upgraded2File));
129 
130         File pluginFile = new File(pluginDir, originalFile.getName());
131         assertEquals("baz", FileUtils.readFileToString(pluginFile));
132         installer.revertInstalledPlugin("foo");
133         assertFalse(pluginFile.exists());
134     }
135 
136     public void testRevertInstalledPluginWithTwoPreviousAndDifferentNames() throws IOException
137     {
138         FilePluginInstaller installer = new FilePluginInstaller(pluginDir);
139         File originalFile = File.createTempFile("plugin", ".jar", tmpDir);
140         FileUtils.writeStringToFile(originalFile, "foo");
141         installer.installPlugin("foo", new XmlPluginArtifact(originalFile));
142 
143         File upgradedFile = new File(tmpDir, "bar.jar");
144         FileUtils.writeStringToFile(upgradedFile, "bar");
145         installer.installPlugin("foo", new XmlPluginArtifact(upgradedFile));
146 
147         assertFalse(new File(pluginDir, originalFile.getName()).exists());
148         assertTrue(new File(pluginDir, upgradedFile.getName()).exists());
149 
150         File upgraded2File = new File(tmpDir, "baz.jar");
151         FileUtils.writeStringToFile(upgraded2File, "baz");
152         installer.installPlugin("foo", new XmlPluginArtifact(upgraded2File));
153 
154         assertFalse(new File(pluginDir, originalFile.getName()).exists());
155         assertFalse(new File(pluginDir, upgradedFile.getName()).exists());
156         assertTrue(new File(pluginDir, upgraded2File.getName()).exists());
157 
158         installer.revertInstalledPlugin("foo");
159         assertFalse(new File(pluginDir, upgraded2File.getName()).exists());
160         assertFalse(new File(pluginDir, upgradedFile.getName()).exists());
161         assertFalse(new File(pluginDir, originalFile.getName()).exists());
162     }
163 
164     public void testRevertInstalledPluginWithTwoPreviousAndDifferentNamesOneOriginal() throws IOException
165     {
166         FilePluginInstaller installer = new FilePluginInstaller(pluginDir);
167         File pluginFile = File.createTempFile("plugin", ".jar", pluginDir);
168         FileUtils.writeStringToFile(pluginFile, "foo");
169 
170         File upgradedFile = new File(tmpDir, "bar.jar");
171         FileUtils.writeStringToFile(upgradedFile, "bar");
172         installer.installPlugin("foo", new XmlPluginArtifact(upgradedFile));
173 
174         // Check that this created the new plugin file in the plugins directory
175         final File upgrade1PluginFile = new File(pluginDir, upgradedFile.getName());
176         assertTrue(upgrade1PluginFile.exists());
177 
178         File upgraded2File = new File(tmpDir, "baz.jar");
179         FileUtils.writeStringToFile(upgraded2File, "baz");
180         installer.installPlugin("foo", new XmlPluginArtifact(upgraded2File));
181 
182         // The bar.jar should no longer exist since it has been usurped by this new file
183         assertFalse(upgrade1PluginFile.exists());
184         final File upgrade2PluginFile = new File(pluginDir, upgraded2File.getName());
185         assertTrue(upgrade2PluginFile.exists());
186 
187         installer.revertInstalledPlugin("foo");
188         // We should only have the original file left behind and no backups
189         assertFalse(upgrade1PluginFile.exists());
190         assertFalse(upgrade2PluginFile.exists());
191         assertFalse(new File(pluginFile.getParent(), FilePluginInstaller.ORIGINAL_PREFIX + pluginFile.getName()).exists());
192         assertTrue(pluginFile.exists());
193     }
194 
195     public void testRevertInstalledPluginWithTwoPreviousAndSameNamesOneOriginal() throws IOException
196     {
197         FilePluginInstaller installer = new FilePluginInstaller(pluginDir);
198         File pluginFile = File.createTempFile("plugin", ".jar", pluginDir);
199         FileUtils.writeStringToFile(pluginFile, "foo");
200 
201         File upgraded1File = new File(tmpDir, pluginFile.getName());
202         FileUtils.writeStringToFile(upgraded1File, "bar");
203         installer.installPlugin("foo", new XmlPluginArtifact(upgraded1File));
204 
205         // Check that this created the backup file and the new plugin file in the plugins directory
206         File backupOriginalPluginFile = new File(pluginDir, FilePluginInstaller.ORIGINAL_PREFIX + pluginFile.getName());
207         assertTrue(backupOriginalPluginFile.exists());
208         final File upgrade1PluginFile = new File(pluginDir, upgraded1File.getName());
209         assertTrue(upgrade1PluginFile.exists());
210 
211         File upgraded2File = new File(tmpDir, "baz.jar");
212         FileUtils.writeStringToFile(upgraded2File, "baz");
213         installer.installPlugin("foo", new XmlPluginArtifact(upgraded2File));
214 
215         // The original backup should still exist
216         assertTrue(backupOriginalPluginFile.exists());
217         // The bar.jar should no longer exist since it has been usurped by this new file
218         assertFalse(upgrade1PluginFile.exists());
219         final File upgrade2PluginFile = new File(pluginDir, upgraded2File.getName());
220         assertTrue(upgrade2PluginFile.exists());
221 
222         installer.revertInstalledPlugin("foo");
223         // We should only have the original file left behind and no backups
224         assertFalse(upgrade2PluginFile.exists());
225         assertFalse(backupOriginalPluginFile.exists());
226         assertTrue(pluginFile.exists());
227     }
228 
229     public void testRevertInstalledPluginWithDifferentNamedInstalledPlugin() throws IOException
230     {
231         FilePluginInstaller installer = new FilePluginInstaller(pluginDir);
232         File pluginFile = File.createTempFile("plugin", ".jar", pluginDir);
233         FileUtils.writeStringToFile(pluginFile, "foo");
234 
235         File upgradedFile = new File(tmpDir, "bar.jar");
236         FileUtils.writeStringToFile(upgradedFile, "bar");
237         installer.installPlugin("foo", new XmlPluginArtifact(upgradedFile));
238 
239         // Check that this created the new plugin file in the plugins directory
240         final File upgrade1PluginFile = new File(pluginDir, upgradedFile.getName());
241         assertTrue(upgrade1PluginFile.exists());
242         assertEquals("bar", FileUtils.readFileToString(upgrade1PluginFile));
243 
244         File upgraded2File = new File(tmpDir, "bar.jar");
245         FileUtils.writeStringToFile(upgraded2File, "baz");
246         installer.installPlugin("foo", new XmlPluginArtifact(upgraded2File));
247 
248         // The bar.jar should still exist but its contents should have changed
249         assertTrue(upgrade1PluginFile.exists());
250         assertEquals("baz", FileUtils.readFileToString(upgrade1PluginFile));
251 
252         installer.revertInstalledPlugin("foo");
253         // We should only have the original file left behind and no backups
254         assertFalse(upgrade1PluginFile.exists());
255         assertFalse(new File(pluginFile.getParent(), FilePluginInstaller.ORIGINAL_PREFIX + pluginFile.getName()).exists());
256         assertTrue(pluginFile.exists());
257     }
258 
259     public void testClearBackups() throws IOException
260     {
261         FilePluginInstaller installer = new FilePluginInstaller(pluginDir);
262         File pluginFile = File.createTempFile("plugin", ".jar", pluginDir);
263         FileUtils.writeStringToFile(pluginFile, "foo");
264 
265         File upgradedFile = new File(tmpDir, pluginFile.getName());
266         FileUtils.writeStringToFile(upgradedFile, "bar");
267 
268         installer.installPlugin("foo", new XmlPluginArtifact(upgradedFile));
269         assertTrue(new File(pluginDir, FilePluginInstaller.ORIGINAL_PREFIX + pluginFile.getName()).exists());
270         installer.clearBackups();
271         assertTrue(pluginFile.exists());
272         assertFalse(new File(pluginDir, FilePluginInstaller.ORIGINAL_PREFIX + pluginFile.getName()).exists());
273 
274     }
275 }