public Config(String name, List<Feature> features) { this.name = name; this.features = features; generateFeatureMap(); }
/** * Generates a {@link Map} out of the features {@link List} */ public void generateFeatureMap() { featureMap = new HashMap<>(); if (features != null) { for (Feature feature : features) { featureMap.put(feature.getName(), feature); } } }
@NonNull @VisibleForTesting ResponseDecisionMeta getDefaultResponseDecision(final Feature feature, final CheckRequest checkRequest) { // first preference in defaults is given to the local variable (provided while the Toggle.with().check().setDefault().handle() call) if (checkRequest.defaultState != null) { return new ResponseDecisionMeta(checkRequest.defaultState); } // in case no Default is provided in the feature (in the config), return enabled if (feature._default == null) { return new ResponseDecisionMeta(DEFAULT_STATE); } // so no local defaults but some default is provided in the config return new ResponseDecisionMeta(feature._default); }
@NonNull private static Config getStandardConfig(String metadata) { List<Rule> rules = new ArrayList<>(); Value value1 = new Value(14, 18, null, null, null, null, null, null); Value value2 = new Value(null, null, null, null, 1453196880000L, null, null, null); rules.add(new Rule(Toggle.DISABLED, metadata, value1)); rules.add(new Rule(Toggle.DISABLED, metadata, value2)); Feature featureVideo = new Feature("video", null, Toggle.ENABLED, featureMetadata, rules); Feature featureAudio = new Feature("audio", Toggle.ENABLED, null, featureMetadata, rules); Feature featureSpeech = new Feature("speech", null, Toggle.DISABLED, featureMetadata, rules); List<Feature> features = new ArrayList<>(); features.add(featureVideo); features.add(featureAudio); features.add(featureSpeech); return new Config("myapp", features); }
public void setConfig(Config config) { // check for the config map if (config.getFeatureMap() == null) config.generateFeatureMap(); setSourceType(SourceType.CONFIG); // store source PersistUtils.storeSourceType(getContext(), SourceType.CONFIG); // store config storeConfigInMem(config); PersistUtils.storeConfig(getContext(), config); }
@Test(expected = IllegalStateException.class) public void handleFeature_stateNull_ruleMatched_nullForRightAPILevel_throwsException() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); Value value = new Value(14, 18, null, null, null, null, null, null); rules.add(new Rule(null, ruleMetadata, value)); Feature feature = new Feature("video", null, Toggle.ENABLED, featureMetadata, rules); CheckRequest checkRequest = new CheckRequest(toggle, "video", null, null, false, null); PowerMockito.spy(RuleMatcher.class); Mockito.when(RuleMatcher.getBuildVersion()).thenReturn(16); toggle.handleFeature(feature, checkRequest); }
@Test(expected = IllegalStateException.class) public void getRuleMatchedResponseDecision_null_throwsException() { Toggle toggle = new Toggle(context); Value value = new Value(14, 16, null, null, null, null, null, null); Rule rule = new Rule(null, ruleMetadata, value); toggle.getRuleMatchedResponseDecision(rule); }
@Override public void onSuccess(Config config) { // calculate the map config.generateFeatureMap(); // store in mem Toggle.storeConfigInMem(config); // call the success method configRetrievedSuccess(config, checkRequest); }
@NonNull @VisibleForTesting ResponseDecisionMeta getStatePoweredResponseDecision(Feature feature) { // if state is null, we can't take state on this if (feature.state == null) return new ResponseDecisionMeta(DEFAULT_STATE); // if state is not null, use the overriding feature return new ResponseDecisionMeta(feature.state); }
@Test public void getRuleMatchedResponseDecision_disabled_returnsDisabled() { Toggle toggle = new Toggle(context); Value value = new Value(14, 16, null, null, null, null, null, null); Rule rule = new Rule(Toggle.DISABLED, ruleMetadata, value); ResponseDecisionMeta responseDecisionMeta = toggle.getRuleMatchedResponseDecision(rule); // assert the state assertThat(responseDecisionMeta.state).isEqualTo(Toggle.DISABLED); // assert the ruleMetadata assertThat(responseDecisionMeta.ruleMetadata).isEqualTo(ruleMetadata); }
public void setConfig(JsonElement configInJson) { setSourceType(SourceType.JSONOBJECT); // store source PersistUtils.storeSourceType(getContext(), SourceType.JSONOBJECT); // convert from json to config Config config = ConversionUtils.convertJSONObjectToConfig(configInJson); // generate the map config.generateFeatureMap(); // store config storeConfigInMem(config); PersistUtils.storeConfig(getContext(), config); }
@Test public void getRuleMatchedResponseDecision_enabled_returnsEnabled() { Toggle toggle = new Toggle(context); Value value = new Value(14, 16, null, null, null, null, null, null); Rule rule = new Rule(Toggle.ENABLED, ruleMetadata, value); ResponseDecisionMeta responseDecisionMeta = toggle.getRuleMatchedResponseDecision(rule); // assert the state assertThat(responseDecisionMeta.state).isEqualTo(Toggle.ENABLED); // assert the ruleMetadata assertThat(responseDecisionMeta.ruleMetadata).isEqualTo(ruleMetadata); }
@Test public void matchRule_apiLevelMixMaxCheck_appversionMixMaxCheck_correct_returnsTrue() { PowerMockito.spy(RuleMatcher.class); intializeBuildVersion18AndVersionCode100(); Rule rule = new Rule(Toggle.DISABLED, null, new Value(14, 22, 90, 110, null, null, null, null)); boolean result = RuleMatcher.matchRule(rule); assertThat(result).isTrue(); }
@Test public void matchRule_apiLevelMixMaxCheck_appversionMixMaxCheck_incorrect_returnsFalse() { PowerMockito.spy(RuleMatcher.class); intializeBuildVersion18AndVersionCode100(); Rule rule = new Rule(Toggle.DISABLED, null, new Value(14, 22, 110, 120, null, null, null, null)); boolean result = RuleMatcher.matchRule(rule); assertThat(result).isFalse(); }
@Test public void matchRule_apiLevelMixMaxCheck_incorrect_returnsFalse() { PowerMockito.spy(RuleMatcher.class); initializeBuildVersion18(); Rule rule = new Rule(Toggle.DISABLED, null, new Value(14, 16, null, null, null, null, null, null)); boolean result = RuleMatcher.matchRule(rule); assertThat(result).isFalse(); }
@Test public void matchRule_apiLevelMixMaxCheck_correct_returnsTrue() { PowerMockito.spy(RuleMatcher.class); initializeBuildVersion18(); Rule rule = new Rule(Toggle.DISABLED, null, new Value(14, 22, null, null, null, null, null, null)); boolean result = RuleMatcher.matchRule(rule); assertThat(result).isTrue(); }
@Test public void matchRule_apiLevelCheck_correct_returnsTrue() { PowerMockito.spy(RuleMatcher.class); Mockito.when(RuleMatcher.getBuildVersion()).thenReturn(22); Rule rule = new Rule(Toggle.DISABLED, null, new Value(14, null, null, null, null, null, null, null)); boolean result = RuleMatcher.matchRule(rule); assertThat(result).isTrue(); }
@Test public void matchRule_apiLevelMixMaxCheck_appversionMixMaxCheck_dateMixMaxCheck_correct_returnsTrue() { PowerMockito.spy(RuleMatcher.class); PowerMockito.spy(System.class); initializeCurrentTimeBasic(); intializeBuildVersion18AndVersionCode100(); Rule rule = new Rule(Toggle.DISABLED, null, new Value(14, 22, 90, 110, 1450000000000L, 1459990000000L, null, null)); boolean result = RuleMatcher.matchRule(rule); assertThat(result).isTrue(); }
@Test public void matchRule_apiLevelMixMaxCheck_appversionMixMaxCheck_dateMixMaxCheck_incorrect_returnsFalse() { PowerMockito.spy(RuleMatcher.class); PowerMockito.spy(System.class); initializeCurrentTimeBasic(); intializeBuildVersion18AndVersionCode100(); Rule rule = new Rule(Toggle.DISABLED, null, new Value(14, 22, 90, 110, 1453199990000L, 1453199999999L, null, null)); boolean result = RuleMatcher.matchRule(rule); assertThat(result).isFalse(); }