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 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 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());
        }
Esempio n. 4
0
    /// <summary>
    ///     Gets a grouped list of health checks, but doesn't actively check the status of each health check.
    /// </summary>
    /// <returns>Returns a collection of anonymous objects representing each group.</returns>
    public object GetAllHealthChecks()
    {
        IOrderedEnumerable <IGrouping <string?, HealthCheck> > groups = _checks
                                                                        .Where(x => _disabledCheckIds.Contains(x.Id) == false)
                                                                        .GroupBy(x => x.Group)
                                                                        .OrderBy(x => x.Key);
        var healthCheckGroups = new List <HealthCheckGroup>();

        foreach (IGrouping <string?, HealthCheck> healthCheckGroup in groups)
        {
            var hcGroup = new HealthCheckGroup
            {
                Name   = healthCheckGroup.Key,
                Checks = healthCheckGroup
                         .OrderBy(x => x.Name)
                         .ToList()
            };
            healthCheckGroups.Add(hcGroup);
        }

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