public void ProcessMustRunLocalDueToTag() { // Force run remotely. Configuration.Schedule.RemotingThresholdMultiplier = 0.0; // This configuration will test that must-run-local tags take precendence over can-run-remote tags. const string MustRunLocalTag = nameof(MustRunLocalTag); Configuration.Schedule.ProcessMustRunLocalTags = new List <string> { MustRunLocalTag }; Configuration.Schedule.ProcessCanRunRemoteTags = new List <string> { MustRunLocalTag }; ProcessBuilder builder = CreatePipBuilder(new[] { Operation.ReadFile(CreateSourceFile()), Operation.WriteFile(CreateOutputFileArtifact()) }); builder.AddTags(Context.StringTable, MustRunLocalTag); ProcessWithOutputs process = SchedulePipBuilder(builder); ScheduleRunResult result = RunScheduler().AssertSuccess(); XAssert.AreEqual(0, result.PipExecutorCounters.GetCounterValue(global::BuildXL.Scheduler.PipExecutorCounter.TotalRunRemoteProcesses)); XAssert.AreEqual(1, result.PipExecutorCounters.GetCounterValue(global::BuildXL.Scheduler.PipExecutorCounter.TotalRunLocallyProcessesOnRemotingWorker)); XAssert.AreEqual(0, result.PipExecutorCounters.GetCounterValue(global::BuildXL.Scheduler.PipExecutorCounter.TotalRemoteFallbackRetries)); }