public void InitializeCheckJob_Should_CreatePingCheckJobWithNoTriggers()
        {
            // Arrange
            var config = new JobConfiguration
            {
                Type = "Ping"
            };

            var job = new HealthCheckJob
            {
                JobConfiguration = config
            };

            var mock = new Mock <IComponentFactory>();

            _ = mock.Setup(f => f.GetPlugin("Ping")).Returns(new Mock <IHealthCheckPlugin>().Object);
            _ = mock.Setup(f => f.GetTrigger(It.IsAny <XElement>())).Returns(new Mock <ITrigger>().Object);

            var manager = new PluginManager(mock.Object);
            var group   = new HealthCheckGroup
            {
                Name = "PROD"
            };

            // Act
            _ = manager.InitializeCheckJob(job, group);

            // Assert
            Assert.Empty(job.Triggers);
        }
Example #2
0
        public void NotifyListeners_Should_ContinueToCallListeners_When_AnExceptionOccursInOneListener()
        {
            // Arrange
            var executed = false;

            var mockPlugin = new Mock <IHealthCheckPlugin>();

            var mockStatus = new Mock <IHealthStatus>();

            mockStatus.SetupGet(s => s.Status).Returns(CheckResult.Success);
            mockPlugin.Setup(p => p.Execute()).Returns(mockStatus.Object);

            var job = new HealthCheckJob
            {
                Plugin = mockPlugin.Object
            };

            var mockListener1 = new Mock <IStatusListener>();

            mockListener1.Setup(l => l.Process(It.IsAny <IHealthStatus>())).Throws(new Exception("BOOM!"));
            job.Listeners.Add(mockListener1.Object);

            var mockListener2 = new Mock <IStatusListener>();

            mockListener2.Setup(l => l.Process(It.IsAny <IHealthStatus>())).Callback(() => { executed = true; });
            job.Listeners.Add(mockListener2.Object);

            // Act
            job.Execute(null);

            // Assert
            Assert.True(executed);
        }
Example #3
0
        public void NotifyListener_Should_NotCallListener_When_ThreshholdIsUnderThreshold()
        {
            // Arrange
            var executed = false;

            var mockPlugin = new Mock <IHealthCheckPlugin>();

            var mockStatus = new Mock <IHealthStatus>();

            mockStatus.SetupGet(s => s.Status).Returns(CheckResult.Success);
            mockPlugin.Setup(p => p.Execute()).Returns(mockStatus.Object);

            var job = new HealthCheckJob
            {
                Plugin = mockPlugin.Object
            };

            var mockList = new Mock <IStatusListener>();

            mockList.SetupGet(l => l.Threshold).Returns(CheckResult.Error);
            mockList.Setup(l => l.Process(It.IsAny <IHealthStatus>())).Callback(() =>
            {
                executed = true;
            });

            job.Listeners.Add(mockList.Object);

            // Act
            job.Execute(null);

            // Assert
            Assert.False(executed);
        }
Example #4
0
        public void Execute_Should_CallListernerAfterExecution()
        {
            // Arrange
            var executed   = false;
            var mockPlugin = new Mock <IHealthCheckPlugin>();

            var mockStatus = new Mock <IHealthStatus>();

            mockStatus.SetupGet(s => s.Status).Returns(CheckResult.Success);
            mockPlugin.Setup(p => p.Execute()).Returns(mockStatus.Object);

            var job = new HealthCheckJob
            {
                Plugin = mockPlugin.Object
            };

            var mockListener = new Mock <IStatusListener>();

            mockListener.Setup(l => l.Process(It.IsAny <IHealthStatus>())).Callback(() =>
            {
                executed = true;
            });

            job.Listeners.Add(mockListener.Object);

            // Act
            job.Execute(null);

            // Assert
            Assert.True(executed);
        }
        public async Task Initialize(IApplicationBuilder applicationBuilder)
        {
            await _moduleClient.SetInputMessageHandlerAsync(Constants.Inputs.SubscriberInbound,
                                                            new MessageHandler(async(message, userContext) =>
            {
                var moduleClient = userContext as ModuleClient;
                if (moduleClient == null)
                {
                    throw new InvalidOperationException("UserContext doesn't contain " + "expected values");
                }

                byte[] messageBytes = message.GetBytes();
                string messageString = Encoding.UTF8.GetString(messageBytes);

                var healthJob = new HealthCheckJob(_jobDependencyLocator, JsonConvert.DeserializeObject <ElapsedScheduleMessage>(messageString));
                await healthJob.Run();

                await moduleClient.CompleteAsync(message);
                return(MessageResponse.Completed);
            }), _moduleClient, _tokenSource.Token);

            await _moduleClient.SetDesiredPropertyUpdateCallbackAsync(
                new DesiredPropertyUpdateCallback(async(mr, o) =>
            {
                var job = new DesiredPropertyChangedJob(_jobDependencyLocator, mr);
                await job.Run();
            }), _moduleClient);

            var twin = await _moduleClient.GetTwinAsync();

            var spinupJob = new DesiredPropertyChangedJob(_jobDependencyLocator, twin.Properties.Desired);
            await spinupJob.Run();
        }
        public void Stop_Should_StopExecutingJobs()
        {
            // Arrange
            var counter = 0;

            var factory = new Mock <IComponentFactory>();
            var manager = new PluginManager(factory.Object);
            var reader  = new Mock <IHealthCheckConfigurationReader>();
            var plugin  = new Mock <IHealthCheckPlugin>();

            var group = new HealthCheckGroup()
            {
                Name = "UnitTest"
            };

            var job = new HealthCheckJob();

            job.Plugin                    = plugin.Object;
            job.JobConfiguration          = new JobConfiguration();
            job.JobConfiguration.Triggers = new List <XElement>();
            job.JobConfiguration.Triggers.Add(new XElement("Trigger"));

            group.Checks.Add(job);

            var groups = new List <HealthCheckGroup>();

            groups.Add(group);

            reader.Setup(m => m.ReadAll()).Returns(groups);

            plugin.Setup(p => p.Execute())
            .Callback(() =>
            {
                counter++;
            })
            .Returns(new HealthStatus());

            factory.Setup(f => f.GetPlugin(It.IsAny <string>())).Returns(plugin.Object);
            factory.Setup(m => m.GetTrigger(It.IsAny <XElement>()))
            .Returns(new CronTriggerImpl("StopTest", "g1", "* * * ? * * *"));

            var service = new HealthService(reader.Object, manager);

            // Act
            service.Start();
            Thread.Sleep(3000);
            var countAtStop = counter;

            service.Stop();
            Thread.Sleep(3000);

            // Assert
            Assert.Equal(countAtStop, counter);
        }
Example #7
0
        public void Configuration(IAppBuilder app)
        {
            app.UseErrorPage();
            app.UseWelcomePage("/");
            app.UseHangfire(config =>
            {
                var options = new SqlServerStorageOptions {
                    QueuePollInterval = TimeSpan.FromSeconds(1)
                };
                config.UseSqlServerStorage("DataContext", options).UseMsmqQueues(@".\private$\hangfire-0");
                config.UseServer();
            });

            RecurringJob.AddOrUpdate(() => CleanJob.Execute(), System.Configuration.ConfigurationManager.AppSettings["CleanJobSchedule"]);
            RecurringJob.AddOrUpdate(() => LogsCompactionJob.Execute(), System.Configuration.ConfigurationManager.AppSettings["LogCompactionJobSchedule"]);
            RecurringJob.AddOrUpdate(() => GalleryCleaningJob.Execute(), System.Configuration.ConfigurationManager.AppSettings["GalleryCleanupJob"]);
            RecurringJob.AddOrUpdate(() => HealthCheckJob.Execute(), System.Configuration.ConfigurationManager.AppSettings["HealthCheckJob"]);
        }
        public void InitializeCheckJob_Should_CreatePingCheckJobWithTriggerAndListenerAndSettings()
        {
            // Arrange
            var config = new JobConfiguration
            {
                Type = "Ping"
            };

            var xml = new XElement("Listener");

            xml.SetAttributeValue("Type", "LogFile");
            xml.SetAttributeValue("Threshold", "Warning");
            config.Listeners.Add(xml);

            xml = new XElement("Trigger");
            xml.SetAttributeValue("Type", "simple");
            xml.SetAttributeValue("Repeat", "10");
            config.Triggers.Add(xml);
            config.Settings = new XElement("Settings", new XElement("HostName"));

            var job = new HealthCheckJob
            {
                JobConfiguration = config
            };

            var mock = new Mock <IComponentFactory>();

            _ = mock.Setup(f => f.GetPlugin("Ping")).Returns(new Mock <IHealthCheckPlugin>().Object);
            _ = mock.Setup(f => f.GetListener(It.IsAny <string>())).Returns(new Mock <IStatusListener>().Object);
            _ = mock.Setup(f => f.GetTrigger(It.IsAny <XElement>())).Returns(new Mock <ITrigger>().Object);

            var manager = new PluginManager(mock.Object);
            var group   = new HealthCheckGroup
            {
                Name = "PROD"
            };

            // Act
            _ = manager.InitializeCheckJob(job, group);

            // Assert
            Assert.True(job.Triggers.Any() && job.Listeners.Any());
        }
Example #9
0
        public void Execute_Should_HandleExceptions()
        {
            // Arrange
            var mockPlugin = new Mock <IHealthCheckPlugin>();

            mockPlugin.Setup(p => p.Execute()).Throws(new Exception("BOOM!"));
            mockPlugin.SetupProperty(p => p.PluginStatus);

            var job = new HealthCheckJob
            {
                Plugin = mockPlugin.Object
            };

            // Act
            job.Execute(null);

            // Assert
            Assert.Equal(PluginStatus.TaskExecutionFailure, job.Plugin.PluginStatus);
        }
Example #10
0
        public void Execute_Should_NotExecuteJob_When_InQuietPeriod()
        {
            // Arrange
            var calendar = new DailyCalendar(0, 0, 0, 0, 23, 59, 59, 999);

            var executed = false;
            var mock     = new Mock <IHealthCheckPlugin>();

            _ = mock.Setup(p => p.Execute()).Callback(() => executed = true);

            var job = new HealthCheckJob
            {
                Plugin = mock.Object
            };

            // Act
            job.QuietPeriods.AddCalendar(calendar);
            job.Execute(null);

            // Assert
            Assert.False(executed);
        }
Example #11
0
        public void Execute_Should_ExecuteJob()
        {
            // Arrange
            var executed = false;
            var mock     = new Mock <IHealthCheckPlugin>();

            mock.Setup(p => p.Execute()).Callback(() =>
            {
                executed = true;
            });

            var job = new HealthCheckJob
            {
                Plugin = mock.Object
            };

            // Act
            job.Execute(null);

            // Assert
            Assert.True(executed);
        }
        public void InitializeCheckJob_Should_CreatePingCheckJobWithTrigger()
        {
            // Arrange
            var config = new JobConfiguration
            {
                Type = "Ping"
            };

            var xml = new XElement("Trigger");

            xml.SetAttributeValue("Type", "simple");
            xml.SetAttributeValue("Repeat", "10");

            config.Triggers.Add(xml);

            var job = new HealthCheckJob
            {
                JobConfiguration = config
            };

            var mock = new Mock <IComponentFactory>();

            _ = mock.Setup(f => f.GetPlugin("Ping")).Returns(new Mock <IHealthCheckPlugin>().Object);
            _ = mock.Setup(f => f.GetTrigger(It.IsAny <XElement>())).Returns(new Mock <ITrigger>().Object);

            var manager = new PluginManager(mock.Object);
            var group   = new HealthCheckGroup
            {
                Name = "PROD"
            };

            // Act
            _ = manager.InitializeCheckJob(job, group);

            // Assert
            _ = Assert.Single(job.Triggers);
        }