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