public void TheTheScalerShouldNotBeScaled()
        {
            var channelLoadBalancer = Substitute.For<ChannelLoadBalancer>();
            channelLoadBalancer.HasActiveChannels.Returns(true);
            channelLoadBalancer.ChannelCount.Returns(1);

            var channelScalerImp = new ChannelScalerImpl(new PushServiceSettings(), channelLoadBalancer);
            channelScalerImp.Start();

            channelScalerImp.CheckScale();

            Assert.AreEqual(1, channelLoadBalancer.ChannelCount);
        }
        public void ThenTheScalerShouldAddAChannelToTheLoadBalancer()
        {
            var channelLoadBalancer = Substitute.For<ChannelLoadBalancer>();
            channelLoadBalancer.HasActiveChannels.Returns(true);
            channelLoadBalancer.ChannelCount.Returns(1, 2, 3, 4, 5);

            var pushServiceSettings = new PushServiceSettings { AutoScaleChannels = false, Channels = 5 };
            var channelScalerImp = new ChannelScalerImpl(pushServiceSettings, channelLoadBalancer);
            channelScalerImp.Start();

            channelScalerImp.CheckScale();

            channelLoadBalancer.Received(3).AddChannels(1);
        }
        public void ThenTheScalerShouldAddAChannelToTheLoadBalancer()
        {
            var channelLoadBalancer = Substitute.For<ChannelLoadBalancer>();
            channelLoadBalancer.HasActiveChannels.Returns(true);

            var pushServiceSettings = new PushServiceSettings();
            var channelScalerImp = new ChannelScalerImpl(pushServiceSettings, channelLoadBalancer);
            channelScalerImp.Start();

            int measurementCounter = 0;
            while (measurementCounter < 1000)
            {
                channelScalerImp.RecordQueueTime(pushServiceSettings.MinAvgTimeToScaleChannels + 1);
                measurementCounter++;
            }

            channelScalerImp.CheckScale();

            channelLoadBalancer.Received(1).AddChannels(1);
        }