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