From: Jan Venekamp <1422460+jan2000@users.noreply.github.com> Date: Wed, 21 Aug 2024 17:54:19 +0000 (+0200) Subject: tests: constrain http pytest to tests/http directory X-Git-Tag: curl-8_10_0~159 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a4152864f8118b9017ecb125dcffda266e4053e1;p=thirdparty%2Fcurl.git tests: constrain http pytest to tests/http directory Running the http pytest had to be done from tests directory or above, because the repeat argument fixture was defined in tests/conftest.py. However, the repeat argument is not needed because its functionality can be provided by pytest-repeat as documented in the test's README.md. So, removed the pytest_addoption function for the repeat argument and the pytest_report_header function is moved to tests/http/conftest.py. TODO: Remove repeat argument from all tests. As a stopgap, a one-element list is defined for it for now. Closes #14611 --- diff --git a/.github/workflows/http3-linux.yml b/.github/workflows/http3-linux.yml index 65800ce01a..9baa7f8a36 100644 --- a/.github/workflows/http3-linux.yml +++ b/.github/workflows/http3-linux.yml @@ -470,7 +470,7 @@ jobs: env: TFLAGS: "${{ matrix.build.tflags }}" - - run: pytest -v tests + - run: pytest -v tests/http name: 'run pytest' env: TFLAGS: "${{ matrix.build.tflags }}" diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 367abddc68..2e672a8de4 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -487,10 +487,10 @@ jobs: make V=1 VERBOSE=1 test-ci - if: contains(matrix.build.install_steps, 'pytest') - # run for `tests` directory, so pytest does not pick up any other + # run for `tests/http` directory, so pytest does not pick up any other # packages we might have built here run: - pytest -v tests + pytest -v tests/http name: 'run pytest' env: TFLAGS: "${{ matrix.build.tflags }}" diff --git a/tests/Makefile.am b/tests/Makefile.am index c81cfbe2c0..178aefb6c4 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -59,7 +59,6 @@ EXTRA_DIST = \ README.md \ appveyor.pm \ azure.pm \ - conftest.py \ devtest.pl \ dictserver.py \ directories.pm \ diff --git a/tests/conftest.py b/tests/conftest.py deleted file mode 100644 index b22a70d358..0000000000 --- a/tests/conftest.py +++ /dev/null @@ -1,64 +0,0 @@ -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### -# -import sys, os - -sys.path.append(os.path.join(os.path.dirname(__file__), 'http')) - -from testenv import Env - - -def pytest_report_header(config): - # Env inits its base properties only once, we can report them here - env = Env() - report = [ - f'Testing curl {env.curl_version()}', - f' httpd: {env.httpd_version()}, http:{env.http_port} https:{env.https_port}', - f' httpd-proxy: {env.httpd_version()}, http:{env.proxy_port} https:{env.proxys_port}' - ] - if env.have_h3(): - report.extend([ - f' nghttpx: {env.nghttpx_version()}, h3:{env.https_port}' - ]) - if env.has_caddy(): - report.extend([ - f' Caddy: {env.caddy_version()}, http:{env.caddy_http_port} https:{env.caddy_https_port}' - ]) - if env.has_vsftpd(): - report.extend([ - f' VsFTPD: {env.vsftpd_version()}, ftp:{env.ftp_port}, ftps:{env.ftps_port}' - ]) - return '\n'.join(report) - - -def pytest_addoption(parser): - parser.addoption("--repeat", action="store", type=int, default=1, - help='Number of times to repeat each test') - - -def pytest_generate_tests(metafunc): - if "repeat" in metafunc.fixturenames: - count = int(metafunc.config.getoption("repeat")) - metafunc.fixturenames.append('tmp_ct') - metafunc.parametrize('repeat', range(count)) diff --git a/tests/http/README.md b/tests/http/README.md index a5282adfa8..7a0dc187ac 100644 --- a/tests/http/README.md +++ b/tests/http/README.md @@ -13,7 +13,7 @@ This is an additional test suite using a combination of Apache httpd and nghttpx The test cases and necessary files are in `tests/http`. You can invoke `pytest` from there or from the top level curl checkout and it will find all tests. ``` -curl> pytest +curl> pytest test/http platform darwin -- Python 3.9.15, pytest-6.2.0, py-1.10.0, pluggy-0.13.1 rootdir: /Users/sei/projects/curl collected 5 items @@ -24,7 +24,7 @@ tests/http/test_01_basic.py ..... Pytest takes arguments. `-v` increases its verbosity and can be used several times. `-k ` can be used to run only matching test cases. The `expr` can be something resembling a python test or just a string that needs to match test cases in their names. ``` -curl> pytest -vv -k test_01_02 +curl/tests/http> pytest -vv -k test_01_02 ``` runs all test cases that have `test_01_02` in their name. This does not have to be the start of the name. @@ -54,10 +54,10 @@ Via curl's `configure` script you may specify: Several test cases are parameterized, for example with the HTTP version to use. If you want to run a test with a particular protocol only, use a command line like: ``` -curl> pytest -k "test_02_06 and h2" +curl/tests/http> pytest -k "test_02_06 and h2" ``` -Several test cases can be repeated, they all have the `repeat` parameter (install `pytest-repeat` module). To make this work, you have to start `pytest` in the test directory itself (for some unknown reason). Like in: +Test cases can be repeated, with the `pytest-repeat` module (`pip install pytest-repeat`). Like in: ``` curl/tests/http> pytest -k "test_02_06 and h2" --count=100 diff --git a/tests/http/conftest.py b/tests/http/conftest.py index 3aca42e66f..c5ac74544f 100644 --- a/tests/http/conftest.py +++ b/tests/http/conftest.py @@ -33,6 +33,33 @@ sys.path.append(os.path.join(os.path.dirname(__file__), '.')) from testenv import Env, Nghttpx, Httpd, NghttpxQuic, NghttpxFwd +def pytest_report_header(config): + # Env inits its base properties only once, we can report them here + env = Env() + report = [ + f'Testing curl {env.curl_version()}', + f' httpd: {env.httpd_version()}, http:{env.http_port} https:{env.https_port}', + f' httpd-proxy: {env.httpd_version()}, http:{env.proxy_port} https:{env.proxys_port}' + ] + if env.have_h3(): + report.extend([ + f' nghttpx: {env.nghttpx_version()}, h3:{env.https_port}' + ]) + if env.has_caddy(): + report.extend([ + f' Caddy: {env.caddy_version()}, http:{env.caddy_http_port} https:{env.caddy_https_port}' + ]) + if env.has_vsftpd(): + report.extend([ + f' VsFTPD: {env.vsftpd_version()}, ftp:{env.ftp_port}, ftps:{env.ftps_port}' + ]) + return '\n'.join(report) + +# TODO: remove this and repeat argument everywhere, pytest-repeat can be used to repeat tests +def pytest_generate_tests(metafunc): + if "repeat" in metafunc.fixturenames: + metafunc.parametrize('repeat', [0]) + @pytest.fixture(scope="package") def env(pytestconfig) -> Env: env = Env(pytestconfig=pytestconfig)