qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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
>>>
>>
> 



  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).