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 {
15 @Rule 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 {
22 final SystemDarkFeatureInitializer.SystemDarkFeatures systemDarkFeatures = SystemDarkFeatureInitializer.getSystemStartupDarkFeatures();
23
24 assertTrue(systemDarkFeatures.getEnabled().isEmpty());
25 assertTrue(systemDarkFeatures.getDisabled().isEmpty());
26 assertFalse(systemDarkFeatures.isDisableAll());
27 }
28
29 @Test
30 public void testSystemPropsDarkFeatures()
31 {
32 systemProperty.setProperty("atlassian.darkfeature.foo", "true");
33 systemProperty.setProperty("atlassian.darkfeature.bar", "false");
34 systemProperty.setProperty("atlassian.darkfeature.baz", "maybe");
35 systemProperty.setProperty("atlassian.darkfeatures.fake", "ignored");
36
37 final SystemDarkFeatureInitializer.SystemDarkFeatures systemDarkFeatures = SystemDarkFeatureInitializer.getSystemStartupDarkFeatures();
38 final Set<String> enabledSystemDarkFeatures = systemDarkFeatures.getEnabled();
39 final Set<String> disabledSystemDarkFeatures = systemDarkFeatures.getDisabled();
40
41 assertEquals(1, enabledSystemDarkFeatures.size());
42 assertEquals(1, disabledSystemDarkFeatures.size());
43 assertFalse(systemDarkFeatures.isDisableAll());
44
45 assertTrue(enabledSystemDarkFeatures.contains("foo"));
46 assertTrue(disabledSystemDarkFeatures.contains("bar"));
47 }
48
49 @Test
50 public void testPropertiesFileDarkFeatures()
51 {
52 systemProperty.setProperty(DefaultDarkFeatureManager.DARKFEATURES_PROPERTIES_FILE_PROPERTY, resource.getPath());
53
54 final SystemDarkFeatureInitializer.SystemDarkFeatures systemDarkFeatures = SystemDarkFeatureInitializer.getSystemStartupDarkFeatures();
55 final Set<String> enabledSystemDarkFeatures = systemDarkFeatures.getEnabled();
56 final Set<String> disabledSystemDarkFeatures = systemDarkFeatures.getDisabled();
57
58 assertEquals(1, enabledSystemDarkFeatures.size());
59 assertEquals(1, disabledSystemDarkFeatures.size());
60 assertFalse(systemDarkFeatures.isDisableAll());
61
62 assertTrue(enabledSystemDarkFeatures.contains("foo"));
63 assertTrue(disabledSystemDarkFeatures.contains("bar"));
64 }
65
66 @Test
67 public void testDarkFeaturesFromBothSources()
68 {
69 systemProperty.setProperty("atlassian.darkfeature.bat", "true");
70 systemProperty.setProperty("atlassian.darkfeature.bam", "false");
71 systemProperty.setProperty("atlassian.darkfeature.bax", "maybe");
72
73 systemProperty.setProperty(DefaultDarkFeatureManager.DARKFEATURES_PROPERTIES_FILE_PROPERTY, resource.getPath());
74
75 final SystemDarkFeatureInitializer.SystemDarkFeatures systemDarkFeatures = SystemDarkFeatureInitializer.getSystemStartupDarkFeatures();
76 final Set<String> enabledSystemDarkFeatures = systemDarkFeatures.getEnabled();
77 final Set<String> disabledSystemDarkFeatures = systemDarkFeatures.getDisabled();
78
79 assertEquals(2, enabledSystemDarkFeatures.size());
80 assertEquals(2, disabledSystemDarkFeatures.size());
81 assertFalse(systemDarkFeatures.isDisableAll());
82
83 assertTrue(enabledSystemDarkFeatures.contains("foo"));
84 assertTrue(enabledSystemDarkFeatures.contains("bat"));
85 assertTrue(disabledSystemDarkFeatures.contains("bar"));
86 assertTrue(disabledSystemDarkFeatures.contains("bam"));
87 }
88
89 @Test
90 public void testContradictingDarkFeatures()
91 {
92
93 systemProperty.setProperty("atlassian.darkfeature.foo", "false");
94 systemProperty.setProperty("atlassian.darkfeature.bar", "true");
95 systemProperty.setProperty("atlassian.darkfeature.bat", "true");
96
97 systemProperty.setProperty(DefaultDarkFeatureManager.DARKFEATURES_PROPERTIES_FILE_PROPERTY, resource.getPath());
98
99 final SystemDarkFeatureInitializer.SystemDarkFeatures systemDarkFeatures = SystemDarkFeatureInitializer.getSystemStartupDarkFeatures();
100 final Set<String> enabledSystemDarkFeatures = systemDarkFeatures.getEnabled();
101 final Set<String> disabledSystemDarkFeatures = systemDarkFeatures.getDisabled();
102
103 assertEquals(2, enabledSystemDarkFeatures.size());
104 assertEquals(1, disabledSystemDarkFeatures.size());
105 assertFalse(systemDarkFeatures.isDisableAll());
106
107
108 assertTrue(enabledSystemDarkFeatures.contains("bar"));
109 assertTrue(enabledSystemDarkFeatures.contains("bat"));
110 assertTrue(disabledSystemDarkFeatures.contains("foo"));
111 }
112
113 @Test
114 public void testDisableAll()
115 {
116 systemProperty.setProperty(DefaultDarkFeatureManager.DISABLE_ALL_DARKFEATURES_PROPERTY, "true");
117 systemProperty.setProperty(DefaultDarkFeatureManager.DARKFEATURES_PROPERTIES_FILE_PROPERTY, resource.getPath());
118
119 final SystemDarkFeatureInitializer.SystemDarkFeatures systemDarkFeatures = SystemDarkFeatureInitializer.getSystemStartupDarkFeatures();
120
121 assertTrue(systemDarkFeatures.isDisableAll());
122 assertTrue(systemDarkFeatures.getEnabled().isEmpty());
123 }
124
125 }
126