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"
