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
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
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 }