/// <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));
        }
Example #2
0
 public WorkerProxyAdapter(IBondTransportClient client)
     : base(client)
 {
 }
 private ResiliencyTestBondTransportClient(IBondTransportClient client, FailureScenario scenario)
 {
     m_client   = client;
     m_scenario = scenario;
 }