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
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 @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
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 @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
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 @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 }