1 package com.atlassian.sal.core.upgrade;
2
3 import com.atlassian.plugin.Plugin;
4 import com.atlassian.plugin.PluginInformation;
5 import com.atlassian.sal.api.pluginsettings.PluginSettings;
6 import com.atlassian.sal.api.upgrade.PluginUpgradeTask;
7 import com.mockobjects.dynamic.C;
8 import com.mockobjects.dynamic.Mock;
9 import junit.framework.TestCase;
10
11 import java.util.ArrayList;
12 import java.util.Arrays;
13 import java.util.HashMap;
14 import java.util.Map;
15
16 public class TestPluginUpgrader extends TestCase
17 {
18 Mock mockPlugin;
19 Mock mockPluginSettings;
20
21 public void setUp()
22 {
23 mockPlugin = new Mock(Plugin.class);
24 mockPluginSettings = new Mock(PluginSettings.class);
25 }
26
27 public void testUpgradeFromScratch()
28 {
29 final UpgradeTaskStub task = new UpgradeTaskStub(10);
30 PluginUpgrader pu = new PluginUpgrader((Plugin)mockPlugin.proxy(),
31 (PluginSettings) mockPluginSettings.proxy(),
32 new ArrayList<PluginUpgradeTask>() {{ add(task); }});
33
34 PluginInformation info = new PluginInformation();
35 mockPlugin.matchAndReturn("getKey", "foo.bar");
36 mockPlugin.matchAndReturn("getPluginInformation", info);
37 mockPluginSettings.expectAndReturn("get", C.args(C.eq("foo.bar:build")), null);
38 mockPluginSettings.expectAndReturn("get", C.args(C.eq("foo.bar:build")), null);
39 mockPluginSettings.expectAndReturn("get", C.args(C.eq("foo.bar:build")), null);
40 mockPluginSettings.expect("put", C.args(C.eq("foo.bar:build"), C.eq("10")));
41
42 pu.upgrade();
43
44 assertTrue(task.isUpgraded());
45 mockPlugin.verify();
46 mockPluginSettings.verify();
47 }
48
49 public void testUpgradeFrom2To5()
50 {
51 final UpgradeTaskStub task1 = new UpgradeTaskStub(1);
52 final UpgradeTaskStub task2 = new UpgradeTaskStub(2);
53 final UpgradeTaskStub task3 = new UpgradeTaskStub(3);
54 final UpgradeTaskStub task4 = new UpgradeTaskStub(4);
55 final UpgradeTaskStub task5 = new UpgradeTaskStub(5);
56
57 PluginSettings pluginSettings = new PluginSettings()
58 {
59 private Map<String, Object> map = new HashMap<String, Object>();
60 public Object remove(String key)
61 {
62 return map.remove(key);
63 }
64 public Object put(String key, Object value)
65 {
66 return map.put(key, value);
67 }
68 public Object get(String key)
69 {
70 return map.get(key);
71 }
72 };
73
74 pluginSettings.put("foo.bar:build", "2");
75 PluginUpgrader pu = new PluginUpgrader((Plugin)mockPlugin.proxy(), pluginSettings,
76 Arrays.asList(new PluginUpgradeTask[] {task1, task5, task3, task2, task4}));
77
78 PluginInformation info = new PluginInformation();
79 mockPlugin.matchAndReturn("getKey", "foo.bar");
80 mockPlugin.matchAndReturn("getPluginInformation", info);
81
82 pu.upgrade();
83
84 assertFalse(task1.isUpgraded());
85 assertFalse(task2.isUpgraded());
86 assertTrue(task3.isUpgraded());
87 assertTrue(task4.isUpgraded());
88 assertTrue(task5.isUpgraded());
89
90 mockPlugin.verify();
91 }
92
93 public void testUpgradeOldVersion()
94 {
95 final UpgradeTaskStub task = new UpgradeTaskStub(10);
96 PluginUpgrader pu = new PluginUpgrader((Plugin)mockPlugin.proxy(),
97 (PluginSettings) mockPluginSettings.proxy(),
98 new ArrayList<PluginUpgradeTask>() {{ add(task); }});
99
100 PluginInformation info = new PluginInformation();
101 mockPlugin.matchAndReturn("getKey", "foo.bar");
102 mockPlugin.matchAndReturn("getPluginInformation", info);
103 mockPluginSettings.expectAndReturn("get", C.args(C.eq("foo.bar:build")), "5");
104 mockPluginSettings.expectAndReturn("get", C.args(C.eq("foo.bar:build")), "5");
105 mockPluginSettings.expectAndReturn("get", C.args(C.eq("foo.bar:build")), "5");
106 mockPluginSettings.expect("put", C.args(C.eq("foo.bar:build"), C.eq("10")));
107
108 pu.upgrade();
109
110 assertTrue(task.isUpgraded());
111 mockPlugin.verify();
112 mockPluginSettings.verify();
113 }
114
115 public void testUpgradeNoTasks()
116 {
117 final UpgradeTaskStub task = new UpgradeTaskStub(10);
118 PluginUpgrader pu = new PluginUpgrader((Plugin)mockPlugin.proxy(),
119 (PluginSettings) mockPluginSettings.proxy(),
120 new ArrayList<PluginUpgradeTask>() {{ add(task); }});
121
122 PluginInformation info = new PluginInformation();
123 mockPlugin.matchAndReturn("getKey", "foo.bar");
124 mockPlugin.matchAndReturn("getPluginInformation", info);
125 mockPluginSettings.expectAndReturn("get", C.args(C.eq("foo.bar:build")), "15");
126 pu.upgrade();
127
128 assertFalse(task.isUpgraded());
129 mockPlugin.verify();
130 mockPluginSettings.verify();
131 }
132
133 public void testUpgrade()
134 {
135 final UpgradeTaskStub task = new UpgradeTaskStub(10);
136 PluginUpgrader pu = new PluginUpgrader((Plugin)mockPlugin.proxy(),
137 (PluginSettings) mockPluginSettings.proxy(),
138 new ArrayList<PluginUpgradeTask>() {{ add(task); }});
139
140 mockPlugin.matchAndReturn("getKey", "foo.bar");
141 mockPlugin.matchAndReturn("getPluginInformation", new PluginInformation());
142 mockPluginSettings.expectAndReturn("get", C.args(C.eq("foo.bar:build")), "5");
143 mockPluginSettings.expectAndReturn("get", C.args(C.eq("foo.bar:build")), "5");
144 mockPluginSettings.expectAndReturn("get", C.args(C.eq("foo.bar:build")), "5");
145
146 pu.upgrade();
147
148 assertTrue(task.isUpgraded());
149 mockPlugin.verify();
150 mockPluginSettings.verify();
151 }
152
153 }