[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 1/8] iotests/297: Allow checking all Python test files
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
Re: [PATCH v2 1/8] iotests/297: Allow checking all Python test files |
Date: |
Wed, 13 Jan 2021 23:28:13 +0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 |
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
[PATCH v2 2/8] iotests: Move try_remove to iotests.py, Max Reitz, 2021/01/13
[PATCH v2 3/8] iotests/129: Remove test images in tearDown(), Max Reitz, 2021/01/13
[PATCH v2 4/8] iotests/129: Do not check @busy, Max Reitz, 2021/01/13
[PATCH v2 6/8] iotests/129: Actually test a commit job, Max Reitz, 2021/01/13
[PATCH v2 7/8] iotests/129: Limit mirror job's buffer size, Max Reitz, 2021/01/13
[PATCH v2 5/8] iotests/129: Use throttle node, Max Reitz, 2021/01/13