]> git.lizzy.rs Git - rust.git/blobdiff - test-cargo-miri/run-test.py
Cleanup test-cargo-miri/run-test.py
[rust.git] / test-cargo-miri / run-test.py
index bbb8df9059acb7be76134904b63efc1ff670f264..81f589705dc332e7a17dd5969f8a095ad26806c4 100755 (executable)
@@ -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,60 +50,94 @@ def test(name, cmd, stdout_ref, stderr_ref, stdin=b'', env={}):
     print("--- END stderr ---")
     fail("exit code was {}".format(p.returncode))
 
+def test_no_rebuild(name, cmd, env={}):
+    print("Testing {}...".format(name))
+    p_env = os.environ.copy()
+    p_env.update(env)
+    p = subprocess.Popen(
+        cmd,
+        stdout=subprocess.PIPE,
+        stderr=subprocess.PIPE,
+        env=p_env,
+    )
+    (stdout, stderr) = p.communicate()
+    stdout = stdout.decode("UTF-8")
+    stderr = stderr.decode("UTF-8")
+    if p.returncode != 0:
+        fail("rebuild failed");
+    # Also check for 'Running' as a sanity check.
+    if stderr.count(" Compiling ") > 0 or stderr.count(" Running ") == 0:
+        print("--- BEGIN stderr ---")
+        print(stderr, end="")
+        print("--- END stderr ---")
+        fail("Something was being rebuilt when it should not be (or we got no output)");
+
 def test_cargo_miri_run():
     test("`cargo miri run` (no isolation)",
         cargo_miri("run"),
-        "stdout.ref1", "stderr.ref1",
+        "run.default.stdout.ref", "run.default.stderr.ref",
         stdin=b'12\n21\n',
         env={
             'MIRIFLAGS': "-Zmiri-disable-isolation",
             'MIRITESTVAR': "wrongval", # make sure the build.rs value takes precedence
         },
     )
+    # Special test: run it again *without* `-q` to make sure nothing is being rebuilt (Miri issue #1722)
+    test_no_rebuild("`cargo miri run` (no rebuild)",
+        cargo_miri("run", quiet=False) + ["--", ""],
+        env={'MIRITESTVAR': "wrongval"}, # changing the env var causes a rebuild (re-runs build.rs),
+                                         # so keep it set
+    )
     test("`cargo miri run` (with arguments and target)",
         cargo_miri("run") + ["--bin", "cargo-miri-test", "--", "hello world", '"hello world"'],
-        "stdout.ref2", "stderr.ref2",
+        "run.args.stdout.ref", "run.args.stderr.ref",
     )
     test("`cargo miri run` (subcrate, no ioslation)",
         cargo_miri("run") + ["-p", "subcrate"],
-        "stdout.ref3", "stderr.ref3",
+        "run.subcrate.stdout.ref", "run.subcrate.stderr.ref",
         env={'MIRIFLAGS': "-Zmiri-disable-isolation"},
     )
 
 def test_cargo_miri_test():
     # rustdoc is not run on foreign targets
     is_foreign = 'MIRI_TEST_TARGET' in os.environ
-    rustdoc_ref = "test.stderr.ref2" if is_foreign else "test.stderr.ref1"
+    rustdoc_ref = "test.stderr-empty.ref" if is_foreign else "test.stderr-rustdoc.ref"
 
     test("`cargo miri test`",
         cargo_miri("test"),
-        "test.stdout.ref1", rustdoc_ref,
+        "test.default.stdout.ref", rustdoc_ref,
         env={'MIRIFLAGS': "-Zmiri-seed=feed"},
     )
     test("`cargo miri test` (no isolation)",
         cargo_miri("test"),
-        "test.stdout.ref1", rustdoc_ref,
+        "test.default.stdout.ref", rustdoc_ref,
         env={'MIRIFLAGS': "-Zmiri-disable-isolation"},
     )
+    test("`cargo miri test` (raw-ptr tracking)",
+        cargo_miri("test"),
+        "test.default.stdout.ref", rustdoc_ref,
+        env={'MIRIFLAGS': "-Zmiri-track-raw-pointers"},
+    )
     test("`cargo miri test` (with filter)",
         cargo_miri("test") + ["--", "--format=pretty", "le1"],
-        "test.stdout.ref2", rustdoc_ref,
+        "test.filter.stdout.ref", rustdoc_ref,
     )
     test("`cargo miri test` (test target)",
         cargo_miri("test") + ["--test", "test", "--", "--format=pretty"],
-        "test.stdout.ref3", "test.stderr.ref2",
+        "test.test-target.stdout.ref", "test.stderr-empty.ref",
     )
     test("`cargo miri test` (bin target)",
         cargo_miri("test") + ["--bin", "cargo-miri-test", "--", "--format=pretty"],
-        "test.stdout.ref4", "test.stderr.ref2",
+        "test.bin-target.stdout.ref", "test.stderr-empty.ref",
     )
     test("`cargo miri test` (subcrate, no isolation)",
         cargo_miri("test") + ["-p", "subcrate"],
-        "test.stdout.ref5", "test.stderr.ref2",
+        "test.subcrate.stdout.ref", "test.stderr-proc-macro.ref",
         env={'MIRIFLAGS': "-Zmiri-disable-isolation"},
     )
 
 os.chdir(os.path.dirname(os.path.realpath(__file__)))
+os.environ["RUST_TEST_NOCAPTURE"] = "0" # this affects test output, so make sure it is not set
 
 target_str = " for target {}".format(os.environ['MIRI_TEST_TARGET']) if 'MIRI_TEST_TARGET' in os.environ else ""
 print(CGREEN + CBOLD + "## Running `cargo miri` tests{}".format(target_str) + CEND)