1# This file is dual licensed under the terms of the Apache License, Version 2# 2.0, and the BSD License. See the LICENSE file in the root of this repository 3# for complete details. 4 5from __future__ import absolute_import, division, print_function 6 7import pytest 8 9from cryptography.hazmat.backends.openssl import backend as openssl_backend 10 11from .utils import ( 12 check_backend_support, 13 load_wycheproof_tests, 14) 15 16 17def pytest_report_header(config): 18 return "\n".join( 19 [ 20 "OpenSSL: {}".format(openssl_backend.openssl_version_text()), 21 "FIPS Enabled: {}".format(openssl_backend._fips_enabled), 22 ] 23 ) 24 25 26def pytest_addoption(parser): 27 parser.addoption("--wycheproof-root", default=None) 28 29 30def pytest_generate_tests(metafunc): 31 if "wycheproof" in metafunc.fixturenames: 32 wycheproof = metafunc.config.getoption("--wycheproof-root", skip=True) 33 34 testcases = [] 35 marker = metafunc.definition.get_closest_marker("wycheproof_tests") 36 for path in marker.args: 37 testcases.extend(load_wycheproof_tests(wycheproof, path)) 38 metafunc.parametrize("wycheproof", testcases) 39 40 41def pytest_runtest_setup(item): 42 if openssl_backend._fips_enabled: 43 for marker in item.iter_markers(name="skip_fips"): 44 pytest.skip(marker.kwargs["reason"]) 45 46 47@pytest.fixture() 48def backend(request): 49 required_interfaces = [ 50 mark.kwargs["interface"] 51 for mark in request.node.iter_markers("requires_backend_interface") 52 ] 53 if not all( 54 isinstance(openssl_backend, iface) for iface in required_interfaces 55 ): 56 pytest.skip( 57 "OpenSSL doesn't implement required interfaces: {}".format( 58 required_interfaces 59 ) 60 ) 61 62 check_backend_support(openssl_backend, request) 63 return openssl_backend 64