View Javadoc

1   package com.atlassian.plugin.manager;
2   
3   import com.atlassian.plugin.ModuleDescriptor;
4   import com.atlassian.plugin.PluginRestartState;
5   import com.atlassian.plugin.descriptors.AbstractModuleDescriptor;
6   import com.atlassian.plugin.impl.StaticPlugin;
7   import junit.framework.TestCase;
8   
9   import java.util.Map;
10  
11  public class TestDefaultPluginPersistentState extends TestCase
12  {
13      public void testSetEnabledPlugin()
14      {
15          PluginPersistentState state = new DefaultPluginPersistentState();
16          final StaticPlugin plugin = createMockPlugin("mock.plugin.key", true);
17          state = PluginPersistentState.Builder.create(state).setEnabled(plugin, true).toState();
18          assertTrue(state.isEnabled(plugin));
19          state = PluginPersistentState.Builder.create(state).setEnabled(plugin, false).toState();
20          assertFalse(state.isEnabled(plugin));
21      }
22  
23      public void testSetEnabledModuleDescriptor()
24      {
25          PluginPersistentState state = new DefaultPluginPersistentState();
26          final ModuleDescriptor<?> module = createModule("mock.plugin.key", "module.key");
27          state = PluginPersistentState.Builder.create(state).setEnabled(module, true).toState();
28          assertTrue(state.isEnabled(module));
29          state = PluginPersistentState.Builder.create(state).setEnabled(module, false).toState();
30          assertFalse(state.isEnabled(module));
31      }
32  
33      public void testGetPluginStateMap()
34      {
35          final StaticPlugin plugin1 = createMockPlugin("mock.plugin.key", true);
36          final StaticPlugin plugin2 = createMockPlugin("two.mock.plugin.key", true);
37          final ModuleDescriptor<?> module1 = createModule("mock.plugin.key", "module.key.1");
38          final ModuleDescriptor<?> module2 = createModule("mock.plugin.key", "module.key.2");
39          final ModuleDescriptor<?> module3 = createModule("mock.plugin.key", "module.key.3");
40          // because all plugins and modules are enabled by default lets disable them
41  
42          final PluginPersistentState.Builder builder = PluginPersistentState.Builder.create();
43          builder.setEnabled(plugin1, !plugin1.isEnabledByDefault());
44          builder.setEnabled(plugin2, !plugin1.isEnabledByDefault());
45          builder.setEnabled(module1, !module1.isEnabledByDefault());
46          builder.setEnabled(module2, !module2.isEnabledByDefault());
47          builder.setEnabled(module3, !module3.isEnabledByDefault());
48  
49          final PluginPersistentState state = builder.toState();
50          final Map<String, Boolean> pluginStateMap = state.getPluginStateMap(plugin1);
51          final PluginPersistentState pluginState = new DefaultPluginPersistentState(pluginStateMap);
52  
53          assertFalse(pluginState.isEnabled(plugin1) == plugin1.isEnabledByDefault());
54          assertFalse(pluginState.isEnabled(module1) == module1.isEnabledByDefault());
55          assertFalse(pluginState.isEnabled(module2) == module2.isEnabledByDefault());
56          assertFalse(pluginState.isEnabled(module3) == module3.isEnabledByDefault());
57          // plugin2 should not be part of the map therefore it should have default enabled value
58          assertTrue(pluginState.isEnabled(plugin2) == plugin2.isEnabledByDefault());
59      }
60  
61      public void testDefaultModuleStateIsNotStored()
62      {
63          final String pluginKey = "mock.plugin.key";
64          StaticPlugin plugin = createMockPlugin(pluginKey, true);
65          final PluginPersistentState.Builder builder = PluginPersistentState.Builder.create();
66          builder.setEnabled(plugin, true);
67          Map<String, Boolean> pluginStateMap = builder.toState().getPluginStateMap(plugin);
68          assertTrue(pluginStateMap.isEmpty());
69  
70          builder.setEnabled(plugin, false);
71          pluginStateMap = builder.toState().getPluginStateMap(plugin);
72          assertFalse(pluginStateMap.isEmpty());
73  
74          builder.removeState(pluginKey);
75  
76          plugin = createMockPlugin(pluginKey, false);
77          builder.setEnabled(plugin, false);
78          pluginStateMap = builder.toState().getPluginStateMap(plugin);
79          assertTrue(pluginStateMap.isEmpty());
80          builder.setEnabled(plugin, true);
81          pluginStateMap = builder.toState().getPluginStateMap(plugin);
82          assertFalse(pluginStateMap.isEmpty());
83      }
84  
85      public void testPluginRestartState()
86      {
87          PluginPersistentState state = new DefaultPluginPersistentState();
88          assertEquals(PluginRestartState.NONE, state.getPluginRestartState("foo"));
89  
90          state = PluginPersistentState.Builder.create(state).setPluginRestartState("foo", PluginRestartState.REMOVE).toState();
91          assertEquals(PluginRestartState.REMOVE, state.getPluginRestartState("foo"));
92  
93          PluginPersistentState stateCopy = new DefaultPluginPersistentState(state.getMap());
94          assertEquals(PluginRestartState.REMOVE, stateCopy.getPluginRestartState("foo"));
95          stateCopy = PluginPersistentState.Builder.create(state).clearPluginRestartState().toState();
96          assertEquals(PluginRestartState.NONE, stateCopy.getPluginRestartState("foo"));
97          assertEquals(PluginRestartState.REMOVE, state.getPluginRestartState("foo"));
98      }
99  
100     public void testPluginRestartStateRemoveExisting()
101     {
102         final PluginPersistentState.Builder builder = PluginPersistentState.Builder.create();
103         builder.setPluginRestartState("foo", PluginRestartState.UPGRADE);
104         assertEquals(PluginRestartState.UPGRADE, builder.toState().getPluginRestartState("foo"));
105         builder.setPluginRestartState("foo", PluginRestartState.REMOVE);
106         assertEquals(PluginRestartState.REMOVE, builder.toState().getPluginRestartState("foo"));
107     }
108 
109     private <T> ModuleDescriptor<T> createModule(final String pluginKey, final String moduleKey)
110     {
111         return new AbstractModuleDescriptor<T>()
112         {
113             @Override
114             public T getModule()
115             {
116                 return null;
117             }
118 
119             @Override
120             public String getCompleteKey()
121             {
122                 return pluginKey + ':' + moduleKey;
123             }
124         };
125     }
126 
127     private StaticPlugin createMockPlugin(final String pluginKey, final boolean enabledByDefault)
128     {
129         final StaticPlugin plugin = new StaticPlugin();
130         plugin.setKey(pluginKey);
131         plugin.setEnabledByDefault(enabledByDefault);
132         return plugin;
133     }
134 
135 }