# This file is dual licensed under the terms of the Apache License, Version # 2.0, and the BSD License. See the LICENSE file in the root of this repository # for complete details. import contextlib import pytest from cryptography.hazmat.backends.openssl import backend as openssl_backend from .utils import check_backend_support def pytest_configure(config): if config.getoption("--enable-fips"): openssl_backend._enable_fips() def pytest_report_header(config): return "\n".join( [ f"OpenSSL: {openssl_backend.openssl_version_text()}", f"FIPS Enabled: {openssl_backend._fips_enabled}", ] ) def pytest_addoption(parser): parser.addoption("--wycheproof-root", default=None) parser.addoption("--enable-fips", default=False) def pytest_runtest_setup(item): if openssl_backend._fips_enabled: for marker in item.iter_markers(name="skip_fips"): pytest.skip(marker.kwargs["reason"]) @pytest.fixture() def backend(request): check_backend_support(openssl_backend, request) # Ensure the error stack is clear before the test errors = openssl_backend._consume_errors() assert not errors yield openssl_backend # Ensure the error stack is clear after the test errors = openssl_backend._consume_errors() assert not errors @pytest.fixture() def subtests(): # This is a miniature version of the pytest-subtests package, but # optimized for lower overhead. # # When tests are skipped, these are not logged in the final pytest output. yield SubTests() class SubTests: @contextlib.contextmanager def test(self): try: yield except pytest.skip.Exception: pass