View Javadoc

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          // test that in the case of collisions, system properties trump contents of dark features properties file.
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         // system properties should trump contents of testdarkFeatures.properties
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