summaryrefslogtreecommitdiffstats
path: root/mobile/android/tests/background/junit4/src/com/keepsafe/switchboard/TestSwitchboard.java
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/tests/background/junit4/src/com/keepsafe/switchboard/TestSwitchboard.java')
-rw-r--r--mobile/android/tests/background/junit4/src/com/keepsafe/switchboard/TestSwitchboard.java142
1 files changed, 142 insertions, 0 deletions
diff --git a/mobile/android/tests/background/junit4/src/com/keepsafe/switchboard/TestSwitchboard.java b/mobile/android/tests/background/junit4/src/com/keepsafe/switchboard/TestSwitchboard.java
new file mode 100644
index 000000000..5726f12db
--- /dev/null
+++ b/mobile/android/tests/background/junit4/src/com/keepsafe/switchboard/TestSwitchboard.java
@@ -0,0 +1,142 @@
+package com.keepsafe.switchboard;
+
+import android.content.Context;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mozilla.gecko.background.testhelpers.TestRunner;
+import org.mozilla.gecko.Experiments;
+import org.mozilla.gecko.util.IOUtils;
+import org.robolectric.RuntimeEnvironment;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.List;
+import java.util.UUID;
+
+import static org.junit.Assert.*;
+
+@RunWith(TestRunner.class)
+public class TestSwitchboard {
+
+ /**
+ * Create a JSON response from a JSON file.
+ */
+ private String readFromFile(String fileName) throws IOException {
+ URL url = getClass().getResource("/" + fileName);
+ if (url == null) {
+ throw new FileNotFoundException(fileName);
+ }
+
+ InputStream inputStream = null;
+ ByteArrayOutputStream outputStream = null;
+
+ try {
+ inputStream = new BufferedInputStream(new FileInputStream(url.getPath()));
+ InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
+ BufferedReader bufferReader = new BufferedReader(inputStreamReader, 8192);
+ String line;
+ StringBuilder resultContent = new StringBuilder();
+ while ((line = bufferReader.readLine()) != null) {
+ resultContent.append(line);
+ }
+ bufferReader.close();
+
+ return resultContent.toString();
+
+ } finally {
+ IOUtils.safeStreamClose(inputStream);
+ }
+ }
+
+ @Before
+ public void setUp() throws IOException {
+ final Context c = RuntimeEnvironment.application;
+ Preferences.setDynamicConfigJson(c, readFromFile("experiments.json"));
+ }
+
+ @Test
+ public void testDeviceUuidFactory() {
+ final Context c = RuntimeEnvironment.application;
+ final DeviceUuidFactory df = new DeviceUuidFactory(c);
+ final UUID uuid = df.getDeviceUuid();
+ assertNotNull("UUID is not null", uuid);
+ assertEquals("DeviceUuidFactory always returns the same UUID", df.getDeviceUuid(), uuid);
+ }
+
+ @Test
+ public void testIsInExperiment() {
+ final Context c = RuntimeEnvironment.application;
+ assertTrue("active-experiment is active", SwitchBoard.isInExperiment(c, "active-experiment"));
+ assertFalse("inactive-experiment is inactive", SwitchBoard.isInExperiment(c, "inactive-experiment"));
+ }
+
+ @Test
+ public void testExperimentValues() throws JSONException {
+ final Context c = RuntimeEnvironment.application;
+ assertTrue("active-experiment has values", SwitchBoard.hasExperimentValues(c, "active-experiment"));
+ assertFalse("inactive-experiment doesn't have values", SwitchBoard.hasExperimentValues(c, "inactive-experiment"));
+
+ final JSONObject values = SwitchBoard.getExperimentValuesFromJson(c, "active-experiment");
+ assertNotNull("active-experiment values are not null", values);
+ assertTrue("\"foo\" extra value is true", values.getBoolean("foo"));
+ }
+
+ @Test
+ public void testGetActiveExperiments() {
+ final Context c = RuntimeEnvironment.application;
+ final List<String> experiments = SwitchBoard.getActiveExperiments(c);
+ assertNotNull("List of active experiments is not null", experiments);
+
+ assertTrue("List of active experiments contains active-experiment", experiments.contains("active-experiment"));
+ assertFalse("List of active experiments does not contain inactive-experiment", experiments.contains("inactive-experiment"));
+ }
+
+ @Test
+ public void testOverride() {
+ final Context c = RuntimeEnvironment.application;
+
+ Experiments.setOverride(c, "active-experiment", false);
+ assertFalse("active-experiment is not active because of override", SwitchBoard.isInExperiment(c, "active-experiment"));
+ assertFalse("List of active experiments does not contain active-experiment", SwitchBoard.getActiveExperiments(c).contains("active-experiment"));
+
+ Experiments.clearOverride(c, "active-experiment");
+ assertTrue("active-experiment is active after override is cleared", SwitchBoard.isInExperiment(c, "active-experiment"));
+ assertTrue("List of active experiments contains active-experiment again", SwitchBoard.getActiveExperiments(c).contains("active-experiment"));
+
+ Experiments.setOverride(c, "inactive-experiment", true);
+ assertTrue("inactive-experiment is active because of override", SwitchBoard.isInExperiment(c, "inactive-experiment"));
+ assertTrue("List of active experiments contains inactive-experiment", SwitchBoard.getActiveExperiments(c).contains("inactive-experiment"));
+
+ Experiments.clearOverride(c, "inactive-experiment");
+ assertFalse("inactive-experiment is inactive after override is cleared", SwitchBoard.isInExperiment(c, "inactive-experiment"));
+ assertFalse("List of active experiments does not contain inactive-experiment again", SwitchBoard.getActiveExperiments(c).contains("inactive-experiment"));
+ }
+
+ @Test
+ public void testMatching() {
+ final Context c = RuntimeEnvironment.application;
+ assertTrue("is-experiment is matching", SwitchBoard.isInExperiment(c, "is-matching"));
+ assertFalse("is-not-matching is not matching", SwitchBoard.isInExperiment(c, "is-not-matching"));
+ }
+
+ @Test
+ public void testNotExisting() {
+ final Context c = RuntimeEnvironment.application;
+ assertFalse("F0O does not exists", SwitchBoard.isInExperiment(c, "F0O"));
+ assertFalse("BaAaz does not exists", SwitchBoard.hasExperimentValues(c, "BaAaz"));
+ }
+
+
+
+}