Remove some justExitCode calls in tests

Contributes to the elimination of non-detailed ExitCode use.

RELNOTES: None.
PiperOrigin-RevId: 314463838
diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/util/BUILD b/src/test/java/com/google/devtools/build/lib/buildtool/util/BUILD
index a0b4989..6aabf63 100644
--- a/src/test/java/com/google/devtools/build/lib/buildtool/util/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/buildtool/util/BUILD
@@ -76,7 +76,6 @@
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:command",
         "//src/main/java/com/google/devtools/build/lib/util:detailed_exit_code",
-        "//src/main/java/com/google/devtools/build/lib/util:exit_code",
         "//src/main/java/com/google/devtools/build/lib/util/io",
         "//src/main/java/com/google/devtools/build/lib/util/io:out-err",
         "//src/main/java/com/google/devtools/build/lib/vfs",
@@ -84,6 +83,7 @@
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/common/options",
         "//src/main/java/com/google/devtools/common/options:invocation_policy",
+        "//src/main/protobuf:failure_details_java_proto",
         "//src/main/protobuf:invocation_policy_java_proto",
         "//src/test/java/com/google/devtools/build/lib/actions/util",
         "//src/test/java/com/google/devtools/build/lib/analysis/util",
diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java b/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java
index fe515c5..826e3e3 100644
--- a/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java
+++ b/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java
@@ -56,9 +56,11 @@
 import com.google.devtools.build.lib.runtime.commands.BuildCommand;
 import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
 import com.google.devtools.build.lib.sandbox.SandboxOptions;
+import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
+import com.google.devtools.build.lib.server.FailureDetails.Spawn;
+import com.google.devtools.build.lib.server.FailureDetails.Spawn.Code;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
 import com.google.devtools.build.lib.util.DetailedExitCode;
-import com.google.devtools.build.lib.util.ExitCode;
 import com.google.devtools.build.lib.util.io.OutErr;
 import com.google.devtools.build.lib.vfs.OutputService;
 import com.google.devtools.common.options.InvocationPolicyEnforcer;
@@ -367,7 +369,7 @@
             null,
             success
                 ? DetailedExitCode.success()
-                : DetailedExitCode.justExitCode(ExitCode.BUILD_FAILURE),
+                : DetailedExitCode.of(createGenericDetailedFailure()),
             /*startSuspendCount=*/ 0);
         getSkyframeExecutor().notifyCommandComplete(env.getReporter());
       }
@@ -378,6 +380,12 @@
     }
   }
 
+  private static FailureDetail createGenericDetailedFailure() {
+    return FailureDetail.newBuilder()
+        .setSpawn(Spawn.newBuilder().setCode(Code.NON_ZERO_EXIT))
+        .build();
+  }
+
   public BuildRequest createRequest(String commandName, List<String> targets) {
     return BuildRequest.create(
         commandName,
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
index 2922b69..12e29b7 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
@@ -68,9 +68,11 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetView;
+import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
+import com.google.devtools.build.lib.server.FailureDetails.Spawn;
+import com.google.devtools.build.lib.server.FailureDetails.Spawn.Code;
 import com.google.devtools.build.lib.testutil.FoundationTestCase;
 import com.google.devtools.build.lib.util.DetailedExitCode;
-import com.google.devtools.build.lib.util.ExitCode;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -1222,7 +1224,7 @@
                 ProgressEvent.INITIAL_PROGRESS_UPDATE,
                 BuildEventIdUtil.buildFinished()));
     BuildCompleteEvent buildCompleteEvent =
-        buildCompleteEvent(ExitCode.BUILD_FAILURE, true, null, false);
+        buildCompleteEvent(createGenericDetailedExitCode(), true, null, false);
 
     streamer.buildEvent(startEvent);
     streamer.buildEvent(buildCompleteEvent);
@@ -1246,7 +1248,7 @@
                 ProgressEvent.INITIAL_PROGRESS_UPDATE,
                 BuildEventIdUtil.buildFinished()));
     BuildCompleteEvent buildCompleteEvent =
-        buildCompleteEvent(ExitCode.BUILD_FAILURE, true, new RuntimeException(), false);
+        buildCompleteEvent(createGenericDetailedExitCode(), true, new RuntimeException(), false);
 
     streamer.buildEvent(startEvent);
     streamer.buildEvent(buildCompleteEvent);
@@ -1270,7 +1272,7 @@
                 ProgressEvent.INITIAL_PROGRESS_UPDATE,
                 BuildEventIdUtil.buildFinished()));
     BuildCompleteEvent buildCompleteEvent =
-        buildCompleteEvent(ExitCode.BUILD_FAILURE, true, null, true);
+        buildCompleteEvent(createGenericDetailedExitCode(), true, null, true);
 
     streamer.buildEvent(startEvent);
     streamer.buildEvent(buildCompleteEvent);
@@ -1321,7 +1323,7 @@
                 ProgressEvent.INITIAL_PROGRESS_UPDATE,
                 BuildEventIdUtil.buildFinished()));
     BuildCompleteEvent buildCompleteEvent =
-        buildCompleteEvent(ExitCode.BUILD_FAILURE, false, new RuntimeException(), false);
+        buildCompleteEvent(createGenericDetailedExitCode(), false, new RuntimeException(), false);
 
     streamer.buildEvent(startEvent);
     streamer.noAnalyze(new NoAnalyzeEvent());
@@ -1345,9 +1347,12 @@
   }
 
   private BuildCompleteEvent buildCompleteEvent(
-      ExitCode exitCode, boolean stopOnFailure, Throwable crash, boolean catastrophe) {
+      DetailedExitCode detailedExitCode,
+      boolean stopOnFailure,
+      Throwable crash,
+      boolean catastrophe) {
     BuildResult result = new BuildResult(0);
-    result.setDetailedExitCode(DetailedExitCode.justExitCode(exitCode));
+    result.setDetailedExitCode(detailedExitCode);
     result.setStopOnFirstFailure(stopOnFailure);
     if (catastrophe) {
       result.setCatastrophe();
@@ -1423,4 +1428,11 @@
                 .collect(ImmutableList.toImmutableList()))
         .containsExactly(testPath1.toString(), testPath2.toString());
   }
+
+  private static DetailedExitCode createGenericDetailedExitCode() {
+    return DetailedExitCode.of(
+        FailureDetail.newBuilder()
+            .setSpawn(Spawn.newBuilder().setCode(Code.NON_ZERO_EXIT))
+            .build());
+  }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
index 6d32070..67a7cd7 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -235,7 +235,6 @@
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:abrupt_exit_exception",
         "//src/main/java/com/google/devtools/build/lib/util:detailed_exit_code",
-        "//src/main/java/com/google/devtools/build/lib/util:exit_code",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
         "//src/main/java/com/google/devtools/build/lib/util/io",
         "//src/main/java/com/google/devtools/build/lib/util/io:out-err",
@@ -247,6 +246,7 @@
         "//src/main/java/com/google/devtools/common/options",
         "//src/main/protobuf:action_cache_java_proto",
         "//src/main/protobuf:analysis_java_proto",
+        "//src/main/protobuf:failure_details_java_proto",
         "//src/test/java/com/google/devtools/build/lib/actions/util",
         "//src/test/java/com/google/devtools/build/lib/analysis/testing",
         "//src/test/java/com/google/devtools/build/lib/analysis/util",
@@ -260,7 +260,6 @@
         "//src/test/java/com/google/devtools/build/lib/testutil:TestConstants",
         "//src/test/java/com/google/devtools/build/lib/testutil:TestPackageFactoryBuilderFactory",
         "//src/test/java/com/google/devtools/build/lib/testutil:TestUtils",
-        "//src/test/java/com/google/devtools/build/lib/util/subjects",
         "//src/test/java/com/google/devtools/build/lib/vfs/util",
         "//src/test/java/com/google/devtools/build/skyframe:testutil",
         "//third_party:auto_value",
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
index 2a22426..d9b8ad5 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
@@ -21,7 +21,6 @@
 import static com.google.devtools.build.lib.testutil.MoreAsserts.assertContainsEventRegex;
 import static com.google.devtools.build.lib.testutil.MoreAsserts.assertEventCount;
 import static com.google.devtools.build.lib.testutil.MoreAsserts.assertNotContainsEventRegex;
-import static com.google.devtools.build.lib.util.subjects.DetailedExitCodeSubjectFactory.assertThatDetailedExitCode;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.Assert.assertThrows;
 import static org.junit.Assert.fail;
@@ -105,6 +104,10 @@
 import com.google.devtools.build.lib.pkgcache.TransitivePackageLoader;
 import com.google.devtools.build.lib.remote.options.RemoteOutputsMode;
 import com.google.devtools.build.lib.runtime.KeepGoingOption;
+import com.google.devtools.build.lib.server.FailureDetails.Crash;
+import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
+import com.google.devtools.build.lib.server.FailureDetails.Spawn;
+import com.google.devtools.build.lib.server.FailureDetails.Spawn.Code;
 import com.google.devtools.build.lib.skyframe.AspectValueKey.AspectKey;
 import com.google.devtools.build.lib.skyframe.DirtinessCheckerUtils.BasicFilesystemDirtinessChecker;
 import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ActionCompletedReceiver;
@@ -119,7 +122,6 @@
 import com.google.devtools.build.lib.testutil.MoreAsserts;
 import com.google.devtools.build.lib.testutil.TestUtils;
 import com.google.devtools.build.lib.util.DetailedExitCode;
-import com.google.devtools.build.lib.util.ExitCode;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -167,6 +169,18 @@
 /** Tests for {@link SequencedSkyframeExecutor}. */
 @RunWith(JUnit4.class)
 public final class SequencedSkyframeExecutorTest extends BuildViewTestCase {
+
+  private static final DetailedExitCode USER_DETAILED_EXIT_CODE =
+      DetailedExitCode.of(
+          FailureDetail.newBuilder()
+              .setSpawn(Spawn.newBuilder().setCode(Code.NON_ZERO_EXIT))
+              .build());
+  private static final DetailedExitCode INFRA_DETAILED_EXIT_CODE =
+      DetailedExitCode.of(
+          FailureDetail.newBuilder()
+              .setCrash(Crash.newBuilder().setCode(Crash.Code.CRASH_UNKNOWN))
+              .build());
+
   private TransitivePackageLoader visitor;
   private OptionsParser options;
 
@@ -1453,7 +1467,11 @@
 
   /** Dummy action that throws a catastrophic error when it runs. */
   private static class CatastrophicAction extends DummyAction {
-    public static final ExitCode expectedExitCode = ExitCode.RESERVED;
+    public static final DetailedExitCode expectedDetailedExitCode =
+        DetailedExitCode.of(
+            FailureDetail.newBuilder()
+                .setCrash(Crash.newBuilder().setCode(Crash.Code.CRASH_UNKNOWN))
+                .build());
 
     CatastrophicAction(Artifact output) {
       super(NestedSetBuilder.emptySet(Order.STABLE_ORDER), output, MiddlemanType.NORMAL);
@@ -1467,7 +1485,7 @@
           new Exception("just cause"),
           this,
           /*catastrophe=*/ true,
-          DetailedExitCode.justExitCode(expectedExitCode));
+          expectedDetailedExitCode);
     }
   }
 
@@ -1565,8 +1583,7 @@
                     /* trustRemoteArtifacts= */ false));
     // The catastrophic exception should be propagated into the BuildFailedException whether or not
     // --keep_going is set.
-    assertThatDetailedExitCode(e.getDetailedExitCode())
-        .hasExitCode(CatastrophicAction.expectedExitCode);
+    assertThat(e.getDetailedExitCode()).isEqualTo(CatastrophicAction.expectedDetailedExitCode);
     assertThat(builtTargets).isEmpty();
     assertThat(markerRan.get()).isFalse();
   }
@@ -1624,7 +1641,7 @@
     Artifact failureArtifact =
         new Artifact.DerivedArtifact(
             ArtifactRoot.asDerivedRoot(root, "out"), execPath.getRelative("fail"), failureCTK);
-    Action failureAction = new FailedExecAction(failureArtifact, ExitCode.RESERVED);
+    Action failureAction = new FailedExecAction(failureArtifact, USER_DETAILED_EXIT_CODE);
     ConfiguredTargetValue failureCTV = createConfiguredTargetValue(failureAction, failureCTK);
     ActionLookupValue.ActionLookupKey topCTK = new InjectedActionLookupKey("top");
     Artifact topArtifact =
@@ -1696,8 +1713,7 @@
                     /* trustRemoteArtifacts= */ false));
     // The catastrophic exception should be propagated into the BuildFailedException whether or not
     // --keep_going is set.
-    assertThatDetailedExitCode(e.getDetailedExitCode())
-        .hasExitCode(CatastrophicAction.expectedExitCode);
+    assertThat(e.getDetailedExitCode()).isEqualTo(CatastrophicAction.expectedDetailedExitCode);
     assertThat(builtTargets).isEmpty();
   }
 
@@ -1742,7 +1758,7 @@
               execPath.getRelative(failString),
               configuredTargetKey);
       failedArtifacts.add(failureArtifact);
-      failedActions.add(new FailedExecAction(failureArtifact, ExitCode.BUILD_FAILURE));
+      failedActions.add(new FailedExecAction(failureArtifact, USER_DETAILED_EXIT_CODE));
     }
     NonRuleConfiguredTargetValue nonRuleConfiguredTargetValue =
         new NonRuleConfiguredTargetValue(
@@ -1828,8 +1844,7 @@
                     /* trustRemoteArtifacts= */ false));
     // The catastrophic exception should be propagated into the BuildFailedException whether or not
     // --keep_going is set.
-    assertThatDetailedExitCode(e.getDetailedExitCode())
-        .hasExitCode(CatastrophicAction.expectedExitCode);
+    assertThat(e.getDetailedExitCode()).isEqualTo(CatastrophicAction.expectedDetailedExitCode);
     assertThat(builtTargets).isEmpty();
   }
 
@@ -1935,36 +1950,27 @@
                     /* trustRemoteArtifacts= */ false));
     // The catastrophic exception should be propagated into the BuildFailedException whether or not
     // --keep_going is set.
-    assertThatDetailedExitCode(e.getDetailedExitCode())
-        .hasExitCode(CatastrophicAction.expectedExitCode);
+    assertThat(e.getDetailedExitCode()).isEqualTo(CatastrophicAction.expectedDetailedExitCode);
     assertThat(builtTargets).isEmpty();
   }
 
   /** Dummy action that throws a ActionExecution error when it runs. */
   private static class FailedExecAction extends DummyAction {
-    private final ExitCode exitCode;
+    private final DetailedExitCode detailedExitCode;
 
-    FailedExecAction(Artifact output, ExitCode exitCode) {
+    FailedExecAction(Artifact output, DetailedExitCode detailedExitCode) {
       super(NestedSetBuilder.emptySet(Order.STABLE_ORDER), output, MiddlemanType.NORMAL);
-      this.exitCode = exitCode;
+      this.detailedExitCode = detailedExitCode;
     }
 
     @Override
     public ActionResult execute(ActionExecutionContext actionExecutionContext)
         throws ActionExecutionException {
       throw new ActionExecutionException(
-          "foo",
-          new Exception("bar"),
-          this,
-          /*catastrophe=*/ false,
-          DetailedExitCode.justExitCode(exitCode));
+          "foo", new Exception("bar"), this, /*catastrophe=*/ false, detailedExitCode);
     }
   }
 
-  private static final ExitCode USER_EXIT_CODE = ExitCode.create(Integer.MAX_VALUE, "user_error");
-  private static final ExitCode INFRA_EXIT_CODE =
-      ExitCode.createInfrastructureFailure(Integer.MAX_VALUE - 1, "infra_error");
-
   /**
    * Verify SkyframeBuilder returns correct user error code as global error code when:
    *    1. keepGoing mode is true.
@@ -1994,7 +2000,7 @@
         new DummyAction(NestedSetBuilder.emptySet(Order.STABLE_ORDER), succeededOutput);
     ConfiguredTargetValue succeededTarget =
         createConfiguredTargetValue(succeededAction, succeededKey);
-    Action failedAction = new FailedExecAction(failedOutput, USER_EXIT_CODE);
+    Action failedAction = new FailedExecAction(failedOutput, USER_DETAILED_EXIT_CODE);
     ConfiguredTargetValue failedTarget = createConfiguredTargetValue(failedAction, failedKey);
 
     // Inject the targets into the graph,
@@ -2047,7 +2053,7 @@
                     /* trustRemoteArtifacts= */ false));
     // The exit code should be propagated into the BuildFailedException whether or not --keep_going
     // is set.
-    assertThatDetailedExitCode(e.getDetailedExitCode()).hasExitCode(USER_EXIT_CODE);
+    assertThat(e.getDetailedExitCode()).isEqualTo(USER_DETAILED_EXIT_CODE);
   }
 
   /**
@@ -2085,9 +2091,9 @@
         new DummyAction(NestedSetBuilder.emptySet(Order.STABLE_ORDER), succeededOutput);
     ConfiguredTargetValue succeededTarget =
         createConfiguredTargetValue(succeededAction, succeededKey);
-    Action failedAction1 = new FailedExecAction(failedOutput1, USER_EXIT_CODE);
+    Action failedAction1 = new FailedExecAction(failedOutput1, USER_DETAILED_EXIT_CODE);
     ConfiguredTargetValue failedTarget1 = createConfiguredTargetValue(failedAction1, failedKey1);
-    Action failedAction2 = new FailedExecAction(failedOutput2, INFRA_EXIT_CODE);
+    Action failedAction2 = new FailedExecAction(failedOutput2, INFRA_DETAILED_EXIT_CODE);
     ConfiguredTargetValue failedTarget2 = createConfiguredTargetValue(failedAction2, failedKey2);
 
     // Inject the targets into the graph,
@@ -2141,7 +2147,7 @@
                     /* trustRemoteArtifacts= */ false));
     // The exit code should be propagated into the BuildFailedException whether or not --keep_going
     // is set.
-    assertThatDetailedExitCode(e.getDetailedExitCode()).hasExitCode(INFRA_EXIT_CODE);
+    assertThat(e.getDetailedExitCode()).isEqualTo(INFRA_DETAILED_EXIT_CODE);
   }
 
   /**