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