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 GetConfiguration_ResultContainsAgentControlDefinitionHostaddress()
        {
            // Arrange
            string hostaddress            = "127.0.0.1";
            var    agentControlDefinition = new AgentControlDefinition
            {
                AgentIsEnabled              = true,
                Hostaddress                 = hostaddress,
                Hostname                    = "www.example.com",
                CheckIntervalInSeconds      = 30,
                SystemInformationSenderPath = "/api/systeminformation"
            };

            var agentControlDefinitionProvider = new Mock <IAgentControlDefinitionProvider>();

            agentControlDefinitionProvider.Setup(a => a.GetControlDefinition()).Returns(agentControlDefinition);

            var systemInformationSenderConfigurationProvider = new RESTBasedSystemInformationSenderConfigurationProvider(agentControlDefinitionProvider.Object);

            // Act
            var result = systemInformationSenderConfigurationProvider.GetConfiguration();

            // Assert
            Assert.AreEqual(hostaddress, result.Hostaddress);
        }
        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 Start_GetControlDefinitionReturnsNull_PauseCallbackIsCalled()
        {
            // Arrange
            bool pauseCallbackWasCalled         = false;
            var  runDurationInMilliseconds      = AgentCoordinationService.AgentControlDefinitionCheckIntervalInMilliseconds * 1;
            var  agentControlDefinitionProvider = new Mock <IAgentControlDefinitionProvider>();

            AgentControlDefinition agentControlDefinition = null;

            agentControlDefinitionProvider.Setup(a => a.GetControlDefinition()).Returns(agentControlDefinition);

            var agentCoordinationService = new AgentCoordinationService(
                agentControlDefinitionProvider.Object,
                pauseCallback: () =>
            {
                pauseCallbackWasCalled = true;
            },
                resumeCallback: () => { });

            // Act
            var agentCoordinationServiceTask = new Task(agentCoordinationService.Start);

            agentCoordinationServiceTask.Start();

            Task.WaitAll(new[] { agentCoordinationServiceTask }, runDurationInMilliseconds);

            // Assert
            Assert.IsTrue(pauseCallbackWasCalled);
        }
        public void Start_RunsForThreeIntervals_GetControlDefinitionIsCalledThreeTimes()
        {
            // Arrange
            var runDurationInMilliseconds      = AgentCoordinationService.AgentControlDefinitionCheckIntervalInMilliseconds * 3;
            var agentControlDefinitionProvider = new Mock <IAgentControlDefinitionProvider>();
            var agentControlDefinition         = new AgentControlDefinition
            {
                AgentIsEnabled              = true,
                Hostaddress                 = "127.0.0.1",
                Hostname                    = "www.example.com",
                CheckIntervalInSeconds      = AgentCoordinationService.AgentControlDefinitionCheckIntervalInMilliseconds,
                SystemInformationSenderPath = "/api/systeminformation"
            };

            agentControlDefinitionProvider.Setup(a => a.GetControlDefinition()).Returns(agentControlDefinition);

            var agentCoordinationService = new AgentCoordinationService(agentControlDefinitionProvider.Object, () => { }, () => { });

            // Act
            var agentCoordinationServiceTask = new Task(agentCoordinationService.Start);

            agentCoordinationServiceTask.Start();

            Task.WaitAll(new[] { agentCoordinationServiceTask }, runDurationInMilliseconds);

            // Assert
            agentControlDefinitionProvider.Verify(a => a.GetControlDefinition(), Times.Between(3, 4, Range.Inclusive));
        }
Esempio n. 6
0
        public void GetSystemInfo_ResultIsNotNull()
        {
            // Arrange
            ITimeProvider        timeProvider        = new UTCTimeProvider();
            IMachineNameProvider machineNameProvider = new EnvironmentMachineNameProvider();

            var agentControlDefinitionProvider = new Mock <IAgentControlDefinitionProvider>();
            var agentControlDefinition         = new AgentControlDefinition {
                AgentIsEnabled = true, CheckIntervalInSeconds = 60
            };

            agentControlDefinitionProvider.Setup(a => a.GetControlDefinition()).Returns(agentControlDefinition);

            IProcessorStatusProvider         processorStatusProvider         = new ProcessorStatusProvider();
            IMemoryUnitConverter             memoryUnitConverter             = new MemoryUnitConverter();
            ISystemMemoryStatusProvider      systemMemoryStatusProvider      = new SystemMemoryStatusProvider(memoryUnitConverter);
            ILogicalDiscInstanceNameProvider logicalDiscInstanceNameProvider = new LogicalDiscInstanceNameProvider();
            ISystemStorageStatusProvider     systemStorageStatusProvider     = new SystemStorageStatusProvider(logicalDiscInstanceNameProvider);
            ISystemPerformanceDataProvider   systemPerformanceDataProvider   = new SystemPerformanceDataProvider(
                agentControlDefinitionProvider.Object, processorStatusProvider, systemMemoryStatusProvider, systemStorageStatusProvider);

            var httpStatusCodeFetcher = new Mock <IHttpStatusCodeFetcher>();

            IHttpStatusCodeCheckResultProvider httpStatusCodeCheckResultProvider = new HttpStatusCodeCheckResultProvider(
                agentControlDefinitionProvider.Object, httpStatusCodeFetcher.Object);

            var systemInformationProvider = new SystemInformationProvider(
                timeProvider, machineNameProvider, systemPerformanceDataProvider, httpStatusCodeCheckResultProvider);

            // Act
            var result = systemInformationProvider.GetSystemInfo();

            // Assert
            Assert.IsNotNull(result);
        }
Esempio n. 7
0
        private void UpdateControlDefinition()
        {
            this.controlDefinition = this.agentControlDefinitionAccessor.GetControlDefinition();

            // update the check interval
            if (this.controlDefinition != null && this.controlDefinition.CheckIntervalInSeconds > 0)
            {
                var timerStartTime = new TimeSpan(0, 0, this.controlDefinition.CheckIntervalInSeconds);
                var timerInterval  = new TimeSpan(0, 0, 0, this.controlDefinition.CheckIntervalInSeconds);
                this.timer.Change(timerStartTime, timerInterval);
            }
        }
        public void GetControlDefinition_ResponseData_IsReturned()
        {
            // Arrange
            var serviceConfiguration = new AgentControlDefinitionServiceConfiguration {
                Hostaddress = "127.0.0.0:8181", Hostname = "localhost", ResourcePath = "/api/AgentControlDefinition"
            };

            var machineNameProvider = new Mock <IMachineNameProvider>();

            var responseData = new AgentControlDefinition
            {
                AgentIsEnabled              = true,
                Hostaddress                 = "127.0.0.1",
                Hostname                    = "www.example.com",
                CheckIntervalInSeconds      = 1,
                SystemInformationSenderPath = Guid.NewGuid().ToString()
            };

            var response = new Mock <IRestResponse <AgentControlDefinition> >();

            response.Setup(r => r.Data).Returns(responseData);

            var restClient = new Mock <IRestClient>();

            restClient.Setup(c => c.Execute <AgentControlDefinition>(It.IsAny <IRestRequest>())).Returns(response.Object);
            var request = new Mock <IRestRequest>();

            var configurationServiceUrlProvider = new Mock <IAgentControlDefinitionServiceUrlProvider>();

            configurationServiceUrlProvider.Setup(c => c.GetServiceConfiguration()).Returns(serviceConfiguration);

            var restClientFactory = new Mock <IRESTClientFactory>();

            restClientFactory.Setup(r => r.GetRESTClient(It.IsAny <string>())).Returns(restClient.Object);

            var requestFactory = new Mock <IRESTRequestFactory>();

            requestFactory.Setup(f => f.CreateGetRequest(It.IsAny <string>(), It.IsAny <string>())).Returns(request.Object);

            var agentControlDefinitionAccessor = new AgentControlDefinitionAccessor(
                configurationServiceUrlProvider.Object, machineNameProvider.Object, restClientFactory.Object, requestFactory.Object);

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

            // Assert
            Assert.AreEqual(responseData, result);
        }
        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 Start_AgentsAreDisabled_PauseCallbackIsCalled()
        {
            // Arrange
            bool pauseCallbackWasCalled         = false;
            var  runDurationInMilliseconds      = AgentCoordinationService.AgentControlDefinitionCheckIntervalInMilliseconds * 1;
            var  agentControlDefinitionProvider = new Mock <IAgentControlDefinitionProvider>();

            var agentControlDefinition = new AgentControlDefinition
            {
                AgentIsEnabled              = false,
                Hostaddress                 = "127.0.0.1",
                Hostname                    = "www.example.com",
                CheckIntervalInSeconds      = AgentCoordinationService.AgentControlDefinitionCheckIntervalInMilliseconds,
                SystemInformationSenderPath = "/api/systeminformation"
            };

            agentControlDefinitionProvider.Setup(a => a.GetControlDefinition()).Returns(agentControlDefinition);

            var agentCoordinationService = new AgentCoordinationService(
                agentControlDefinitionProvider.Object,
                pauseCallback: () =>
            {
                pauseCallbackWasCalled = true;
            },
                resumeCallback: () => { });

            // Act
            var agentCoordinationServiceTask = new Task(agentCoordinationService.Start);

            agentCoordinationServiceTask.Start();

            Task.WaitAll(new[] { agentCoordinationServiceTask }, runDurationInMilliseconds);

            // Assert
            Assert.IsTrue(pauseCallbackWasCalled);
        }
        public void Dispose_EndsTheService()
        {
            // Arrange
            var maxDurationInMilliseconds      = AgentCoordinationService.AgentControlDefinitionCheckIntervalInMilliseconds * 3;
            var agentControlDefinitionProvider = new Mock <IAgentControlDefinitionProvider>();

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

            agentControlDefinitionProvider.Setup(a => a.GetControlDefinition()).Returns(agentControlDefinition);

            var agentCoordinationService = new AgentCoordinationService(agentControlDefinitionProvider.Object, () => { }, () => { });

            // Act
            var stopwatch = new Stopwatch();

            stopwatch.Start();

            var agentCoordinationServiceTask = new Task(agentCoordinationService.Start);

            agentCoordinationServiceTask.Start();
            Thread.Sleep(500);
            agentCoordinationService.Dispose();
            Task.WaitAll(new[] { agentCoordinationServiceTask }, maxDurationInMilliseconds);

            stopwatch.Stop();

            // Assert
            Assert.Less(stopwatch.ElapsedMilliseconds, maxDurationInMilliseconds);
        }