]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
tests: constrain http pytest to tests/http directory
authorJan Venekamp <1422460+jan2000@users.noreply.github.com>
Wed, 21 Aug 2024 17:54:19 +0000 (19:54 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 22 Aug 2024 09:47:10 +0000 (11:47 +0200)
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

.github/workflows/http3-linux.yml
.github/workflows/linux.yml
tests/Makefile.am
tests/conftest.py [deleted file]
tests/http/README.md
tests/http/conftest.py

index 65800ce01a98b74a66fcb41ac826b56a81b410cc..9baa7f8a364ff873ec0c4e708487d81f475aff08 100644 (file)
@@ -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 }}"
index 367abddc68ede8aa067f415e2179f6592c6e3265..2e672a8de480b8800a21c4d0f754d68b7c557f07 100644 (file)
@@ -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 }}"
index c81cfbe2c0336e2542ff41766a516e45c82ba845..178aefb6c4e64435683a9b9dab970ed694bd5777 100644 (file)
@@ -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 (file)
index b22a70d..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-#***************************************************************************
-#                                  _   _ ____  _
-#  Project                     ___| | | |  _ \| |
-#                             / __| | | | |_) | |
-#                            | (__| |_| |  _ <| |___
-#                             \___|\___/|_| \_\_____|
-#
-# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, 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))
index a5282adfa87464879c545a09e8309d243ef37e9a..7a0dc187acc3e449e828d640f663bf322157d16a 100644 (file)
@@ -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 <expr>` 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
index 3aca42e66fbe809f9d1b7f5fc3bbe7baee8d24c0..c5ac74544fc99e0465ea0828d5899c3ad2d4936e 100644 (file)
@@ -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)