From f85bb0fb09a1932cdc17ebb0dcd13b81c93346f7 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sat, 27 Feb 2021 12:24:58 +0100 Subject: [PATCH] test for unnecessary rebuilds in 'cargo miri run' --- test-cargo-miri/run-test.py | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/test-cargo-miri/run-test.py b/test-cargo-miri/run-test.py index 8edd947c3b0f..0505b422d95f 100755 --- a/test-cargo-miri/run-test.py +++ b/test-cargo-miri/run-test.py @@ -15,8 +15,10 @@ def fail(msg): print("\nTEST FAIL: {}".format(msg)) sys.exit(1) -def cargo_miri(cmd): - args = ["cargo", "miri", cmd, "-q"] +def cargo_miri(cmd, quiet = True): + args = ["cargo", "miri", cmd] + if quiet: + args += ["-q"] if 'MIRI_TEST_TARGET' in os.environ: args += ["--target", os.environ['MIRI_TEST_TARGET']] return args @@ -48,6 +50,25 @@ def test(name, cmd, stdout_ref, stderr_ref, stdin=b'', env={}): print("--- END stderr ---") fail("exit code was {}".format(p.returncode)) +def test_rebuild(name, cmd, rebuild_count_expected): + print("Testing {}...".format(name)) + p = subprocess.Popen( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + (stdout, stderr) = p.communicate() + stdout = stdout.decode("UTF-8") + stderr = stderr.decode("UTF-8") + if p.returncode != 0: + fail("rebuild failed"); + rebuild_count = stderr.count(" Compiling "); + if rebuild_count != rebuild_count_expected: + print("--- BEGIN stderr ---") + print(stderr, end="") + print("--- END stderr ---") + fail("Expected {} rebuild(s), but got {}".format(rebuild_count_expected, rebuild_count)); + def test_cargo_miri_run(): test("`cargo miri run` (no isolation)", cargo_miri("run"), @@ -67,6 +88,11 @@ def test_cargo_miri_run(): "run.subcrate.stdout.ref", "run.subcrate.stderr.ref", env={'MIRIFLAGS': "-Zmiri-disable-isolation"}, ) + # Special test: run it again *without* `-q` to make sure nothing is being rebuilt (Miri issue #1722) + test_rebuild("`cargo miri run` (clean rebuild)", + cargo_miri("run", quiet=False) + ["--", ""], + rebuild_count_expected=1, + ) def test_cargo_miri_test(): # rustdoc is not run on foreign targets