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
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
183 assertFalse(upgrade1PluginFile.exists());
184 final File upgrade2PluginFile = new File(pluginDir, upgraded2File.getName());
185 assertTrue(upgrade2PluginFile.exists());
186
187 installer.revertInstalledPlugin("foo");
188
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
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
216 assertTrue(backupOriginalPluginFile.exists());
217
218 assertFalse(upgrade1PluginFile.exists());
219 final File upgrade2PluginFile = new File(pluginDir, upgraded2File.getName());
220 assertTrue(upgrade2PluginFile.exists());
221
222 installer.revertInstalledPlugin("foo");
223
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
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
249 assertTrue(upgrade1PluginFile.exists());
250 assertEquals("baz", FileUtils.readFileToString(upgrade1PluginFile));
251
252 installer.revertInstalledPlugin("foo");
253
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 }