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