public void TestFixedTargetAndRateBehaveCorrectly() { var strategy = new LocalizedSamplingStrategy(); strategy.Rules.Add(new SamplingRule("name", "test", "get", 10, 0.05)); int count = 0; // fill the fixed target rate Action action = () => { if (strategy.Sample("name", "test", "get") == SampleDecision.Sampled) { Interlocked.Increment(ref count); } }; var actions = Enumerable.Repeat(action, 10).ToArray(); Parallel.Invoke(actions); Assert.AreEqual(10, count); count = 0; for (int i = 0; i < 200; i++) { count += strategy.Sample("name", "test", "get") == SampleDecision.Sampled ? 1 : 0; } // Default sample rate is 5%. The chance that count == 0 after 200 tries is 0.003%. Assert.IsTrue(count > 0); Assert.IsTrue(count < 50); }
public void TestDefaultRuleWithRequest() { var request = new HttpRequestMessage { RequestUri = new Uri(@"http://www.amazon.com/api/product"), Method = HttpMethod.Post }; request.Headers.Add("Host", "www.amazon.com"); var strategy = new LocalizedSamplingStrategy(); Assert.AreEqual(SampleDecision.Sampled, strategy.Sample(request)); }