From: Max Reitz <mreitz@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>, qemu-devel@nongnu.org
Cc: eesposit@redhat.com, vsementsov@virtuozzo.com, qemu-block@nongnu.org
Subject: Re: [PATCH v3 4/5] qemu-iotests: let "check" spawn an arbitrary test command
Date: Tue, 30 Mar 2021 12:44:37 +0200 [thread overview]
Message-ID: <62c3d8c9-86d4-0fa1-1b43-881a84c852eb@redhat.com> (raw)
In-Reply-To: <51523e26-a184-9434-cb60-277c7b3c67d6@redhat.com>
On 30.03.21 12:38, Max Reitz wrote:
> On 26.03.21 16:05, Max Reitz wrote:
>> On 26.03.21 15:23, 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.
>>>
>>> Move the trailing empty line to print_env(), since it always looks
>>> better
>>> and one caller was not adding it.
>>>
>>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>>> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>> Tested-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
>>> Message-Id: <20210323181928.311862-5-pbonzini@redhat.com>
>>> ---
>>> tests/qemu-iotests/check | 18 +++++++++++++++++-
>>> tests/qemu-iotests/testenv.py | 3 ++-
>>> tests/qemu-iotests/testrunner.py | 1 -
>>> 3 files changed, 19 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
>>> index d1c87ceaf1..df9fd733ff 100755
>>> --- a/tests/qemu-iotests/check
>>> +++ b/tests/qemu-iotests/check
>>> @@ -19,6 +19,9 @@
>>> import os
>>> import sys
>>> import argparse
>>> +import shutil
>>> +from pathlib import Path
>>> +
>>> from findtests import TestFinder
>>> from testenv import TestEnv
>>> from testrunner import TestRunner
>>> @@ -101,7 +104,7 @@ def make_argparser() -> argparse.ArgumentParser:
>>> 'rerun failed ./check command, starting from
>>> the '
>>> 'middle of the process.')
>>> g_sel.add_argument('tests', metavar='TEST_FILES', nargs='*',
>>> - help='tests to run')
>>> + help='tests to run, or "--" followed by a
>>> command')
>>> return p
>>> @@ -114,6 +117,19 @@ if __name__ == '__main__':
>>> imgopts=args.imgopts, misalign=args.misalign,
>>> debug=args.debug, valgrind=args.valgrind)
>>> + if len(sys.argv) > 1 and sys.argv[-len(args.tests)-1] == '--':
>>> + if not args.tests:
>>> + sys.exit("missing command after '--'")
>>> + cmd = args.tests
>>> + env.print_env()
>>> + exec_path = Path(shutil.which(cmd[0]))
>>
>> 297 says:
>>
>> check:125: error: Argument 1 to "Path" has incompatible type
>> "Optional[str]"; expected "Union[str, _PathLike[str]]"
>> Found 1 error in 1 file (checked 1 source file)
>>
>> Normally I’d assert this away, but actually I think the returned value
>> should be checked and we should print an error if it’s None. (Seems
>> like shutil.which() doesn’t raise an exception if there is no such
>> command, it just returns None.)
>>
>> Max
>>
>>> + if exec_path is None:
>>> + sys.exit('command not found: ' + cmd[0])
>
> Oh, I see, the intent to print an error is actually there. The problem
> is just that Path(None) throws an exception, so we must check
> shutil.which()’s return value.
>
> I’ll squash this in if you don’t mind:
>
> diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
> index df9fd733ff..e2230f5612 100755
> --- a/tests/qemu-iotests/check
> +++ b/tests/qemu-iotests/check
> @@ -122,9 +122,10 @@ if __name__ == '__main__':
> sys.exit("missing command after '--'")
> cmd = args.tests
> env.print_env()
> - exec_path = Path(shutil.which(cmd[0]))
> - if exec_path is None:
> + exec_pathstr = shutil.which(cmd[0])
> + if exec_pathstr is None:
> sys.exit('command not found: ' + cmd[0])
> + exec_path = Path(exec_pathstr)
> cmd[0] = exec_path.resolve()
> full_env = env.prepare_subprocess(cmd)
> os.chdir(Path(exec_path).parent)
>
>>> + cmd[0] = exec_path.resolve()
>>> + full_env = env.prepare_subprocess(cmd)
>>> + os.chdir(Path(exec_path).parent)
Oh, and this Path() does nothing, I presume, so I’m going to replace it
with just “exec_path”.
Max
>>> + os.execve(cmd[0], cmd, full_env)
>>> +
>>> testfinder = TestFinder(test_dir=env.source_iotests)
>>> groups = args.groups.split(',') if args.groups else None
>>> diff --git a/tests/qemu-iotests/testenv.py
>>> b/tests/qemu-iotests/testenv.py
>>> index fca3a609e0..cd0e39b789 100644
>>> --- a/tests/qemu-iotests/testenv.py
>>> +++ b/tests/qemu-iotests/testenv.py
>>> @@ -284,7 +284,8 @@ def print_env(self) -> None:
>>> PLATFORM -- {platform}
>>> TEST_DIR -- {TEST_DIR}
>>> SOCK_DIR -- {SOCK_DIR}
>>> -SOCKET_SCM_HELPER -- {SOCKET_SCM_HELPER}"""
>>> +SOCKET_SCM_HELPER -- {SOCKET_SCM_HELPER}
>>> +"""
>>> args = collections.defaultdict(str, self.get_env())
>>> diff --git a/tests/qemu-iotests/testrunner.py
>>> b/tests/qemu-iotests/testrunner.py
>>> index 519924dc81..2f56ac545d 100644
>>> --- a/tests/qemu-iotests/testrunner.py
>>> +++ b/tests/qemu-iotests/testrunner.py
>>> @@ -316,7 +316,6 @@ def run_tests(self, tests: List[str]) -> bool:
>>> if not self.makecheck:
>>> self.env.print_env()
>>> - print()
>>> test_field_width = max(len(os.path.basename(t)) for t in
>>> tests) + 2
>>>
>>
>
next prev parent reply other threads:[~2021-03-30 10:45 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-26 14:23 [PATCH v3 0/5] qemu-iotests: quality of life improvements Paolo Bonzini
2021-03-26 14:23 ` [PATCH v3 1/5] qemu-iotests: do not buffer the test output Paolo Bonzini
2021-03-26 14:23 ` [PATCH v3 2/5] qemu-iotests: allow passing unittest.main arguments to the test scripts Paolo Bonzini
2021-03-26 14:23 ` [PATCH v3 3/5] qemu-iotests: move command line and environment handling from TestRunner to TestEnv Paolo Bonzini
2021-03-26 14:23 ` [PATCH v3 4/5] qemu-iotests: let "check" spawn an arbitrary test command Paolo Bonzini
2021-03-26 15:05 ` Max Reitz
2021-03-30 10:38 ` Max Reitz
2021-03-30 10:44 ` Max Reitz [this message]
2021-03-30 10:57 ` Max Reitz
2021-03-30 11:12 ` Paolo Bonzini
2021-03-26 14:23 ` [PATCH v3 5/5] qemu-iotests: fix case of SOCK_DIR already in the environment Paolo Bonzini
2021-03-30 11:32 ` [PATCH v3 0/5] qemu-iotests: quality of life improvements Max Reitz
2021-03-30 11:44 ` Max Reitz
2021-03-30 11:52 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=62c3d8c9-86d4-0fa1-1b43-881a84c852eb@redhat.com \
--to=mreitz@redhat.com \
--cc=eesposit@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=vsementsov@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).