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