1 package com.atlassian.plugin.manager;
2
3 import com.atlassian.plugin.ModuleDescriptor;
4 import com.atlassian.plugin.Plugin;
5 import com.atlassian.plugin.metadata.PluginMetadataManager;
6 import com.atlassian.plugin.parsers.SafeModeCommandLineArguments;
7 import com.atlassian.plugin.parsers.SafeModeCommandLineArgumentsFactory;
8 import org.junit.Before;
9 import org.junit.Test;
10
11 import java.util.Collections;
12 import java.util.HashMap;
13 import java.util.Map;
14
15 import static com.atlassian.plugin.manager.ApplicationDefinedPluginsProvider.NO_APPLICATION_PLUGINS;
16 import static com.atlassian.plugin.manager.ClusterEnvironmentProvider.SINGLE_NODE;
17 import static java.util.Collections.emptyList;
18 import static java.util.Collections.singletonList;
19 import static org.junit.Assert.assertFalse;
20 import static org.junit.Assert.assertTrue;
21 import static org.mockito.ArgumentMatchers.any;
22 import static org.mockito.Mockito.mock;
23 import static org.mockito.Mockito.when;
24
25 public class TestDefaultSafeModeManager {
26
27 private ApplicationDefinedPluginsProvider appRelatedPlugProvider = NO_APPLICATION_PLUGINS;
28 private SafeModeCommandLineArguments safeModeCommandLineArgs;
29 private SafeModeCommandLineArgumentsFactory safeModeCommandLineArgsFactory;
30 private PluginMetadataManager mockPluginMetadataManager = mock(PluginMetadataManager.class);
31 private final String PLUGIN_KEY = "com.atlassian.test";
32
33 private PluginPersistentStateStore mockPluginPersistentStateStore;
34
35 @Before
36 public void setUp() throws Exception {
37
38 safeModeCommandLineArgs = mock(SafeModeCommandLineArguments.class);
39 safeModeCommandLineArgsFactory = mock(SafeModeCommandLineArgumentsFactory.class);
40 when(safeModeCommandLineArgsFactory.get()).thenReturn(safeModeCommandLineArgs);
41 mockPluginPersistentStateStore = mock(PluginPersistentStateStore.class);
42 PluginPersistentState mockPluginPersistentState = mock(PluginPersistentState.class);
43 when(mockPluginPersistentState.getStatesMap()).thenReturn(Collections.singletonMap(PLUGIN_KEY, new PluginEnabledState(true, 1)));
44 when(mockPluginPersistentStateStore.load()).thenReturn(mockPluginPersistentState);
45 }
46
47 @Test
48 public void nonSystemPluginShouldNotBeStartedWhenInSafeMode() {
49 when(safeModeCommandLineArgs.isSafeMode()).thenReturn(true);
50 Plugin mockPlugin = mock(Plugin.class);
51 DefaultSafeModeManager defaultSafeModeManager = new DefaultSafeModeManager(mockPluginMetadataManager, appRelatedPlugProvider, SINGLE_NODE, safeModeCommandLineArgsFactory, mockPluginPersistentStateStore);
52 when(mockPluginMetadataManager.isSystemProvided(any(Plugin.class))).thenReturn(false);
53 when(mockPluginMetadataManager.isOptional(any(Plugin.class))).thenReturn(true);
54 assertFalse(defaultSafeModeManager.pluginShouldBeStarted(mockPlugin, emptyList()));
55 }
56
57 @Test
58 public void systemPluginShouldBeStartedWhenInSafeMode() {
59 when(safeModeCommandLineArgs.isSafeMode()).thenReturn(true);
60 Plugin mockPlugin = mock(Plugin.class);
61 DefaultSafeModeManager defaultSafeModeManager = new DefaultSafeModeManager(mockPluginMetadataManager, appRelatedPlugProvider, SINGLE_NODE, safeModeCommandLineArgsFactory, mockPluginPersistentStateStore);
62 when(mockPluginMetadataManager.isOptional(any(Plugin.class))).thenReturn(true);
63 when(mockPluginMetadataManager.isSystemProvided(any(Plugin.class))).thenReturn(true);
64 assertTrue(defaultSafeModeManager.pluginShouldBeStarted(mockPlugin, emptyList()));
65 }
66
67 @Test
68 public void nonSystemPluginShouldBeStartedWhenNotInSafeMode() {
69 Plugin mockPlugin = mock(Plugin.class);
70 DefaultSafeModeManager defaultSafeModeManager = new DefaultSafeModeManager(mockPluginMetadataManager, appRelatedPlugProvider, SINGLE_NODE, safeModeCommandLineArgsFactory, mockPluginPersistentStateStore);
71 when(mockPluginMetadataManager.isSystemProvided(any(Plugin.class))).thenReturn(false);
72 when(mockPluginMetadataManager.isOptional(any(Plugin.class))).thenReturn(true);
73 assertTrue(defaultSafeModeManager.pluginShouldBeStarted(mockPlugin, emptyList()));
74 }
75
76 @Test
77 public void systemPluginShouldBeStartedWhenNotInSafeMode() {
78 Plugin mockPlugin = mock(Plugin.class);
79 DefaultSafeModeManager defaultSafeModeManager = new DefaultSafeModeManager(mockPluginMetadataManager, appRelatedPlugProvider, SINGLE_NODE, safeModeCommandLineArgsFactory, mockPluginPersistentStateStore);
80 when(mockPluginMetadataManager.isOptional(any(Plugin.class))).thenReturn(true);
81 when(mockPluginMetadataManager.isSystemProvided(any(Plugin.class))).thenReturn(true);
82 assertTrue(defaultSafeModeManager.pluginShouldBeStarted(mockPlugin, emptyList()));
83 when(mockPluginMetadataManager.isSystemProvided(any(Plugin.class))).thenReturn(false);
84 assertTrue(defaultSafeModeManager.pluginShouldBeStarted(mockPlugin, emptyList()));
85 }
86
87 @Test
88 public void pluginShouldNotBeStartedWhenIsLastEnabledAndDisableLastEnabledParameterSet() {
89 when(safeModeCommandLineArgs.shouldLastEnabledBeDisabled()).thenReturn(true);
90 Plugin mockPlugin = mock(Plugin.class);
91 ModuleDescriptor descriptor = mock(ModuleDescriptor.class);
92 when(mockPlugin.getKey()).thenReturn(PLUGIN_KEY);
93 DefaultSafeModeManager defaultSafeModeManager = new DefaultSafeModeManager(mockPluginMetadataManager, appRelatedPlugProvider, SINGLE_NODE, safeModeCommandLineArgsFactory, mockPluginPersistentStateStore);
94 assertFalse(defaultSafeModeManager.pluginShouldBeStarted(mockPlugin, singletonList(descriptor)));
95 }
96
97 @Test
98 public void pluginShouldBeStartedWhenIsNotLastEnabledAndDisableLastEnabledParameterSet() {
99 when(safeModeCommandLineArgs.shouldLastEnabledBeDisabled()).thenReturn(true);
100 Map<String, PluginEnabledState> enabledStateHashMap = new HashMap<>();
101 enabledStateHashMap.put("asdf", new PluginEnabledState(true, 2));
102 enabledStateHashMap.put(PLUGIN_KEY, new PluginEnabledState(true, 1));
103 when(mockPluginPersistentStateStore.load().getStatesMap()).thenReturn(enabledStateHashMap);
104 Plugin mockPlugin = mock(Plugin.class);
105 ModuleDescriptor descriptor = mock(ModuleDescriptor.class);
106 when(mockPlugin.getKey()).thenReturn(PLUGIN_KEY);
107 DefaultSafeModeManager defaultSafeModeManager = new DefaultSafeModeManager(mockPluginMetadataManager, appRelatedPlugProvider, SINGLE_NODE, safeModeCommandLineArgsFactory, mockPluginPersistentStateStore);
108 assertTrue(defaultSafeModeManager.pluginShouldBeStarted(mockPlugin, singletonList(descriptor)));
109 }
110
111 @Test
112 public void shouldNotBeInSafeModeWhenDisableAllAddonsParameterNotPresent(){
113 when(safeModeCommandLineArgs.isSafeMode()).thenReturn(false);
114 DefaultSafeModeManager defaultSafeModeManager = new DefaultSafeModeManager(mockPluginMetadataManager, appRelatedPlugProvider, SINGLE_NODE, safeModeCommandLineArgsFactory, mockPluginPersistentStateStore);
115 assertFalse(defaultSafeModeManager.isInSafeMode());
116 }
117
118 }