// Cause a failure to occur, either a random failure or a specific one // If fallbackToRandom is true, then if the specified failure can't be found or can't be triggered, a random failure will be triggered instead // Returns the triggered failure module, or null if none public ITestFlightFailure TriggerFailure() { // We won't trigger a failure if we are already failed if (activeFailure != null) { return(null); } // Failure occurs. Determine which failure module to trigger int totalWeight = 0; int currentWeight = 0; int chosenWeight = 0; List <ITestFlightFailure> failureModules = null; // Get all failure modules on the part // Then filter only the ones that are not disabled List <ITestFlightFailure> allFailureModules = TestFlightUtil.GetFailureModules(this.part); foreach (ITestFlightFailure fm in allFailureModules) { PartModule pm = fm as PartModule; if (!disabledFailures.Contains(pm.moduleName.Trim().ToLowerInvariant())) { if (failureModules == null) { failureModules = new List <ITestFlightFailure>(); } failureModules.Add(fm); } } if (failureModules == null || failureModules.Count == 0) { return(null); } foreach (ITestFlightFailure fm in failureModules) { totalWeight += fm.GetFailureDetails().weight; } chosenWeight = RandomGenerator.Next(1, totalWeight); foreach (ITestFlightFailure fm in failureModules) { currentWeight += fm.GetFailureDetails().weight; if (currentWeight >= chosenWeight) { // Trigger this module's failure PartModule pm = fm as PartModule; if (pm != null) { return(TriggerNamedFailure(pm.moduleName, false)); } } } return(null); }
public ITestFlightFailure TriggerNamedFailure(String failureModuleName, bool fallbackToRandom) { // We won't trigger a failure if we are already failed if (activeFailure != null) { return(null); } failureModuleName = failureModuleName.ToLower().Trim(); List <ITestFlightFailure> failureModules; failureModules = TestFlightUtil.GetFailureModules(this.part); foreach (ITestFlightFailure fm in failureModules) { PartModule pm = fm as PartModule; if (pm.moduleName.ToLower().Trim() == failureModuleName) { if (fm == null && fallbackToRandom) { return(TriggerFailure()); } else if (fm == null & !fallbackToRandom) { return(null); } else { Log("Triggering Failure: " + pm.moduleName); if (!fm.OneShot) { activeFailure = fm; failureAcknowledged = false; fm.DoFailure(); operatingTime = -1; return(fm); } } } } if (fallbackToRandom) { return(TriggerFailure()); } return(null); }
// Returns a list of all available failures on the part public List <String> GetAvailableFailures() { List <String> failureModulesString = new List <string>(); List <ITestFlightFailure> failureModules; failureModules = TestFlightUtil.GetFailureModules(this.part); foreach (ITestFlightFailure fm in failureModules) { PartModule pm = fm as PartModule; failureModulesString.Add(pm.moduleName); } return(failureModulesString); }
// Returns a list of all available failures on the part public List <String> GetAvailableFailures() { List <String> failureModulesString = new List <string>(); List <ITestFlightFailure> failureModules; failureModules = TestFlightUtil.GetFailureModules(this.part, Alias); for (int i = 0, failureModulesCount = failureModules.Count; i < failureModulesCount; i++) { ITestFlightFailure fm = failureModules[i]; PartModule pm = fm as PartModule; failureModulesString.Add(pm.moduleName); } return(failureModulesString); }
public override void OnAwake() { String partName; if (this.part != null) { partName = this.part.name; } else { partName = "unknown"; } if (momentaryFailureRates == null) { momentaryFailureRates = new List <MomentaryFailureRate>(); } if (momentaryFailureModifiers == null) { momentaryFailureModifiers = new List <MomentaryFailureModifier>(); } if (disabledFailures == null) { disabledFailures = new List <string>(); } // poll failure modules for any existing failures if (failures == null) { failures = new List <ITestFlightFailure>(); } List <ITestFlightFailure> failureModules = TestFlightUtil.GetFailureModules(this.part, Alias); foreach (ITestFlightFailure failure in failureModules) { if (failure.Failed) { failures.Add(failure); if (failure.GetFailureDetails().severity.ToLowerInvariant() == "major") { hasMajorFailure = true; } } } }
public ITestFlightFailure TriggerNamedFailure(String failureModuleName, bool fallbackToRandom) { failureModuleName = failureModuleName.ToLower().Trim(); List <ITestFlightFailure> failureModules; failureModules = TestFlightUtil.GetFailureModules(this.part, Alias); foreach (ITestFlightFailure fm in failureModules) { PartModule pm = fm as PartModule; if (pm.moduleName.ToLower().Trim() == failureModuleName) { if ((fm == null || fm.Failed) && fallbackToRandom) { return(TriggerFailure()); } else if (fm == null & !fallbackToRandom) { return(null); } else { Log("Triggering Failure: " + pm.moduleName); if (failures == null) { failures = new List <ITestFlightFailure>(); } failures.Add(fm); fm.DoFailure(); if (fm.GetFailureDetails().severity.ToLowerInvariant() == "major") { hasMajorFailure = true; } return(fm); } } } if (fallbackToRandom) { return(TriggerFailure()); } return(null); }
public List <string> GetTestFlightInfo() { List <string> infoStrings = new List <string>(); string partName = Alias; infoStrings.Add("<b>Core</b>"); infoStrings.Add("<b>Active Part</b>: " + partName); float flightData = TestFlightManagerScenario.Instance.GetFlightDataForPartName(partName); if (flightData < 0f) { flightData = 0f; } infoStrings.Add(String.Format("<b>Flight Data</b>: {0:f2}/{1:f2}", flightData, maxData)); List <ITestFlightReliability> reliabilityModules = TestFlightUtil.GetReliabilityModules(this.part, Alias); if (reliabilityModules != null) { for (int i = 0, reliabilityModulesCount = reliabilityModules.Count; i < reliabilityModulesCount; i++) { ITestFlightReliability reliabilityModule = reliabilityModules[i]; infoStrings.AddRange(reliabilityModule.GetTestFlightInfo()); } } List <ITestFlightFailure> failureModules = TestFlightUtil.GetFailureModules(this.part, Alias); if (failureModules != null) { for (int i = 0, failureModulesCount = failureModules.Count; i < failureModulesCount; i++) { ITestFlightFailure failureModule = failureModules[i]; List <string> infoColl = failureModule.GetTestFlightInfo(); if (infoColl != null) { infoStrings.AddRange(infoColl); } } } return(infoStrings); }
public override string GetInfo() { // This methods collects data from all the TestFlight modules and combines it into one string List <string> infoStrings = new List <string>(); List <ITestFlightReliability> reliabilityModules = TestFlightUtil.GetReliabilityModules(this.part, Alias, false); if (reliabilityModules != null) { for (int i = 0, reliabilityModulesCount = reliabilityModules.Count; i < reliabilityModulesCount; i++) { ITestFlightReliability reliabilityModule = reliabilityModules[i]; var s = reliabilityModule.GetModuleInfo(); if (!string.IsNullOrEmpty(s)) { infoStrings.Add(s); } } } List <ITestFlightFailure> failureModules = TestFlightUtil.GetFailureModules(this.part, Alias, false); if (failureModules != null) { for (int i = 0, failureModulesCount = failureModules.Count; i < failureModulesCount; i++) { ITestFlightFailure failureModule = failureModules[i]; var s = failureModule.GetModuleInfo(); if (!string.IsNullOrEmpty(s)) { infoStrings.Add(s); } } } if (infoStrings.Count > 0) { return(string.Join("\n", infoStrings.ToArray())); } return(base.GetInfo()); }
// Cause a failure to occur, either a random failure or a specific one // If fallbackToRandom is true, then if the specified failure can't be found or can't be triggered, a random failure will be triggered instead // Returns the triggered failure module, or null if none public ITestFlightFailure TriggerFailure(string severity) { severity = severity.ToLowerInvariant(); Log(string.Format("Triggering random {0} failure", severity)); // Failure occurs. Determine which failure module to trigger int totalWeight = 0; int currentWeight = 0; int chosenWeight = 0; List <ITestFlightFailure> failureModules = null; // Get all failure modules on the part // Then filter only the ones that are not disabled and are of the desired severity List <ITestFlightFailure> allFailureModules = TestFlightUtil.GetFailureModules(this.part, Alias); for (int i = 0, allFailureModulesCount = allFailureModules.Count; i < allFailureModulesCount; i++) { ITestFlightFailure fm = allFailureModules[i]; PartModule pm = fm as PartModule; if (fm.GetFailureDetails().severity.ToLowerInvariant() == severity || severity == "any") { if (fm.Failed) { Log(string.Format("Skipping {0} because it is already active", pm.moduleName)); continue; } if (!disabledFailures.Contains(pm.moduleName.Trim().ToLowerInvariant())) { if (failureModules == null) { failureModules = new List <ITestFlightFailure>(); } failureModules.Add(fm); } } else { Log(string.Format("Skipping {0} because it doesn't have a matching severity ({1} != {2}", pm.moduleName, fm.GetFailureDetails().severity, severity)); } } if (failureModules == null || failureModules.Count == 0) { Log("No failure modules to trigger"); return(null); } for (int i = 0, failureModulesCount = failureModules.Count; i < failureModulesCount; i++) { ITestFlightFailure fm = failureModules[i]; totalWeight += fm.GetFailureDetails().weight; } chosenWeight = RandomGenerator.Next(1, totalWeight); for (int i = 0, failureModulesCount = failureModules.Count; i < failureModulesCount; i++) { ITestFlightFailure fm = failureModules[i]; currentWeight += fm.GetFailureDetails().weight; if (currentWeight >= chosenWeight) { // Trigger this module's failure PartModule pm = fm as PartModule; if (pm != null) { return(TriggerNamedFailure(pm.moduleName, false)); } } } return(null); }
// Get all Failure Modules that are bound to a given alias public static List <ITestFlightFailure> GetFailureModules(Part part, string alias) { return(TestFlightUtil.GetFailureModules(part, alias)); }
// Get all Failure Modules - can be more than one. public static List <ITestFlightFailure> GetFailureModules(Part part) { return(TestFlightUtil.GetFailureModules(part)); }