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