1 package com.atlassian.sal.core.features;
2
3 import org.junit.Rule;
4 import org.junit.Test;
5
6 import java.net.URL;
7 import java.util.Set;
8
9 import static org.junit.Assert.assertEquals;
10 import static org.junit.Assert.assertFalse;
11 import static org.junit.Assert.assertTrue;
12
13 public class TestSystemDarkFeatureInitializer {
14 @Rule
15 public final ClearSystemPropertyRule systemProperty = new ClearSystemPropertyRule();
16
17 private final URL resource = getClass().getClassLoader().getResource("testdarkfeatures.properties");
18
19 @Test
20 public void testNoFileDarkFeatures() {
21 final SystemDarkFeatureInitializer.SystemDarkFeatures systemDarkFeatures = SystemDarkFeatureInitializer.getSystemStartupDarkFeatures();
22
23 assertTrue(systemDarkFeatures.getEnabled().isEmpty());
24 assertTrue(systemDarkFeatures.getDisabled().isEmpty());
25 assertFalse(systemDarkFeatures.isDisableAll());
26 }
27
28 @Test
29 public void testSystemPropsDarkFeatures() {
30 systemProperty.setProperty("atlassian.darkfeature.foo", "true");
31 systemProperty.setProperty("atlassian.darkfeature.bar", "false");
32 systemProperty.setProperty("atlassian.darkfeature.baz", "maybe");
33 systemProperty.setProperty("atlassian.darkfeatures.fake", "ignored");
34
35 final SystemDarkFeatureInitializer.SystemDarkFeatures systemDarkFeatures = SystemDarkFeatureInitializer.getSystemStartupDarkFeatures();
36 final Set<String> enabledSystemDarkFeatures = systemDarkFeatures.getEnabled();
37 final Set<String> disabledSystemDarkFeatures = systemDarkFeatures.getDisabled();
38
39 assertEquals(1, enabledSystemDarkFeatures.size());
40 assertEquals(1, disabledSystemDarkFeatures.size());
41 assertFalse(systemDarkFeatures.isDisableAll());
42
43 assertTrue(enabledSystemDarkFeatures.contains("foo"));
44 assertTrue(disabledSystemDarkFeatures.contains("bar"));
45 }
46
47 @Test
48 public void testPropertiesFileDarkFeatures() {
49 systemProperty.setProperty(DefaultDarkFeatureManager.DARKFEATURES_PROPERTIES_FILE_PROPERTY, resource.getPath());
50
51 final SystemDarkFeatureInitializer.SystemDarkFeatures systemDarkFeatures = SystemDarkFeatureInitializer.getSystemStartupDarkFeatures();
52 final Set<String> enabledSystemDarkFeatures = systemDarkFeatures.getEnabled();
53 final Set<String> disabledSystemDarkFeatures = systemDarkFeatures.getDisabled();
54
55 assertEquals(1, enabledSystemDarkFeatures.size());
56 assertEquals(1, disabledSystemDarkFeatures.size());
57 assertFalse(systemDarkFeatures.isDisableAll());
58
59 assertTrue(enabledSystemDarkFeatures.contains("foo"));
60 assertTrue(disabledSystemDarkFeatures.contains("bar"));
61 }
62
63 @Test
64 public void testDarkFeaturesFromBothSources() {
65 systemProperty.setProperty("atlassian.darkfeature.bat", "true");
66 systemProperty.setProperty("atlassian.darkfeature.bam", "false");
67 systemProperty.setProperty("atlassian.darkfeature.bax", "maybe");
68
69 systemProperty.setProperty(DefaultDarkFeatureManager.DARKFEATURES_PROPERTIES_FILE_PROPERTY, resource.getPath());
70
71 final SystemDarkFeatureInitializer.SystemDarkFeatures systemDarkFeatures = SystemDarkFeatureInitializer.getSystemStartupDarkFeatures();
72 final Set<String> enabledSystemDarkFeatures = systemDarkFeatures.getEnabled();
73 final Set<String> disabledSystemDarkFeatures = systemDarkFeatures.getDisabled();
74
75 assertEquals(2, enabledSystemDarkFeatures.size());
76 assertEquals(2, disabledSystemDarkFeatures.size());
77 assertFalse(systemDarkFeatures.isDisableAll());
78
79 assertTrue(enabledSystemDarkFeatures.contains("foo"));
80 assertTrue(enabledSystemDarkFeatures.contains("bat"));
81 assertTrue(disabledSystemDarkFeatures.contains("bar"));
82 assertTrue(disabledSystemDarkFeatures.contains("bam"));
83 }
84
85 @Test
86 public void testContradictingDarkFeatures() {
87
88 systemProperty.setProperty("atlassian.darkfeature.foo", "false");
89 systemProperty.setProperty("atlassian.darkfeature.bar", "true");
90 systemProperty.setProperty("atlassian.darkfeature.bat", "true");
91
92 systemProperty.setProperty(DefaultDarkFeatureManager.DARKFEATURES_PROPERTIES_FILE_PROPERTY, resource.getPath());
93
94 final SystemDarkFeatureInitializer.SystemDarkFeatures systemDarkFeatures = SystemDarkFeatureInitializer.getSystemStartupDarkFeatures();
95 final Set<String> enabledSystemDarkFeatures = systemDarkFeatures.getEnabled();
96 final Set<String> disabledSystemDarkFeatures = systemDarkFeatures.getDisabled();
97
98 assertEquals(2, enabledSystemDarkFeatures.size());
99 assertEquals(1, disabledSystemDarkFeatures.size());
100 assertFalse(systemDarkFeatures.isDisableAll());
101
102
103 assertTrue(enabledSystemDarkFeatures.contains("bar"));
104 assertTrue(enabledSystemDarkFeatures.contains("bat"));
105 assertTrue(disabledSystemDarkFeatures.contains("foo"));
106 }
107
108 @Test
109 public void testDisableAll() {
110 systemProperty.setProperty(DefaultDarkFeatureManager.DISABLE_ALL_DARKFEATURES_PROPERTY, "true");
111 systemProperty.setProperty(DefaultDarkFeatureManager.DARKFEATURES_PROPERTIES_FILE_PROPERTY, resource.getPath());
112
113 final SystemDarkFeatureInitializer.SystemDarkFeatures systemDarkFeatures = SystemDarkFeatureInitializer.getSystemStartupDarkFeatures();
114
115 assertTrue(systemDarkFeatures.isDisableAll());
116 assertTrue(systemDarkFeatures.getEnabled().isEmpty());
117 }
118
119 }
120