示例#1
0
        public void SetShouldSendOneMetricByUniqueValue()
        {
            var transport = new Mock <ITransport>();
            var telemetry = new Mock <ITelemetry>();
            var timer     = new ManualTimer();
            var s         = new Set(transport.Object, telemetry.Object, timer, MetricName, null);

            s.Add(5);
            s.Add(6);
            s.Add(7);
            s.Add(5);
            s.Add(7);
            timer.TriggerElapsed();
            transport.Verify(t => t.Send(It.IsAny <ArraySegment <byte> >()), Times.Exactly(3));
            telemetry.Verify(t => t.MetricSent(), Times.Exactly(3));

            s.Add(5);
            s.Add(6);
            s.Add(7);
            s.Add(8);
            s.Add(5);
            timer.TriggerElapsed();
            transport.Verify(t => t.Send(It.IsAny <ArraySegment <byte> >()), Times.Exactly(7));
            telemetry.Verify(t => t.MetricSent(), Times.Exactly(7));
        }
示例#2
0
        public void UpdatedValueShouldBeUsedOverEvaluator()
        {
            var transport = new Mock <ITransport>();
            var telemetry = new Mock <ITelemetry>();
            var timer     = new ManualTimer();

            int evaluatorCalled = 0;

            double Evaluator() => ++ evaluatorCalled;

            var c = new Gauge(transport.Object, telemetry.Object, timer, MetricName, Evaluator, Tags);

            c.Update(5.0);

            timer.TriggerElapsed();
            Assert.AreEqual(0, evaluatorCalled);
            transport.Verify(t => t.Send(It.IsAny <ArraySegment <byte> >()), Times.Exactly(1));
            telemetry.Verify(t => t.MetricSent(), Times.Exactly(1));

            c.Update(6.0);

            timer.TriggerElapsed();
            Assert.AreEqual(0, evaluatorCalled);
            transport.Verify(t => t.Send(It.IsAny <ArraySegment <byte> >()), Times.Exactly(2));
            telemetry.Verify(t => t.MetricSent(), Times.Exactly(2));
        }
示例#3
0
        public void CountShouldntBeFlushedIfDidntChange()
        {
            var transport = new Mock <ITransport>();
            var telemetry = new Mock <ITelemetry>();
            var timer     = new ManualTimer();
            var c         = new Count(transport.Object, telemetry.Object, timer, MetricName, Tags);

            timer.TriggerElapsed();
            transport.Verify(t => t.Send(It.IsAny <ArraySegment <byte> >()), Times.Exactly(0));
            telemetry.Verify(t => t.MetricSent(), Times.Exactly(0));

            timer.TriggerElapsed();
            transport.Verify(t => t.Send(It.IsAny <ArraySegment <byte> >()), Times.Exactly(0));
            telemetry.Verify(t => t.MetricSent(), Times.Exactly(0));
        }
示例#4
0
        public void NothingShouldBeSentIfNoEvaluatorAndNoUpdatedValue()
        {
            var transport = new Mock <ITransport>();
            var telemetry = new Mock <ITelemetry>();
            var timer     = new ManualTimer();

            var c = new Gauge(transport.Object, telemetry.Object, timer, MetricName, null, Tags);

            timer.TriggerElapsed();
            transport.Verify(t => t.Send(It.IsAny <ArraySegment <byte> >()), Times.Exactly(0));
            telemetry.Verify(t => t.MetricSent(), Times.Exactly(0));

            timer.TriggerElapsed();
            transport.Verify(t => t.Send(It.IsAny <ArraySegment <byte> >()), Times.Exactly(0));
            telemetry.Verify(t => t.MetricSent(), Times.Exactly(0));
        }
示例#5
0
        public void SetShouldBeFlushedEveryTick()
        {
            var transport = new Mock <ITransport>();
            var telemetry = new Mock <ITelemetry>();
            var timer     = new ManualTimer();
            var s         = new Set(transport.Object, telemetry.Object, timer, MetricName, null);

            s.Add(5);
            timer.TriggerElapsed();
            transport.Verify(t => t.Send(It.IsAny <ArraySegment <byte> >()), Times.Exactly(1));
            telemetry.Verify(t => t.MetricSent(), Times.Exactly(1));

            s.Add(6);
            timer.TriggerElapsed();
            transport.Verify(t => t.Send(It.IsAny <ArraySegment <byte> >()), Times.Exactly(2));
            telemetry.Verify(t => t.MetricSent(), Times.Exactly(2));
        }
示例#6
0
        public void EvaluatorShouldBeCalledForEachTick()
        {
            var transport       = new Mock <ITransport>();
            var telemetry       = new Mock <ITelemetry>();
            var timer           = new ManualTimer();
            int evaluatorCalled = 0;
            var c = new Gauge(transport.Object, telemetry.Object, timer, MetricName, () => evaluatorCalled++, Tags);

            timer.TriggerElapsed();
            Assert.AreEqual(1, evaluatorCalled);
            transport.Verify(t => t.Send(It.IsAny <ArraySegment <byte> >()), Times.Exactly(1));
            telemetry.Verify(t => t.MetricSent(), Times.Exactly(1));

            timer.TriggerElapsed();
            Assert.AreEqual(2, evaluatorCalled);
            transport.Verify(t => t.Send(It.IsAny <ArraySegment <byte> >()), Times.Exactly(2));
            telemetry.Verify(t => t.MetricSent(), Times.Exactly(2));
        }
示例#7
0
        public void UpdatedValueShouldBeUsedWhenNoEvaluator()
        {
            var transport = new Mock <ITransport>();
            var telemetry = new Mock <ITelemetry>();
            var timer     = new ManualTimer();

            var c = new Gauge(transport.Object, telemetry.Object, timer, MetricName, null, Tags);

            c.Update(5.0);

            timer.TriggerElapsed();
            transport.Verify(t => t.Send(It.IsAny <ArraySegment <byte> >()), Times.Exactly(1));
            telemetry.Verify(t => t.MetricSent(), Times.Exactly(1));

            c.Update(6.0);

            timer.TriggerElapsed();
            transport.Verify(t => t.Send(It.IsAny <ArraySegment <byte> >()), Times.Exactly(2));
            telemetry.Verify(t => t.MetricSent(), Times.Exactly(2));
        }
示例#8
0
        public void NothingShouldBeSentIfEvaluatorThrowsAndNoValueWasUpdated()
        {
            var transport = new Mock <ITransport>();
            var telemetry = new Mock <ITelemetry>();
            var timer     = new ManualTimer();

            double Evaluator() => throw new Exception();

            var c = new Gauge(transport.Object, telemetry.Object, timer, MetricName, Evaluator, Tags);

            timer.TriggerElapsed();
            transport.Verify(t => t.Send(It.IsAny <ArraySegment <byte> >()), Times.Exactly(0));
            telemetry.Verify(t => t.MetricSent(), Times.Exactly(0));
        }