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