2017-08-31 03:45:31 -05:00
|
|
|
#!/usr/bin/python3
|
2013-05-22 04:08:10 -05:00
|
|
|
|
2013-05-24 05:17:51 -05:00
|
|
|
# Authors:
|
|
|
|
# Petr Viktorin <pviktori@redhat.com>
|
|
|
|
# Jason Gerard DeRose <jderose@redhat.com>
|
|
|
|
#
|
|
|
|
# Copyright (C) 2008-2013 Red Hat
|
|
|
|
# see file 'COPYING' for use and warranty information
|
|
|
|
#
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
|
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
|
|
# (at your option) any later version.
|
|
|
|
#
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
2014-10-13 07:34:53 -05:00
|
|
|
"""Pytest wrapper for running an installed (not in-tree) IPA test suite
|
2013-05-22 04:08:10 -05:00
|
|
|
|
2019-07-08 03:35:23 -05:00
|
|
|
Any command-line arguments are passed directly to pytest.
|
|
|
|
The current directory is changed to the location of the ipatests package,
|
|
|
|
so any relative paths given will be based on the ipatests module's path.
|
2013-05-22 04:08:10 -05:00
|
|
|
"""
|
|
|
|
|
|
|
|
import os
|
2014-10-13 07:34:53 -05:00
|
|
|
import sys
|
2013-05-22 04:08:10 -05:00
|
|
|
|
2014-10-13 07:34:53 -05:00
|
|
|
import pytest
|
2013-05-22 04:08:10 -05:00
|
|
|
|
2013-05-24 05:17:51 -05:00
|
|
|
import ipatests
|
2013-05-22 04:08:10 -05:00
|
|
|
|
2014-10-13 07:34:53 -05:00
|
|
|
# This is set to store --with-xunit report in an accessible place:
|
|
|
|
os.environ['IPATEST_XUNIT_PATH'] = os.path.join(os.getcwd(), 'nosetests.xml')
|
2013-06-05 06:06:33 -05:00
|
|
|
|
2017-01-03 11:04:53 -06:00
|
|
|
HERE = os.path.dirname(os.path.abspath(ipatests.__file__))
|
|
|
|
|
2019-07-08 03:35:23 -05:00
|
|
|
def has_option(option):
|
|
|
|
if option in sys.argv:
|
|
|
|
return True
|
|
|
|
for arg in sys.argv:
|
|
|
|
for argi in arg.split("="):
|
|
|
|
if option in argi:
|
|
|
|
return True
|
|
|
|
return False
|
|
|
|
|
|
|
|
# don't override specified command line options
|
|
|
|
if not has_option("confcutdir"):
|
|
|
|
sys.argv.insert(1, "--confcutdir={}".format(HERE))
|
|
|
|
# for backward compatibility
|
|
|
|
if not has_option("cache_dir"):
|
|
|
|
sys.argv[1:1] = ["-o", 'cache_dir={}'.format(os.path.join(os.getcwd(),
|
|
|
|
".pytest_cache"))]
|
2020-04-14 09:23:08 -05:00
|
|
|
# Pytest 5.2 deprecation: The default value of junit_family option will change
|
|
|
|
# to xunit2 in pytest 6.0. Current XML scheme is xunit1.
|
|
|
|
if not has_option("junit_family"):
|
|
|
|
sys.argv[1:1] = ["-o", 'junit_family=xunit1']
|
2019-07-08 03:35:23 -05:00
|
|
|
|
|
|
|
pyt_args = [sys.executable, "-c",
|
|
|
|
"import sys,pytest;sys.exit(pytest.main())"] + sys.argv[1:]
|
|
|
|
# shell is needed to perform globbing
|
|
|
|
sh_args = ["/bin/sh", "--norc", "--noprofile", "-c", "--"]
|
ipatests: Allow zero-length arguments
Currently, such arguments are eaten by 'ipa-run-tests' script as they
are not quoted.
For example, running ipa-run-tests -k ''
results in the actual invocation would be like as:
['/bin/sh',
'--norc',
'--noprofile',
'-c',
'--',
"/usr/bin/python3 -c 'import sys,pytest;sys.exit(pytest.main())' -o "
'cache_dir=/tmp/pytest-of-root/pytest-12/test_ipa_run_tests_empty_expression0/.pytest_cache '
'--confcutdir=/usr/lib64/python3/site-packages/ipatests -k ']
Note: expressions or marks could be empty as a result of the building
of command line args by more high-level tools, scripts, etc.
So, a short-termed solution is the quotting of zero-length arguments.
Fixes: https://pagure.io/freeipa/issue/8173
Signed-off-by: Stanislav Levin <slev@altlinux.org>
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
2020-01-22 03:09:36 -06:00
|
|
|
pyt_args_esc = [
|
|
|
|
f"'{x}'" if not x or " " in x else x
|
|
|
|
for x in pyt_args
|
|
|
|
]
|
2019-07-08 03:35:23 -05:00
|
|
|
args = sh_args + [" ".join(pyt_args_esc)]
|
|
|
|
os.chdir(HERE)
|
|
|
|
sys.stdout.flush()
|
|
|
|
os.execv(args[0], args)
|