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