qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 3/4] qemu-iotests: let "check" spawn an arbitrary test comman


From: Vladimir Sementsov-Ogievskiy
Subject: Re: [PATCH 3/4] qemu-iotests: let "check" spawn an arbitrary test command
Date: Tue, 23 Mar 2021 19:43:30 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1

23.03.2021 16:06, Paolo Bonzini wrote:
Right now there is no easy way for "check" to print a reproducer command.
Because such a reproducer command line would be huge, we can instead teach
check to start a command of our choice.  This can be for example a Python
unit test with arguments to only run a specific subtest.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
  tests/qemu-iotests/check | 16 ++++++++++++++--
  1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
index d1c87ceaf1..aab25dac6a 100755
--- a/tests/qemu-iotests/check
+++ b/tests/qemu-iotests/check
@@ -19,6 +19,7 @@
  import os
  import sys
  import argparse
+import shutil
  from findtests import TestFinder
  from testenv import TestEnv
  from testrunner import TestRunner
@@ -100,8 +101,8 @@ def make_argparser() -> argparse.ArgumentParser:
                         'one to TEST (not inclusive). This may be used to '
                         'rerun failed ./check command, starting from the '
                         'middle of the process.')
-    g_sel.add_argument('tests', metavar='TEST_FILES', nargs='*',
-                       help='tests to run')
+    g_sel.add_argument('tests', nargs=argparse.REMAINDER,

Interesting that REMAINDER documentation disappeared from latest (3.9) python 
documentation https://docs.python.org/3.9/library/argparse.html , but exists 
here https://docs.python.org/3.8/library/argparse.html  (and no mark of 
deprecation)

+                       help='tests to run, or "--" followed by a command')
return p @@ -114,6 +115,17 @@ if __name__ == '__main__':
                    imgopts=args.imgopts, misalign=args.misalign,
                    debug=args.debug, valgrind=args.valgrind)
+ if args.tests[0] == '--':
+        del args.tests[0]
+        cmd = args.tests
+        env.print_env()
+        exec_path = shutil.which(cmd[0])
+        if exec_path is None:
+            sys.exit('command not found: ' + cmd[0])
+        cmd[0] = exec_path
+        full_env = env.prepare_subprocess(cmd)
+        os.execve(cmd[0], cmd, full_env)
+
      testfinder = TestFinder(test_dir=env.source_iotests)
groups = args.groups.split(',') if args.groups else None


I hope at some moment we'll run testcases with syntax like

./check -qcow2 test_name.ClassName.method_name

But a possibility to run any command under check script defined environment is 
a good thing anyway:
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>

--
Best regards,
Vladimir



reply via email to

[Prev in Thread] Current Thread [Next in Thread]