Browse Source

Update run_tests.py environment variable names

Change-Id: I5f6ad7369f10df04f02aa96b22ab8236a0e060ef
changes/81/823781/8
Federico Ressi 5 months ago
parent
commit
2ac4100069
  1. 9
      Dockerfile
  2. 38
      docker-compose.yml
  3. 26
      tobiko/tests/conftest.py
  4. 110
      tools/run_tests.py
  5. 4
      tox.ini

9
Dockerfile

@ -31,7 +31,6 @@ FROM ${base_image} as base
ENV TOBIKO_DIR=/tobiko
ENV WHEEL_DIR=/wheel
ENV PACKAGES_DIR=/site_packages
ENV PYTHON=python${PYTHON_VERSION}
RUN ${INSTALL_PACKAGES} ${PYTHON}
@ -85,10 +84,10 @@ FROM source as test
# Run tests variables
ENV PYTHONWARNINGS=ignore::Warning
ENV OS_TEST_PATH=${TOBIKO_DIR}/tobiko/tests/unit
ENV TOX_REPORT_DIR=/report
ENV TOX_REPORT_NAME=tobiko_results
ENV TOBIKO_REPORT_DIR=/report
ENV TOBIKO_REPORT_NAME=tobiko_results
ENV TOBIKO_PREVENT_CREATE=false
ENV TOBIKO_TEST_PATH=${TOBIKO_DIR}/tobiko/tests/unit
RUN ${INSTALL_PACKAGES} iperf3 iputils nmap-ncat findutils procps
@ -103,7 +102,7 @@ ADD tools/ ${TOBIKO_DIR}/tools/
COPY --from=install /usr/local /usr/local/
WORKDIR ${TOBIKO_DIR}
CMD tools/run_tests.py ${OS_TEST_PATH}
CMD tools/run_tests.py ${TOBIKO_TEST_PATH}
FROM test as linters

38
docker-compose.yml

@ -8,12 +8,12 @@ services:
target: test
hostname: tobiko
environment:
OS_TEST_PATH: tobiko/tests/unit
TOX_REPORT_NAME: tobiko_results_py3
TOBIKO_TEST_PATH: tobiko/tests/unit
TOBIKO_REPORT_NAME: tobiko_results_py3
volumes:
- ./report:/report
- .:/tobiko
- ~/.ssh:/root/.ssh
- ~/.ssh:/root/.ssh:ro
lower-constraints:
extends:
@ -22,7 +22,7 @@ services:
args:
base_image: lower-constraints
environment:
TOX_REPORT_NAME: tobiko_results_lower_constraints
TOBIKO_REPORT_NAME: tobiko_results_lower_constraints
py39:
extends:
@ -31,7 +31,7 @@ services:
args:
base_image: py39
environment:
TOX_REPORT_NAME: tobiko_results_py39
TOBIKO_REPORT_NAME: tobiko_results_py39
py310:
extends:
@ -40,7 +40,7 @@ services:
args:
base_image: py310
environment:
TOX_REPORT_NAME: tobiko_results_py310
TOBIKO_REPORT_NAME: tobiko_results_py310
linters:
extends:
@ -52,36 +52,36 @@ services:
extends:
service: py3
environment:
OS_TEST_PATH: tobiko/tests/functional
TOX_REPORT_NAME: tobiko_results_functional
TOBIKO_TEST_PATH: tobiko/tests/functional
TOBIKO_REPORT_NAME: tobiko_results_functional
create-workloads:
extends:
service: py3
environment:
OS_TEST_PATH: tobiko/tests/scenario
TOX_REPORT_NAME: tobiko_results_create_workloads
TOBIKO_TEST_PATH: tobiko/tests/scenario
TOBIKO_REPORT_NAME: tobiko_results_create_workloads
disrupt-services:
extends:
service: py3
environment:
OS_TEST_PATH: tobiko/tests/faults
TOX_REPORT_NAME: tobiko_results_disrupt_services
TOBIKO_TEST_PATH: tobiko/tests/faults
TOBIKO_REPORT_NAME: tobiko_results_disrupt_services
verify-workloads:
extends:
service: create-workloads
environment:
PREVENT_CREATE: 'true'
TOX_REPORT_NAME: tobiko_results_verify_workloads
TOBIKO_PREVENT_CREATE: 'true'
TOBIKO_REPORT_NAME: tobiko_results_verify_workloads
verify-services:
extends:
service: py3
environment:
OS_TEST_PATH: tobiko/tests/sanity
TOX_REPORT_NAME: tobiko_results_verify_services
TOBIKO_TEST_PATH: tobiko/tests/sanity
TOBIKO_REPORT_NAME: tobiko_results_verify_services
infrared:
build:
@ -92,6 +92,6 @@ services:
IR_EXTRA_ARGS: --tobiko-src-dir /tobiko
volumes:
- ./report:/report
- .:/tobiko
- ./infrared_plugin:/tobiko-infrared
- ~/.ssh:/root/.ssh
- .:/tobiko:ro
- ./infrared_plugin:/tobiko-infrared:ro
- ~/.ssh:/root/.ssh:ro

26
tobiko/tests/conftest.py

@ -36,15 +36,23 @@ TOP_DIR = normalize_path(
os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
TOX_REPORT_NAME = os.environ.get('TOX_REPORT_NAME', "tobiko_results")
# Output dirs
REPORT_DIR = os.path.realpath(os.path.expanduser(
os.environ.get('TOBIKO_TEST_PATH') or
os.environ.get('TOX_REPORT_DIR') or
os.getcwd()))
TOX_REPORT_DIR = normalize_path(
os.environ.get('TOX_REPORT_DIR', os.path.join(TOP_DIR, 'report')))
REPORT_NAME = (
os.environ.get('TOBIKO_REPORT_NAME') or
os.environ.get('TOX_REPORT_NAME') or
'tobiko_results')
TOX_REPORT_PREFIX = os.path.join(TOX_REPORT_DIR, TOX_REPORT_NAME)
REPORT_PREFIX = os.path.join(REPORT_DIR, REPORT_NAME)
TOX_REPORT_HTML = os.environ.get(
'TOX_REPORT_HTML', TOX_REPORT_PREFIX + '.html')
REPORT_HTML = (
os.environ.get('TOBIKO_REPORT_HTML') or
os.environ.get('TOX_REPORT_HTML') or
REPORT_PREFIX + '.html')
@pytest.hookimpl
@ -101,14 +109,14 @@ def configure_caplog(config):
def configure_junitxml(config):
config.inicfg['junit_suite_name'] = TOX_REPORT_NAME
config.inicfg['junit_suite_name'] = REPORT_NAME
def configure_html(config):
if config.pluginmanager.hasplugin('html'):
htmlpath = config.getoption('htmlpath')
if htmlpath is None:
config.option.htmlpath = TOX_REPORT_HTML
config.option.htmlpath = REPORT_HTML
htmlpath = config.getoption('htmlpath')
assert htmlpath is not None
@ -211,7 +219,7 @@ def pytest_runtest_makereport(item, call):
def pytest_html_report_title(report):
report.title = f"Tobiko test results ({TOX_REPORT_NAME})"
report.title = f"Tobiko test results ({REPORT_NAME})"
@pytest.hookimpl(hookwrapper=True)

110
tools/run_tests.py

@ -30,34 +30,63 @@ from tools import common # noqa
LOG = common.get_logger(__name__)
# Root tests dir
OS_TEST_PATH = common.normalize_path(
TEST_PATH = common.normalize_path(
os.environ.get('TOBIKO_TEST_PATH') or
os.environ.get('OS_TEST_PATH') or
os.path.join(TOP_DIR, 'tobiko', 'tests', 'unit'))
# Output dirs
TOX_REPORT_DIR = common.normalize_path(
os.environ.get('TOX_REPORT_DIR', os.getcwd()))
TOX_REPORT_NAME = os.environ.get('TOX_REPORT_NAME', 'tobiko_results')
TOX_REPORT_PREFIX = os.path.join(TOX_REPORT_DIR, TOX_REPORT_NAME)
TOX_REPORT_LOG = os.environ.get(
'TOX_REPORT_LOG', TOX_REPORT_PREFIX + '.log')
TOX_REPORT_HTML = os.environ.get(
'TOX_REPORT_HTML', TOX_REPORT_PREFIX + '.html')
TOX_REPORT_XML = os.environ.get(
'TOX_REPORT_XML', TOX_REPORT_PREFIX + '.xml')
TOX_NUM_PROCESSES = os.environ.get('TOX_NUM_PROCESSES') or 'auto'
TOX_RUN_TESTS_TIMEOUT = float(os.environ.get('TOX_RUN_TESTS_TIMEOUT') or 0.)
TOX_RERUNS = int(os.environ.get('TOX_RERUNS') or 0)
TOX_RERUNS_DELAY = int(os.environ.get('TOX_RERUNS_DELAY') or 5)
TOX_COVER = bool(os.environ.get('TOX_COVER', 'false').lower() in ['1', 'yes', 'true'])
REPORT_DIR = common.normalize_path(
os.environ.get('TOBIKO_REPORT_DIR') or
os.environ.get('TOX_REPORT_DIR') or
os.getcwd())
REPORT_NAME = (
os.environ.get('TOBIKO_REPORT_NAME') or
os.environ.get('TOX_REPORT_NAME') or
'tobiko_results')
REPORT_PREFIX = os.path.join(REPORT_DIR, REPORT_NAME)
REPORT_LOG = (
os.environ.get('TOBIKO_REPORT_LOG') or
os.environ.get('TOX_REPORT_LOG') or
REPORT_PREFIX + '.log')
REPORT_HTML = (
os.environ.get('TOBIKO_REPORT_HTML') or
os.environ.get('TOX_REPORT_HTML') or
REPORT_PREFIX + '.html')
REPORT_XML = (
os.environ.get('TOBIKO_REPORT_XML') or
os.environ.get('TOX_REPORT_XML') or
REPORT_PREFIX + '.xml')
NUM_PROCESSES = (
os.environ.get('TOBIKO_NUM_PROCESSES') or
os.environ.get('TOX_NUM_PROCESSES') or
'auto')
RUN_TESTS_TIMEOUT = float(
os.environ.get('TOBIKO_RUN_TESTS_TIMEOUT') or
os.environ.get('TOX_RUN_TESTS_TIMEOUT') or
0.)
RERUNS = int(
os.environ.get('TOBIKO_RERUNS') or
os.environ.get('TOX_RERUNS') or
0)
RERUNS_DELAY = int(
os.environ.get('TOBIKO_RERUNS_DELAY') or
os.environ.get('TOX_RERUNS_DELAY') or
5)
COVER = (
os.environ.get('TOBIKO_COVER') or
os.environ.get('TOX_COVER') or
'false') in ['1', 'yes', 'true']
def main():
@ -95,19 +124,19 @@ def run_tests():
def setup_timeout():
if TOX_RUN_TESTS_TIMEOUT > 0.:
if RUN_TESTS_TIMEOUT > 0.:
def handle_timeout(_signum, _frame):
LOG.error(
f"run_tests.py timeout out after {TOX_RUN_TESTS_TIMEOUT} "
f"run_tests.py timeout out after {RUN_TESTS_TIMEOUT} "
"seconds")
terminate_childs()
raise subprocess.TimeoutExpired("run_tests.py",
TOX_RUN_TESTS_TIMEOUT)
RUN_TESTS_TIMEOUT)
signal.setitimer(signal.ITIMER_REAL, TOX_RUN_TESTS_TIMEOUT)
signal.setitimer(signal.ITIMER_REAL, RUN_TESTS_TIMEOUT)
signal.signal(signal.SIGALRM, handle_timeout)
LOG.debug(f'Run tests timeout set as {TOX_RUN_TESTS_TIMEOUT} seconds')
LOG.debug(f'Run tests timeout set as {RUN_TESTS_TIMEOUT} seconds')
def terminate_childs():
@ -123,36 +152,37 @@ def terminate_childs():
def cleanup_report_dir():
for report_file in [TOX_REPORT_LOG, TOX_REPORT_HTML, TOX_REPORT_XML]:
for report_file in [REPORT_LOG, REPORT_HTML, REPORT_XML]:
if not common.make_dir(os.path.dirname(report_file)):
common.remove_file(report_file)
def log_environ():
common.execute('env | sort >> "{log_file}"', log_file=TOX_REPORT_LOG,
common.execute('env | sort >> "{log_file}"',
log_file=REPORT_LOG,
capture_stdout=False)
def run_test_cases():
xdist_options = ''
if TOX_NUM_PROCESSES != '1':
xdist_options = f"--numprocesses '{TOX_NUM_PROCESSES}' --dist loadscope"
if NUM_PROCESSES != '1':
xdist_options = f"--numprocesses '{NUM_PROCESSES}' --dist loadscope"
rerun_options = ''
if TOX_RERUNS:
rerun_options = f"--reruns '{TOX_RERUNS}' --reruns-delay '{TOX_RERUNS_DELAY}'"
if RERUNS:
rerun_options = f"--reruns '{RERUNS}' --reruns-delay '{RERUNS_DELAY}'"
cover_options = ''
if TOX_COVER:
if COVER:
cover_options = f"--cov=tobiko"
# Pass environment variables to pytest command
environ = dict(os.environ, TOX_REPORT_NAME=TOX_REPORT_NAME)
environ = dict(os.environ, TOBIKO_REPORT_NAME=REPORT_NAME)
common.execute("pytest -v "
f"{xdist_options} "
f"{rerun_options} "
f"{cover_options} "
f"--log-file={TOX_REPORT_LOG} "
f"--junitxml={TOX_REPORT_XML} "
f"--html={TOX_REPORT_HTML} --self-contained-html "
f"--log-file={REPORT_LOG} "
f"--junitxml={REPORT_XML} "
f"--html={REPORT_HTML} --self-contained-html "
f"{common.get_posargs()}",
environ=environ,
capture_stdout=False)

4
tox.ini

@ -56,10 +56,10 @@ setenv =
TOX_COVER = true
TOX_COVER_DIR={env:TOX_COVER_DIR:{toxinidir}/cover}
commands =
{[testenv]commands}
commands_post =
coverage html -d "{env:TOX_COVER_DIR}"
coverage xml -o "{env:TOX_COVER_DIR}/coverage.xml"
whitelist_externals =
find

Loading…
Cancel
Save