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  import static org.hamcrest.MatcherAssert.assertThat;
13  import static org.hamcrest.Matchers.hasKey;
14  
15  public class TestDefaultPluginPersistentState extends TestCase {
16      public void testSetEnabledPlugin() {
17          PluginPersistentState state = new DefaultPluginPersistentState();
18          final StaticPlugin plugin = createMockPlugin("mock.plugin.key", true);
19          state = PluginPersistentState.Builder.create(state).setEnabled(plugin, true).toState();
20          assertTrue(state.isEnabled(plugin));
21          state = PluginPersistentState.Builder.create(state).setEnabled(plugin, false).toState();
22          assertFalse(state.isEnabled(plugin));
23      }
24  
25      public void testSetEnabledModuleDescriptor() {
26          PluginPersistentState state = new DefaultPluginPersistentState();
27          final ModuleDescriptor<?> module = createModule("mock.plugin.key", "module.key");
28          state = PluginPersistentState.Builder.create(state).setEnabled(module, true).toState();
29          assertTrue(state.isEnabled(module));
30          state = PluginPersistentState.Builder.create(state).setEnabled(module, false).toState();
31          assertFalse(state.isEnabled(module));
32      }
33  
34      public void testGetPluginStateMap() {
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 testDefaultModuleStateShouldBeStored() {
62          final String pluginKey = "mock.plugin.key";
63          StaticPlugin plugin = createMockPlugin(pluginKey, true);
64          final PluginPersistentState.Builder builder = PluginPersistentState.Builder.create();
65          builder.setEnabled(plugin, true);
66          Map<String, PluginEnabledState> pluginStateMap = builder.toState().getPluginEnabledStateMap(plugin);
67          assertThat(pluginStateMap, hasKey(pluginKey));
68  
69          builder.setEnabled(plugin, false);
70          pluginStateMap = builder.toState().getPluginEnabledStateMap(plugin);
71          assertFalse(pluginStateMap.isEmpty());
72  
73          builder.removeState(pluginKey);
74  
75          plugin = createMockPlugin(pluginKey, false);
76          builder.setEnabled(plugin, false);
77          pluginStateMap = builder.toState().getPluginEnabledStateMap(plugin);
78          assertThat(pluginStateMap, hasKey(pluginKey));
79          builder.setEnabled(plugin, true);
80          pluginStateMap = builder.toState().getPluginEnabledStateMap(plugin);
81          assertFalse(pluginStateMap.isEmpty());
82      }
83  
84      public void testPluginRestartState() {
85          PluginPersistentState state = new DefaultPluginPersistentState();
86          assertEquals(PluginRestartState.NONE, state.getPluginRestartState("foo"));
87  
88          state = PluginPersistentState.Builder.create(state).setPluginRestartState("foo", PluginRestartState.REMOVE).toState();
89          assertEquals(PluginRestartState.REMOVE, state.getPluginRestartState("foo"));
90  
91          PluginPersistentState stateCopy = new DefaultPluginPersistentState(state.getMap());
92          assertEquals(PluginRestartState.REMOVE, stateCopy.getPluginRestartState("foo"));
93          stateCopy = PluginPersistentState.Builder.create(state).clearPluginRestartState().toState();
94          assertEquals(PluginRestartState.NONE, stateCopy.getPluginRestartState("foo"));
95          assertEquals(PluginRestartState.REMOVE, state.getPluginRestartState("foo"));
96      }
97  
98      public void testPluginRestartStateRemoveExisting() {
99          final PluginPersistentState.Builder builder = PluginPersistentState.Builder.create();
100         builder.setPluginRestartState("foo", PluginRestartState.UPGRADE);
101         assertEquals(PluginRestartState.UPGRADE, builder.toState().getPluginRestartState("foo"));
102         builder.setPluginRestartState("foo", PluginRestartState.REMOVE);
103         assertEquals(PluginRestartState.REMOVE, builder.toState().getPluginRestartState("foo"));
104     }
105 
106     private <T> ModuleDescriptor<T> createModule(final String pluginKey, final String moduleKey) {
107         return new AbstractModuleDescriptor<T>(ModuleFactory.LEGACY_MODULE_FACTORY) {
108             @Override
109             public T getModule() {
110                 return null;
111             }
112 
113             @Override
114             public String getCompleteKey() {
115                 return pluginKey + ':' + moduleKey;
116             }
117         };
118     }
119 
120     private StaticPlugin createMockPlugin(final String pluginKey, final boolean enabledByDefault) {
121         final StaticPlugin plugin = new StaticPlugin();
122         plugin.setKey(pluginKey);
123         plugin.setEnabledByDefault(enabledByDefault);
124         return plugin;
125     }
126 
127 }