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