1 package com.atlassian.plugin.parsers;
2
3 import com.google.common.collect.ImmutableList;
4 import org.junit.Test;
5
6 import java.util.Collections;
7 import java.util.List;
8
9 import static com.atlassian.plugin.parsers.SafeModeCommandLineArguments.PLUGIN_LIST_SEPARATOR;
10 import static java.util.Collections.singletonList;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertTrue;
14
15 public class TestSafeModeCommandLineArguments {
16 private String testDisablePluginParameterLinux = "--disable-addons=";
17 private String testDisablePluginParameterWindows = "/disableaddons=";
18 private String pluginKeyWithSlashes = "com.atlassian.test.plugin/adsfasdf";
19 private String pluginKeyWithSpaces = "asdf.asdf adsfasdf";
20 private String ordinaryPluginKey = "com.atlassian.test.plugin";
21 private String pluginKeyWithEmojis = "asdf.🙈.plugin";
22 private String pluginKeyWithKanji ="佀佁佂佃佄佅但佇佈佉佊佋佌位低住";
23
24 @Test
25 public void disablePluginParameterContainingKanjiShouldDisablePlugin() {
26 testDisablePlugins(singletonList(pluginKeyWithKanji), testDisablePluginParameterWindows, false);
27 testDisablePlugins(singletonList(pluginKeyWithKanji), testDisablePluginParameterLinux, false);
28 }
29
30 @Test
31 public void disablePluginParameterContainingSlashesShouldDisablePlugin() {
32 testDisablePlugins(singletonList(pluginKeyWithSlashes), testDisablePluginParameterWindows, false);
33 testDisablePlugins(singletonList(pluginKeyWithSlashes), testDisablePluginParameterLinux, false);
34 }
35
36 @Test
37 public void disablePluginParameterContainingEmojisShouldDisablePlugin() {
38 testDisablePlugins(singletonList(pluginKeyWithEmojis), testDisablePluginParameterWindows, false);
39 testDisablePlugins(singletonList(pluginKeyWithEmojis), testDisablePluginParameterLinux, false);
40 }
41
42 @Test
43 public void disablePluginParameterContainingSpacesAndQuotesShouldDisablePlugin() {
44 testDisablePlugins(singletonList(pluginKeyWithSpaces), testDisablePluginParameterWindows, true);
45 testDisablePlugins(singletonList(pluginKeyWithSpaces), testDisablePluginParameterLinux, true);
46 }
47
48 @Test
49 public void disablePluginParameterWithJustASCIICharactersShouldDisablePluginWithQuotes() {
50 testDisablePlugins(singletonList(ordinaryPluginKey), testDisablePluginParameterWindows, true);
51 testDisablePlugins(singletonList(ordinaryPluginKey), testDisablePluginParameterLinux, true);
52 }
53
54 @Test
55 public void disableMultiplePluginsWithQuotesShouldDisablePlugin() {
56 List<String> plugins = ImmutableList.of(ordinaryPluginKey, pluginKeyWithSlashes, pluginKeyWithSpaces);
57 testDisablePlugins(plugins, testDisablePluginParameterWindows, true);
58 testDisablePlugins(plugins, testDisablePluginParameterLinux, true);
59 }
60
61 @Test
62 public void disablePluginParameterWithJustASCIICharactersShouldDisablePlugin() {
63 testDisablePlugins(singletonList(ordinaryPluginKey), testDisablePluginParameterWindows, false);
64 testDisablePlugins(singletonList(ordinaryPluginKey), testDisablePluginParameterLinux, false);
65 }
66
67 @Test
68 public void disableParameterWithNoArgumentsPresent() {
69 SafeModeCommandLineArguments safeModeCommandLineArguments = new SafeModeCommandLineArguments("--disable-addons");
70 assertEquals(Collections.emptyList(), safeModeCommandLineArguments.getDisabledPlugins().orElse(null));
71 assertFalse(safeModeCommandLineArguments.isSafeMode());
72 }
73
74 @Test
75 public void disableParameterWithEqualsSignNoArgumentsPresent() {
76 SafeModeCommandLineArguments safeModeCommandLineArguments = new SafeModeCommandLineArguments("--disable-addons=");
77 assertEquals(Collections.emptyList(), safeModeCommandLineArguments.getDisabledPlugins().orElse(null));
78 assertFalse(safeModeCommandLineArguments.isSafeMode());
79 }
80
81 @Test
82 public void noParametersPresent() {
83 SafeModeCommandLineArguments safeModeCommandLineArguments = new SafeModeCommandLineArguments("");
84 assertFalse(safeModeCommandLineArguments.getDisabledPlugins().isPresent());
85 assertFalse(safeModeCommandLineArguments.isSafeMode());
86 assertFalse(safeModeCommandLineArguments.shouldLastEnabledBeDisabled());
87 }
88
89 @Test
90 public void disableLastEnabledParameterPresentWindows(){
91 SafeModeCommandLineArguments safeModeCommandLineArguments = new SafeModeCommandLineArguments("/disablelastenabled");
92 assertTrue(safeModeCommandLineArguments.shouldLastEnabledBeDisabled());
93 }
94
95 @Test
96 public void disableLastEnabledParameterPresentLinux(){
97 SafeModeCommandLineArguments safeModeCommandLineArguments = new SafeModeCommandLineArguments("--disable-last-enabled");
98 assertTrue(safeModeCommandLineArguments.shouldLastEnabledBeDisabled());
99 }
100
101 private void testDisablePlugins(List<String> plugins, String testParameter, boolean quotes) {
102 String pluginsList = "";
103
104 for (String plugin : plugins) {
105 pluginsList = pluginsList.concat(PLUGIN_LIST_SEPARATOR).concat(plugin);
106 }
107
108 if (quotes) {
109 pluginsList = testParameter.concat("\"".concat(pluginsList.substring(1)));
110 } else {
111 pluginsList = testParameter.concat(pluginsList.substring(1));
112 }
113
114 if (quotes) {
115 pluginsList = pluginsList.concat("\"");
116 }
117 SafeModeCommandLineArguments parser = new SafeModeCommandLineArguments(pluginsList);
118
119 plugins.forEach(p -> assertTrue(parser.isDisabledByParam(p)));
120 }
121 }