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