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
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
189 assertFalse(upgrade1PluginFile.exists());
190 final File upgrade2PluginFile = new File(pluginDir, upgraded2File.getName());
191 assertTrue(upgrade2PluginFile.exists());
192
193 installer.revertInstalledPlugin("foo");
194
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
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
222 assertTrue(backupOriginalPluginFile.exists());
223
224 assertFalse(upgrade1PluginFile.exists());
225 final File upgrade2PluginFile = new File(pluginDir, upgraded2File.getName());
226 assertTrue(upgrade2PluginFile.exists());
227
228 installer.revertInstalledPlugin("foo");
229
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
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
255 assertTrue(upgrade1PluginFile.exists());
256 assertEquals("baz", FileUtils.readFileToString(upgrade1PluginFile));
257
258 installer.revertInstalledPlugin("foo");
259
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 }