View Javadoc

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