Move OutputFilterTest#testStatusCmdPrinted to a shell test

Trade-off of extra overhead of shell test seems worth it to get rid of the
reflection hoops in the java test

PiperOrigin-RevId: 302730909
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 49c06ce..791c0dc 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
@@ -13,8 +13,7 @@
 )
 
 # Redirection for util lib to allow exporting both ":util_internal" and the
-# implementation of RulesModule, StrategyModule and WorkspaceStatuusModule
-# as named in
+# implementation of RulesModule and WorkspaceStatuusModule as named in
 # src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
 java_library(
     name = "util",
@@ -70,7 +69,6 @@
         "//src/test/java/com/google/devtools/build/lib/testutil",
         "//src/test/java/com/google/devtools/build/lib/testutil:TestConstants",
         "//src/test/java/com/google/devtools/build/lib/testutil:TestUtils",
-        "//src/test/java/com/google/devtools/build/lib/vfs:testutil",
         "//src/test/java/com/google/devtools/build/lib/vfs/util",
         "//third_party:guava",
         "//third_party:junit4",
diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/util/TestWorkspaceStatusModule.java b/src/test/java/com/google/devtools/build/lib/buildtool/util/TestWorkspaceStatusModule.java
deleted file mode 100644
index 734e4a5..0000000
--- a/src/test/java/com/google/devtools/build/lib/buildtool/util/TestWorkspaceStatusModule.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2019 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.buildtool.util;
-
-import com.google.devtools.build.lib.runtime.BlazeModule;
-import com.google.devtools.build.lib.testutil.TestConstants;
-
-/** Get the workspace status module for tests. */
-public class TestWorkspaceStatusModule {
-  public static BlazeModule getModule() {
-    try {
-      Class<?> moduleClass = Class.forName(TestConstants.TEST_WORKSPACE_STATUS_MODULE);
-      return (BlazeModule) moduleClass.getConstructor().newInstance();
-    } catch (Exception e) {
-      throw new IllegalStateException(e);
-    }
-  }
-}
diff --git a/src/test/java/com/google/devtools/build/lib/outputfilter/OutputFilterTest.java b/src/test/java/com/google/devtools/build/lib/outputfilter/OutputFilterTest.java
index a7b4acd..fffd6b4 100644
--- a/src/test/java/com/google/devtools/build/lib/outputfilter/OutputFilterTest.java
+++ b/src/test/java/com/google/devtools/build/lib/outputfilter/OutputFilterTest.java
@@ -18,16 +18,13 @@
 
 import com.google.common.base.Joiner;
 import com.google.devtools.build.lib.buildtool.util.BuildIntegrationTestCase;
-import com.google.devtools.build.lib.buildtool.util.TestWorkspaceStatusModule;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.EventCollector;
 import com.google.devtools.build.lib.events.EventKind;
-import com.google.devtools.build.lib.runtime.BlazeModule;
 import com.google.devtools.build.lib.runtime.BlazeRuntime;
 import com.google.devtools.build.lib.runtime.CommandEnvironment;
 import com.google.devtools.build.lib.testutil.Suite;
 import com.google.devtools.build.lib.testutil.TestSpec;
-import com.google.devtools.build.lib.vfs.Path;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -38,7 +35,6 @@
 @RunWith(JUnit4.class)
 public class OutputFilterTest extends BuildIntegrationTestCase {
   private EventCollector stderr = new EventCollector(EventKind.STDERR);
-  private Path workspaceScript;
 
   // Cast warnings are silenced by default.
   private void enableCastWarnings() throws Exception {
@@ -51,11 +47,6 @@
   }
 
   @Override
-  protected BlazeModule getBuildInfoModule() {
-    return TestWorkspaceStatusModule.getModule();
-  }
-
-  @Override
   protected BlazeRuntime.Builder getRuntimeBuilder() throws Exception {
     return super.getRuntimeBuilder().addBlazeModule(new OutputFilteringModule());
   }
@@ -165,8 +156,6 @@
         "    int i = (int) 0;",
         "  }",
         "}");
-    workspaceScript = write("wrk", "echo STATUS_CMD_HAS_RUN >&2");
-    workspaceScript.setExecutable(true);
 
     // Always enable cast warnings.
     enableCastWarnings();
@@ -329,23 +318,6 @@
   }
 
   @Test
-  public void testStatusCmdPrinted() throws Exception {
-    addOptions("--auto_output_filter=packages",
-               "--workspace_status_command=" + workspaceScript.getPathString());
-    CommandEnvironment env = runtimeWrapper.newCommand();
-    env.getReporter().addHandler(stderr);
-    buildTarget("//javatests/a", "//java/b");
-    assertEvent("STATUS_CMD_HAS_RUN");
-
-    addOptions("--auto_output_filter=subpackages",
-               "--workspace_status_command=" + workspaceScript.getPathString());
-    env = runtimeWrapper.newCommand();
-    env.getReporter().addHandler(stderr);
-    buildTarget("//javatests/a", "//java/b");
-    assertEvent("STATUS_CMD_HAS_RUN");
-  }
-
-  @Test
   public void testEmptyFilter() throws Exception {
     enableDeprecationWarnings();
     addOptions("--output_filter=");
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java b/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
index af0322c..73d752d 100644
--- a/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
+++ b/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
@@ -88,8 +88,6 @@
       "com.google.devtools.build.lib.bazel.rules.BazelStrategyModule";
   public static final String TEST_REAL_UNIX_FILE_SYSTEM =
       "com.google.devtools.build.lib.unix.UnixFileSystem";
-  public static final String TEST_WORKSPACE_STATUS_MODULE =
-      "com.google.devtools.build.lib.bazel.BazelWorkspaceStatusModule";
 
   public static void processSkyframeExecutorForTesting(SkyframeExecutor skyframeExecutor) {}
 
diff --git a/src/test/shell/integration/output_filter_test.sh b/src/test/shell/integration/output_filter_test.sh
index abac72b..249611f 100755
--- a/src/test/shell/integration/output_filter_test.sh
+++ b/src/test/shell/integration/output_filter_test.sh
@@ -318,4 +318,47 @@
 deprecated target '//$pkg/ether:ether': Disproven"
 }
 
+function test_workspace_status_command_error_output_printed() {
+  if type try_with_timeout >&/dev/null; then
+    # TODO(bazel-team): Hack to disable test since Bazel's
+    # workspace_status_cmd's stderr isn't reported. Determine if this a bug or
+    # a feature.
+    return
+  fi
+
+  local -r pkg="$FUNCNAME"
+
+  mkdir -p "$pkg"
+  cat >"$pkg/BUILD" <<EOF
+genrule(name = 'foo', outs = ['foo.txt'], cmd = 'touch \$@')
+EOF
+
+  local status_cmd="$TEST_TMPDIR/status_cmd.sh"
+
+  cat >"$status_cmd" <<EOF
+#!/bin/bash
+
+echo 'STATUS_COMMAND_RAN' >&2
+EOF
+  chmod +x "$status_cmd" || fail "Failed to mark $status_cmd executable"
+
+  bazel build --workspace_status_command="$status_cmd" \
+      --auto_output_filter=packages \
+      "//$pkg:foo" >&"$TEST_log" \
+      || fail "Expected success"
+  expect_log STATUS_COMMAND_RAN
+
+  bazel build --workspace_status_command="$status_cmd" \
+      --auto_output_filter=subpackages \
+      "//$pkg:foo" >&"$TEST_log" \
+      || fail "Expected success"
+  expect_log STATUS_COMMAND_RAN
+
+  bazel build --workspace_status_command="$status_cmd" \
+      --auto_output_filter=all \
+      "//$pkg:foo" >&"$TEST_log" \
+      || fail "Expected success"
+  expect_not_log STATUS_COMMAND_RAN
+}
+
 run_suite "Warning Filter tests"