View Javadoc

1   package com.atlassian.plugin.repositories;
2   
3   import com.atlassian.plugin.XmlPluginArtifact;
4   import junit.framework.TestCase;
5   import org.apache.commons.io.FileUtils;
6   
7   import java.io.File;
8   import java.io.IOException;
9   
10  /**
11   *
12   */
13  public class TestFilePluginInstaller extends TestCase
14  {
15      private File tmpDir;
16      private File pluginDir;
17  
18      @Override
19      protected void setUp() throws Exception
20      {
21          tmpDir = new File("target/temp").getAbsoluteFile();
22          if (tmpDir.exists())
23          {
24              FileUtils.cleanDirectory(tmpDir);
25          }
26          tmpDir.mkdirs();
27          pluginDir = new File(tmpDir, "plugins");
28          pluginDir.mkdir();
29      }
30  
31      public void testInstallPlugin() throws IOException
32      {
33          FilePluginInstaller installer = new FilePluginInstaller(pluginDir);
34          File pluginFile = File.createTempFile("plugin", ".jar", tmpDir);
35  
36          installer.installPlugin("foo", new XmlPluginArtifact(pluginFile));
37          assertTrue(new File(pluginDir, pluginFile.getName()).exists());
38      }
39  
40      public void testInstallPluginWithExisting() throws IOException
41      {
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(tmpDir, 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      public void testInstallPluginWithExistingOld() throws IOException
55      {
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      public void testRevertInstalledPlugin() throws IOException
72      {
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      public void testRevertInstalledPluginWithOld() throws IOException
83      {
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     public void testRevertUpgradedTwicePlugin() throws IOException
102     {
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     public void testRevertInstalledPluginWithTwoPrevious() throws IOException
122     {
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     public void testRevertInstalledPluginWithTwoPreviousAndDifferentNames() throws IOException
143     {
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     public void testRevertInstalledPluginWithTwoPreviousAndDifferentNamesOneOriginal() throws IOException
171     {
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     public void testRevertInstalledPluginWithTwoPreviousAndSameNamesOneOriginal() throws IOException
202     {
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     public void testRevertInstalledPluginWithDifferentNamedInstalledPlugin() throws IOException
236     {
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     public void testClearBackups() throws IOException
266     {
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     }
281 }