bool IsIdentifierWithinPercentage(ToggleConfig toggleConfig, string identifier) { var bytes = hasher.Hash(identifier); var group = toggleConfig.PercentGroup % bytes.Length; var result = bytes[group] / 256d; return result < toggleConfig.Percent; }
public void When_parsing_a_between_config(string config, string expectedStartString, string expectedEndString) { var result = new ToggleConfig(config); Assert.That(result.ConfigType, Is.EqualTo(ToggleConfigType.Between)); Assert.That(result.StartUtc, Is.EqualTo(DateTime.Parse(expectedStartString).ToUniversalTime())); Assert.That(result.EndUtc, Is.EqualTo(DateTime.Parse(expectedEndString).ToUniversalTime())); }
public bool IsFeatureOn(string config, string identifier) { var toggleConfig = new ToggleConfig(config); switch (toggleConfig.ConfigType) { case ToggleConfigType.Off: return false; case ToggleConfigType.On: return true; case ToggleConfigType.Percent: return IsIdentifierWithinPercentage(toggleConfig, identifier); case ToggleConfigType.Start: return HasTimeArrived(toggleConfig.StartUtc); case ToggleConfigType.End: return !HasTimeArrived(toggleConfig.EndUtc); case ToggleConfigType.Between: return HasTimeArrived(toggleConfig.StartUtc) && !HasTimeArrived(toggleConfig.EndUtc); default: throw new NotImplementedException(); } }
public void When_parsing_a_end_timestamp(string config, string expectedEndString) { var result = new ToggleConfig(config); Assert.That(result.ConfigType, Is.EqualTo(ToggleConfigType.End)); Assert.That(result.EndUtc, Is.EqualTo(DateTime.Parse(expectedEndString).ToUniversalTime())); }
public void When_parsing_ON(string config) { var result = new ToggleConfig(config); Assert.That(result.ConfigType, Is.EqualTo(ToggleConfigType.On)); }
public void When_parsing_a_percent_with_a_group(string config, double expectedPercent, int expectedGroup) { var result = new ToggleConfig(config); Assert.That(result.ConfigType, Is.EqualTo(ToggleConfigType.Percent)); Assert.That(result.Percent, Is.EqualTo(expectedPercent)); Assert.That(result.PercentGroup, Is.EqualTo(expectedGroup)); }