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