public void Timer_IntervalIsChangedToOnceSecond_GetControlDefinitionIsCalledEverySecond()
        {
            // Arrange
            int newCheckIntervalInSeconds = 1;
            int waitTimeInSeconds         = AgentControlDefinitionProvider.DefaultCheckIntervalInSeconds;
            int expectedNumberOfTimesGetControlDefinitionIsCalled = (int)((double)waitTimeInSeconds / newCheckIntervalInSeconds);

            int waitTimeInMilliseconds = waitTimeInSeconds * 1000;

            var agentControlDefinitionWithReducedInterval = new AgentControlDefinition
            {
                AgentIsEnabled              = true,
                Hostaddress                 = "127.0.0.1",
                Hostname                    = "www.example.com",
                CheckIntervalInSeconds      = newCheckIntervalInSeconds,
                SystemInformationSenderPath = "/api/systeminformation"
            };

            var agentControlDefinitionAccessor = new Mock <IAgentControlDefinitionAccessor>();

            agentControlDefinitionAccessor.Setup(a => a.GetControlDefinition()).Returns(agentControlDefinitionWithReducedInterval);

            // Act
            var agentControlDefinitionProvider = new AgentControlDefinitionProvider(agentControlDefinitionAccessor.Object);

            Thread.Sleep(waitTimeInMilliseconds);

            // Assert
            agentControlDefinitionAccessor.Verify(a => a.GetControlDefinition(), Times.AtLeast(expectedNumberOfTimesGetControlDefinitionIsCalled));
        }
        public void Dispose_TimerIsNotExecutedAfterDisposeHasBeenCalled()
        {
            // Arrange
            int newCheckIntervalInSeconds = 1;
            int waitTimeInMilliseconds    = (newCheckIntervalInSeconds * 1000) * 5;
            var agentControlDefinitionWithReducedInterval = new AgentControlDefinition
            {
                AgentIsEnabled              = true,
                Hostaddress                 = "127.0.0.1",
                Hostname                    = "www.example.com",
                CheckIntervalInSeconds      = newCheckIntervalInSeconds,
                SystemInformationSenderPath = "/api/systeminformation"
            };

            var agentControlDefinitionAccessor = new Mock <IAgentControlDefinitionAccessor>();

            agentControlDefinitionAccessor.Setup(a => a.GetControlDefinition()).Returns(agentControlDefinitionWithReducedInterval);

            var agentControlDefinitionProvider = new AgentControlDefinitionProvider(agentControlDefinitionAccessor.Object);

            // Act
            agentControlDefinitionProvider.Dispose();
            Thread.Sleep(waitTimeInMilliseconds);

            // Assert
            agentControlDefinitionAccessor.Verify(a => a.GetControlDefinition(), Times.AtMostOnce());
        }
        public void Constructor_AllParametersAreSet_ObjectIsInstantiated()
        {
            // Arrange
            var agentControlDefinitionAccessor = new Mock <IAgentControlDefinitionAccessor>();

            // Act
            var agentControlDefinitionProvider = new AgentControlDefinitionProvider(agentControlDefinitionAccessor.Object);

            // Assert
            Assert.IsNotNull(agentControlDefinitionProvider);
        }
        public void GetControlDefinition_ReturnsNullIfTheAgentControlDefinitionAccessorReturnsNull()
        {
            // Arrange
            AgentControlDefinition agentControlDefinition = null;
            var agentControlDefinitionAccessor            = new Mock <IAgentControlDefinitionAccessor>();

            agentControlDefinitionAccessor.Setup(a => a.GetControlDefinition()).Returns(agentControlDefinition);
            var agentControlDefinitionProvider = new AgentControlDefinitionProvider(agentControlDefinitionAccessor.Object);

            Thread.Sleep(2000);

            // Act
            var result = agentControlDefinitionProvider.GetControlDefinition();

            // Assert
            Assert.IsNull(result);
        }
        public void GetControlDefinition_ReturnsTheSameAgentControlDefinitionThatIsReturnedByTheAgentControlDefinitionAccessor()
        {
            // Arrange
            var agentControlDefinition = new AgentControlDefinition
            {
                AgentIsEnabled              = true,
                Hostaddress                 = "127.0.0.1",
                Hostname                    = "www.example.com",
                CheckIntervalInSeconds      = 10,
                SystemInformationSenderPath = "/api/systeminformation"
            };
            var agentControlDefinitionAccessor = new Mock <IAgentControlDefinitionAccessor>();

            agentControlDefinitionAccessor.Setup(a => a.GetControlDefinition()).Returns(agentControlDefinition);
            var agentControlDefinitionProvider = new AgentControlDefinitionProvider(agentControlDefinitionAccessor.Object);

            Thread.Sleep(2000);

            // Act
            var result = agentControlDefinitionProvider.GetControlDefinition();

            // Assert
            Assert.AreEqual(agentControlDefinition, result);
        }