コード例 #1
0
ファイル: Tests.cs プロジェクト: mbrenn/degradationmaster
        private static ActuatorMonitor CreateSup(IDegrader degrader, ICapability capability, int i)
        {
            ActuatorMonitor last = null;

            for (var n = 0; n < 5; n++)
            {
                var subDegrader   = new Degrader("Sub");
                var subCapability = new Capability(subDegrader, "Sub");

                var failure = new ActuatorMonitor(subDegrader);
                subDegrader.AddDefaultRules(failure.TotalFailure, subCapability);
                degrader.AddDefaultRules(subCapability, capability);

                if (i < 5)
                {
                    last = CreateSup(subDegrader, subCapability, i + 1);
                }
                else
                {
                    last = failure;
                }

                failure.MakeOk();
            }

            return(last);
        }
コード例 #2
0
ファイル: Tests.cs プロジェクト: mbrenn/degradationmaster
        public void TestSingleDegrader()
        {
            var degrader           = new Degrader("All");
            var monitorPowerSupply = new PowerSupplyMonitor(degrader);

            _capabilityPowerSupply = new Capability(degrader, "Power Supply");

            var monitorActuator = new ActuatorMonitor(degrader);

            _capabilityActuator = new Capability(degrader, "Actuator");

            _capabilitySystem = new Capability(degrader, "System");

            degrader.AddDefaultRules(monitorPowerSupply.TotalFailure, _capabilityPowerSupply);
            degrader.AddDefaultRules(monitorActuator.TotalFailure, _capabilityActuator);
            degrader.AddDefaultRules(_capabilityPowerSupply, _capabilityActuator);
            degrader.AddDefaultRules(_capabilityActuator, _capabilitySystem);

            degrader.AddTrigger(_capabilitySystem,
                                x => Console.WriteLine($"- System: {Capabilities.Convert(x.Current)}"));

            GiveStatus();
            Console.WriteLine("Pass Power Supply...");
            monitorPowerSupply.MakeOk();
            GiveStatus();
            Console.WriteLine("Pass Power Actuator...");
            monitorActuator.MakeOk();
            GiveStatus();

            Assert.That(_capabilitySystem.Current, Is.EqualTo(Capabilities.Full));
        }
コード例 #3
0
ファイル: Tests.cs プロジェクト: mbrenn/degradationmaster
        public void TestMassDegradation()
        {
            // Creates complex Degrading and capability hierarchy
            var degrader   = new Degrader("Test");
            var capability = new Capability(degrader, "Test");

            var failure = CreateSup(degrader, capability, 0);

            var watch = new Stopwatch();

            watch.Start();
            for (var m = 0; m < 2000; m++)
            {
                failure.InjectTotalFailure();
                Assert.That(capability.Current, Is.EqualTo(Capabilities.Failed));

                failure.MakeOk();
                Assert.That(capability.Current, Is.EqualTo(Capabilities.Full));
            }

            watch.Stop();

            Console.WriteLine(watch.Elapsed.ToString());
        }
コード例 #4
0
ファイル: Tests.cs プロジェクト: mbrenn/degradationmaster
        public void TestDegrader()
        {
            var degraderPowerSupply = new Degrader("Power Supply");
            var monitorPowerSupply  = new PowerSupplyMonitor(degraderPowerSupply);

            _capabilityPowerSupply = new Capability(degraderPowerSupply, "Power Supply");

            var degraderActuator = new Degrader("Actuator");
            var monitorActuator  = new ActuatorMonitor(degraderActuator);

            _capabilityActuator = new Capability(degraderActuator, "Actuator");

            var degraderSystem = new Degrader("System");

            _capabilitySystem = new Capability(degraderSystem, "System");

            degraderPowerSupply.AddDefaultRules(monitorPowerSupply.TotalFailure, _capabilityPowerSupply);
            degraderPowerSupply.AddRuleForUnknown(monitorPowerSupply.LimitedCurrent, _capabilityPowerSupply);
            degraderPowerSupply.AddRule(monitorPowerSupply.LimitedCurrent,
                                        MonitoringResult.NOK,
                                        _capabilityPowerSupply,
                                        Capabilities.Limited);


            degraderActuator.AddDefaultRules(monitorActuator.TotalFailure, _capabilityActuator);
            degraderActuator.AddDefaultRules(_capabilityPowerSupply, _capabilityActuator);
            degraderActuator.AddRule(_capabilityPowerSupply, Capabilities.Limited, _capabilityActuator,
                                     Capabilities.Limited);

            degraderSystem.AddRule(_capabilityActuator, Capabilities.Failed, _capabilitySystem, Capabilities.Failed);
            degraderSystem.AddRule(_capabilityActuator, Capabilities.Limited, _capabilitySystem, Capabilities.Limited);

            degraderSystem.AddTrigger(_capabilitySystem,
                                      x => Console.WriteLine($"- System: {Capabilities.Convert(x.Current)}"));

            GiveStatus();
            Console.WriteLine("Pass Power Supply...");
            monitorPowerSupply.MakeOk();
            GiveStatus();
            Console.WriteLine("Pass Power Actuator...");
            monitorActuator.MakeOk();
            GiveStatus();

            Console.WriteLine("Injecting Power Supply Failure...");
            monitorPowerSupply.InjectTotalFailure();
            GiveStatus();

            Console.WriteLine("Rehealing Power Supply Failure...");
            monitorPowerSupply.MakeOk();
            GiveStatus();

            Console.WriteLine("Injecting Limited Power Supply Failure...");
            monitorPowerSupply.InjectLimitedCurrentFailure();
            GiveStatus();

            Console.WriteLine("Rehealing Power Supply Failure...");
            monitorPowerSupply.MakeOk();
            GiveStatus();

            Console.WriteLine("Injecting Actuator Failure...");
            monitorActuator.InjectTotalFailure();
            GiveStatus();

            Console.WriteLine("Rehealing Actuator Failure...");
            monitorActuator.MakeOk();
            GiveStatus();

            Console.WriteLine("Injecting Power Supply + Actuator Failure...");
            monitorActuator.InjectTotalFailure();
            monitorPowerSupply.InjectTotalFailure();
            GiveStatus();

            Console.WriteLine("Rehealing Actuator Failure...");
            monitorActuator.MakeOk();
            GiveStatus();

            Console.WriteLine("Rehealing Power Supply Failure...");
            monitorPowerSupply.MakeOk();
            GiveStatus();

            Assert.That(_capabilitySystem.Current, Is.EqualTo(Capabilities.Full));
        }