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 Mock mockPlugin;
18 Mock mockPluginSettings;
19
20 public void setUp() {
21 mockPlugin = new Mock(Plugin.class);
22 mockPluginSettings = new Mock(PluginSettings.class);
23 }
24
25 public void testUpgradeFromScratch() {
26 final UpgradeTaskStub task = new UpgradeTaskStub(10);
27 PluginUpgrader pu = new PluginUpgrader((Plugin) mockPlugin.proxy(),
28 (PluginSettings) mockPluginSettings.proxy(),
29 new ArrayList<PluginUpgradeTask>() {{
30 add(task);
31 }});
32
33 PluginInformation info = new PluginInformation();
34 mockPlugin.matchAndReturn("getKey", "foo.bar");
35 mockPlugin.matchAndReturn("getPluginInformation", info);
36 mockPluginSettings.expectAndReturn("get", C.args(C.eq("foo.bar:build")), null);
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.expect("put", C.args(C.eq("foo.bar:build"), C.eq("10")));
40
41 pu.upgrade();
42
43 assertTrue(task.isUpgraded());
44 mockPlugin.verify();
45 mockPluginSettings.verify();
46 }
47
48 public void testUpgradeFrom2To5() {
49 final UpgradeTaskStub task1 = new UpgradeTaskStub(1);
50 final UpgradeTaskStub task2 = new UpgradeTaskStub(2);
51 final UpgradeTaskStub task3 = new UpgradeTaskStub(3);
52 final UpgradeTaskStub task4 = new UpgradeTaskStub(4);
53 final UpgradeTaskStub task5 = new UpgradeTaskStub(5);
54
55 PluginSettings pluginSettings = new PluginSettings() {
56 private Map<String, Object> map = new HashMap<String, Object>();
57
58 public Object remove(String key) {
59 return map.remove(key);
60 }
61
62 public Object put(String key, Object value) {
63 return map.put(key, value);
64 }
65
66 public Object get(String key) {
67 return map.get(key);
68 }
69 };
70
71 pluginSettings.put("foo.bar:build", "2");
72 PluginUpgrader pu = new PluginUpgrader((Plugin) mockPlugin.proxy(), pluginSettings,
73 Arrays.asList(new PluginUpgradeTask[]{task1, task5, task3, task2, task4}));
74
75 PluginInformation info = new PluginInformation();
76 mockPlugin.matchAndReturn("getKey", "foo.bar");
77 mockPlugin.matchAndReturn("getPluginInformation", info);
78
79 pu.upgrade();
80
81 assertFalse(task1.isUpgraded());
82 assertFalse(task2.isUpgraded());
83 assertTrue(task3.isUpgraded());
84 assertTrue(task4.isUpgraded());
85 assertTrue(task5.isUpgraded());
86
87 mockPlugin.verify();
88 }
89
90 public void testUpgradeOldVersion() {
91 final UpgradeTaskStub task = new UpgradeTaskStub(10);
92 PluginUpgrader pu = new PluginUpgrader((Plugin) mockPlugin.proxy(),
93 (PluginSettings) mockPluginSettings.proxy(),
94 new ArrayList<PluginUpgradeTask>() {{
95 add(task);
96 }});
97
98 PluginInformation info = new PluginInformation();
99 mockPlugin.matchAndReturn("getKey", "foo.bar");
100 mockPlugin.matchAndReturn("getPluginInformation", info);
101 mockPluginSettings.expectAndReturn("get", C.args(C.eq("foo.bar:build")), "5");
102 mockPluginSettings.expectAndReturn("get", C.args(C.eq("foo.bar:build")), "5");
103 mockPluginSettings.expectAndReturn("get", C.args(C.eq("foo.bar:build")), "5");
104 mockPluginSettings.expect("put", C.args(C.eq("foo.bar:build"), C.eq("10")));
105
106 pu.upgrade();
107
108 assertTrue(task.isUpgraded());
109 mockPlugin.verify();
110 mockPluginSettings.verify();
111 }
112
113 public void testUpgradeNoTasks() {
114 final UpgradeTaskStub task = new UpgradeTaskStub(10);
115 PluginUpgrader pu = new PluginUpgrader((Plugin) mockPlugin.proxy(),
116 (PluginSettings) mockPluginSettings.proxy(),
117 new ArrayList<PluginUpgradeTask>() {{
118 add(task);
119 }});
120
121 PluginInformation info = new PluginInformation();
122 mockPlugin.matchAndReturn("getKey", "foo.bar");
123 mockPlugin.matchAndReturn("getPluginInformation", info);
124 mockPluginSettings.expectAndReturn("get", C.args(C.eq("foo.bar:build")), "15");
125 pu.upgrade();
126
127 assertFalse(task.isUpgraded());
128 mockPlugin.verify();
129 mockPluginSettings.verify();
130 }
131 }