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));
        }