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