예제 #1
0
        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
        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
        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));
        }