/// <summary> /// Wraps the given bond transport client in to allow injecting failures using different patterns. /// </summary> public static IBondTransportClient TryWrapClientForTest(DistributedBuildRoles role, IBondTransportClient client) { Contract.Requires(client != null); Contract.Requires(role != DistributedBuildRoles.None); Contract.Ensures(Contract.Result <IBondTransportClient>() != null); var scenarioRole = Environment.GetEnvironmentVariable("BuildXL_Test_Resiliency_Role"); var scenarioName = Environment.GetEnvironmentVariable("BuildXL_Test_Resiliency_Scenario") ?? string.Empty; if (!string.IsNullOrEmpty(scenarioRole) && !string.Equals(scenarioRole, role.ToString(), StringComparison.OrdinalIgnoreCase)) { return(client); } scenarioName = scenarioName.ToUpperInvariant(); FailureScenario scenario = null; switch (scenarioName) { case "RANDOM": scenario = new RandomFailuresScenario(); break; case "RANDOMCHECKSUM": scenario = new RandomChecksumFailuresScenario(); break; case "SHORT": scenario = new ShortDurationFailureScenario(); break; case "LONG": scenario = new LongDurationFailureScenario(); break; case "IRRECOVERABLE": scenario = new IrrecoverableFailureScenario(); break; } return(scenario == null ? client : new ResiliencyTestBondTransportClient(client, scenario)); }
private ResiliencyTestBondTransportClient(IBondTransportClient client, FailureScenario scenario) { m_client = client; m_scenario = scenario; }