From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
To: Max Reitz <mreitz@redhat.com>, qemu-block@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [PATCH v2 1/8] iotests/297: Allow checking all Python test files
Date: Wed, 13 Jan 2021 23:28:13 +0300 [thread overview]
Message-ID: <2bb555bc-dfa5-076a-a3c3-b4bb5d1330f0@virtuozzo.com> (raw)
In-Reply-To: <285b6f74-da97-4b4b-70a8-ec09a8c467bb@virtuozzo.com>
13.01.2021 22:27, Vladimir Sementsov-Ogievskiy wrote:
> 13.01.2021 20:57, Max Reitz wrote:
>> I.e., all Python files in the qemu-iotests/ directory.
>>
>> Most files of course do not pass, so there is an extensive skip list for
>> now. (The only files that do pass are 209, 254, 283, and iotests.py.)
>>
>> (Alternatively, we could have the opposite, i.e. an explicit list of
>> files that we do want to check, but I think it is better to check files
>> by default.)
>>
>> I decided to include the list of files checked in the reference output,
>> so we do not accidentally lose coverage of anything. That means adding
>> new Python tests will require a change to 297.out, but that should not
>> be a problem.
>
> I have a parallel series, "Rework iotests/check", one of its aims is drop
> group file, to avoid these endless conflicts in group file when you want
> to send series or when you are porting patches to/from downstream.
>
> And you are trying to add one another "group" file :) I don't like the idea.
>
> Why should we loose accidentally the coverage? Logic is extremely simple:
> all files except for the list.
>
Also.. What about checking python in python :) ? I exercised myself,
rewriting it into python. Take it if you like:
(suddenly, pylint warns about "TODO"s, so I just drop a TODO line.. Probably
we'll have to suppress this warning in 297)
import os
import shutil
import subprocess
import iotests
iotests.script_initialize()
def is_python_file(filename):
if filename.endswith('.py'):
return True
with open(filename) as f:
try:
first_line = f.readline()
if first_line.startswith('#!') and 'python' in first_line:
return True
except UnicodeDecodeError: # ignore core files, etc
pass
return False
for linter in ('pylint-3', 'mypy'):
if shutil.which(linter) is None:
iotests.notrun(f'{linter} not found')
skip_files = (
'030', '040', '041', '044', '045', '055', '056', '057', '065', '093',
'096', '118', '124', '129', '132', '136', '139', '147', '148', '149',
'151', '152', '155', '163', '165', '169', '194', '196', '199', '202',
'203', '205', '206', '207', '208', '210', '211', '212', '213', '216',
'218', '219', '222', '224', '228', '234', '235', '236', '237', '238',
'240', '242', '245', '246', '248', '255', '256', '257', '258', '260',
'262', '264', '266', '274', '277', '280', '281', '295', '296', '298',
'299', '300', '302', '303', '304', '307', 'nbd-fault-injector.py',
'qcow2.py', 'qcow2_format.py', 'qed.py'
)
files = [f for f in (set(os.listdir('.')) - set(skip_files))
if os.path.isfile(f) and is_python_file(f)]
# We can pass all files to pylint at once...
subprocess.run(['pylint-3', '--score=n'] + files, check=False)
# ...but mypy needs to be called once per file. Otherwise, it will
# interpret all given files as belonging together (i.e., they may not
# both define the same classes, etc.; most notably, they must not both
# define the __main__ module).
os.environ['MYPYPATH'] = '../../python/'
for file in files:
p = subprocess.run(['mypy', '--warn-unused-configs',
'--disallow-subclassing-any',
'--disallow-any-generics',
'--disallow-incomplete-defs',
'--disallow-untyped-decorators',
'--no-implicit-optional', '--warn-redundant-casts',
'--warn-unused-ignores', '--no-implicit-reexport',
file], check=False,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
if p.returncode != 0:
print(p.stdout)
--
Best regards,
Vladimir
next prev parent reply other threads:[~2021-01-13 20:29 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-13 17:57 [PATCH v2 0/8] iotests: Fix 129 and expand 297’s reach Max Reitz
2021-01-13 17:57 ` [PATCH v2 1/8] iotests/297: Allow checking all Python test files Max Reitz
2021-01-13 19:01 ` Eric Blake
2021-01-14 9:23 ` Max Reitz
2021-01-13 19:27 ` Vladimir Sementsov-Ogievskiy
2021-01-13 20:28 ` Vladimir Sementsov-Ogievskiy [this message]
2021-01-14 9:31 ` Max Reitz
2021-01-14 10:53 ` Vladimir Sementsov-Ogievskiy
2021-01-14 9:27 ` Max Reitz
2021-01-13 17:57 ` [PATCH v2 2/8] iotests: Move try_remove to iotests.py Max Reitz
2021-01-13 19:28 ` Vladimir Sementsov-Ogievskiy
2021-01-13 17:57 ` [PATCH v2 3/8] iotests/129: Remove test images in tearDown() Max Reitz
2021-01-13 17:57 ` [PATCH v2 4/8] iotests/129: Do not check @busy Max Reitz
2021-01-13 17:57 ` [PATCH v2 5/8] iotests/129: Use throttle node Max Reitz
2021-01-13 19:02 ` Eric Blake
2021-01-13 20:33 ` Vladimir Sementsov-Ogievskiy
2021-01-13 17:57 ` [PATCH v2 6/8] iotests/129: Actually test a commit job Max Reitz
2021-01-13 17:57 ` [PATCH v2 7/8] iotests/129: Limit mirror job's buffer size Max Reitz
2021-01-13 17:57 ` [PATCH v2 8/8] iotests/129: Clean up pylint and mypy complaints Max Reitz
2021-01-13 19:04 ` Eric Blake
2021-01-13 20:38 ` Vladimir Sementsov-Ogievskiy
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=2bb555bc-dfa5-076a-a3c3-b4bb5d1330f0@virtuozzo.com \
--to=vsementsov@virtuozzo.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/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).