View Javadoc

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"); // current data version is 2
72          PluginUpgrader pu = new PluginUpgrader((Plugin) mockPlugin.proxy(), pluginSettings,
73                  Arrays.asList(new PluginUpgradeTask[]{task1, task5, task3, task2, task4})); // intentionally not in right order
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());        // not upgraded because data version was already 2
82          assertFalse(task2.isUpgraded());        // not upgraded because data version was already 2
83          assertTrue(task3.isUpgraded());         // should upgrade
84          assertTrue(task4.isUpgraded());         // should upgrade
85          assertTrue(task5.isUpgraded());         // should upgrade
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 }