Add black box test for package loading cached by benign workspace change - similar to loading_phase_test.sh test_no_package_loading_on_benign_workspace_file_changes Closes #7765. PiperOrigin-RevId: 239355718
diff --git a/src/test/java/com/google/devtools/build/lib/blackbox/framework/BuilderRunner.java b/src/test/java/com/google/devtools/build/lib/blackbox/framework/BuilderRunner.java index 5e3b005..27ffba7 100644 --- a/src/test/java/com/google/devtools/build/lib/blackbox/framework/BuilderRunner.java +++ b/src/test/java/com/google/devtools/build/lib/blackbox/framework/BuilderRunner.java
@@ -237,6 +237,22 @@ } /** + * Runs <code>bazel query <args></code> and returns the result. Asserts that the process + * exit code is zero. Does not assert that the error stream is empty. + * + * @param args arguments to pass to query command + * @return ProcessResult with process exit code, strings with stdout and error streams contents + * @throws TimeoutException in case of timeout + * @throws IOException in case of the process startup/interaction problems + * @throws InterruptedException if the current thread is interrupted while waiting + * @throws ProcessRunnerException if the process return code is not zero or error stream is not + * empty when it was expected + */ + public ProcessResult query(String... args) throws Exception { + return runBinary("query", args); + } + + /** * Runs <code>bazel run <args></code> and returns the result. Asserts that the process exit * code is zero. Does not assert that the error stream is empty. *
diff --git a/src/test/java/com/google/devtools/build/lib/blackbox/tests/workspace/WorkspaceBlackBoxTest.java b/src/test/java/com/google/devtools/build/lib/blackbox/tests/workspace/WorkspaceBlackBoxTest.java index e6a79fb..177500e 100644 --- a/src/test/java/com/google/devtools/build/lib/blackbox/tests/workspace/WorkspaceBlackBoxTest.java +++ b/src/test/java/com/google/devtools/build/lib/blackbox/tests/workspace/WorkspaceBlackBoxTest.java
@@ -18,6 +18,7 @@ import com.google.devtools.build.lib.blackbox.framework.BuilderRunner; import com.google.devtools.build.lib.blackbox.framework.PathUtils; +import com.google.devtools.build.lib.blackbox.framework.ProcessResult; import com.google.devtools.build.lib.blackbox.junit.AbstractBlackBoxTest; import com.google.devtools.build.lib.util.OS; import java.nio.file.Files; @@ -184,6 +185,39 @@ } @Test + public void testNoPackageLoadingOnBenignWorkspaceChanges() throws Exception { + Path repo = context().getTmpDir().resolve(testName.getMethodName()); + new RepoWithRuleWritingTextGenerator(repo).withOutputText("hi").setupRepository(); + + context() + .write( + WORKSPACE, + String.format( + "local_repository(name = 'ext', path = '%s',)", + PathUtils.pathForStarlarkFile(repo))); + + BuilderRunner bazel = + WorkspaceTestUtils.bazel(context()) + // This combination of flags ensures all progress events get into stdout + // and Bazel recognizes that there is a terminal, so progress events will be displayed + .withFlags("--experimental_ui_debug_all_events", "--curses=yes"); + + final String progressMessage = "PROGRESS <no location>: Loading package: @ext//"; + + ProcessResult result = bazel.query("@ext//:all"); + assertThat(result.outString()).contains(progressMessage); + + result = bazel.query("@ext//:all"); + assertThat(result.outString()).doesNotContain(progressMessage); + + Path workspaceFile = context().getWorkDir().resolve(WORKSPACE); + PathUtils.append(workspaceFile, "# comment"); + + result = bazel.query("@ext//:all"); + assertThat(result.outString()).doesNotContain(progressMessage); + } + + @Test public void testPathWithSpace() throws Exception { context().write("a b/WORKSPACE"); BuilderRunner bazel = WorkspaceTestUtils.bazel(context());