#*************************************************************************** # _ _ ____ _ # 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 logging import os import sys from typing import Optional import pytest sys.path.append(os.path.join(os.path.dirname(__file__), '.')) from testenv import Env, Nghttpx, Httpd, NghttpxQuic, NghttpxFwd @pytest.fixture(scope="package") def env(pytestconfig) -> Env: env = Env(pytestconfig=pytestconfig) level = logging.DEBUG if env.verbose > 0 else logging.INFO logging.getLogger('').setLevel(level=level) if not env.curl_has_protocol('http'): pytest.skip("curl built without HTTP support") if not env.curl_has_protocol('https'): pytest.skip("curl built without HTTPS support") if env.setup_incomplete(): pytest.skip(env.incomplete_reason()) env.setup() if not env.make_clients(): pytest.exit(1) return env @pytest.fixture(scope="package", autouse=True) def log_global_env_facts(record_testsuite_property, env): record_testsuite_property("http-port", env.http_port) @pytest.fixture(scope='package') def httpd(env) -> Httpd: httpd = Httpd(env=env) if not httpd.exists(): pytest.skip(f'httpd not found: {env.httpd}') httpd.clear_logs() if not httpd.start(): pytest.fail(f'failed to start httpd: {env.httpd}') yield httpd httpd.stop() @pytest.fixture(scope='package') def nghttpx(env, httpd) -> Optional[Nghttpx]: nghttpx = NghttpxQuic(env=env) if env.have_h3(): nghttpx.clear_logs() assert nghttpx.start() yield nghttpx nghttpx.stop() @pytest.fixture(scope='package') def nghttpx_fwd(env, httpd) -> Optional[Nghttpx]: nghttpx = NghttpxFwd(env=env) if env.have_h3(): nghttpx.clear_logs() assert nghttpx.start() yield nghttpx nghttpx.stop()