ByteStreamBuildEventArtifactUploader: Treat test directory outputs like other directory outputs.

Fixes https://github.com/bazelbuild/bazel/issues/19847.

Closes #19851.

PiperOrigin-RevId: 574399055
Change-Id: I2d4cca1c70636b6f8f025a98ed5f0f19ae29bf47
diff --git a/src/main/java/com/google/devtools/build/lib/remote/ByteStreamBuildEventArtifactUploader.java b/src/main/java/com/google/devtools/build/lib/remote/ByteStreamBuildEventArtifactUploader.java
index ea5e11f..cd8b8b5 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/ByteStreamBuildEventArtifactUploader.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/ByteStreamBuildEventArtifactUploader.java
@@ -199,7 +199,10 @@
     DigestUtil digestUtil = new DigestUtil(xattrProvider, path.getFileSystem().getDigestFunction());
 
     if (file.type == LocalFileType.OUTPUT_DIRECTORY
-        || (file.type == LocalFileType.OUTPUT && path.isDirectory())) {
+        || ((file.type == LocalFileType.SUCCESSFUL_TEST_OUTPUT
+                || file.type == LocalFileType.FAILED_TEST_OUTPUT
+                || file.type == LocalFileType.OUTPUT)
+            && path.isDirectory())) {
       return new PathMetadata(
           path,
           /* digest= */ null,
diff --git a/src/test/java/com/google/devtools/build/lib/remote/ByteStreamBuildEventArtifactUploaderTest.java b/src/test/java/com/google/devtools/build/lib/remote/ByteStreamBuildEventArtifactUploaderTest.java
index 8e8bbfd..be46f3c 100644
--- a/src/test/java/com/google/devtools/build/lib/remote/ByteStreamBuildEventArtifactUploaderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/remote/ByteStreamBuildEventArtifactUploaderTest.java
@@ -344,11 +344,27 @@
   public void testUnknown_notUploadedIfDirectory() throws Exception {
     Path dir = fs.getPath("/dir");
     dir.createDirectoryAndParents();
-    Map<Path, LocalFile> filesToUpload = new HashMap<>();
-    filesToUpload.put(
-        dir,
-        new LocalFile(
-            dir, LocalFileType.OUTPUT, /* artifact= */ null, /* artifactMetadata= */ null));
+    var successfulTest = fs.getPath("/test_passed");
+    successfulTest.createDirectory();
+    var failedTest = fs.getPath("/test_failed");
+    failedTest.createDirectory();
+    var filesToUpload =
+        ImmutableMap.of(
+            dir,
+            new LocalFile(
+                dir, LocalFileType.OUTPUT, /* artifact= */ null, /* artifactMetadata= */ null),
+            successfulTest,
+            new LocalFile(
+                successfulTest,
+                LocalFileType.SUCCESSFUL_TEST_OUTPUT,
+                /* artifact= */ null,
+                /* artifactMetadata= */ null),
+            failedTest,
+            new LocalFile(
+                failedTest,
+                LocalFileType.FAILED_TEST_OUTPUT,
+                /* artifact= */ null,
+                /* artifactMetadata= */ null));
     RemoteRetrier retrier =
         TestUtils.newRemoteRetrier(() -> new FixedBackoff(1, 0), (e) -> true, retryService);
     ReferenceCountedChannel refCntChannel = new ReferenceCountedChannel(channelConnectionFactory);
@@ -357,6 +373,9 @@
 
     PathConverter pathConverter = artifactUploader.upload(filesToUpload).get();
     assertThat(pathConverter.apply(dir)).isNull();
+    assertThat(pathConverter.apply(successfulTest)).isNull();
+    assertThat(pathConverter.apply(failedTest)).isNull();
+    assertThat(eventHandler.getEvents()).isEmpty();
     artifactUploader.release();
   }