| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- # -*- coding: utf-8 -*-
- try:
- from http.server import HTTPServer
- from http.server import SimpleHTTPRequestHandler
- except ImportError:
- from BaseHTTPServer import HTTPServer
- from SimpleHTTPServer import SimpleHTTPRequestHandler
- import ssl
- import tempfile
- import threading
- import pytest
- from requests.compat import urljoin
- def prepare_url(value):
- # Issue #1483: Make sure the URL always has a trailing slash
- httpbin_url = value.url.rstrip('/') + '/'
- def inner(*suffix):
- return urljoin(httpbin_url, '/'.join(suffix))
- return inner
- @pytest.fixture
- def httpbin(httpbin):
- return prepare_url(httpbin)
- @pytest.fixture
- def httpbin_secure(httpbin_secure):
- return prepare_url(httpbin_secure)
- @pytest.fixture
- def nosan_server(tmp_path_factory):
- # delay importing until the fixture in order to make it possible
- # to deselect the test via command-line when trustme is not available
- import trustme
- tmpdir = tmp_path_factory.mktemp("certs")
- ca = trustme.CA()
- # only commonName, no subjectAltName
- server_cert = ca.issue_cert(common_name=u"localhost")
- ca_bundle = str(tmpdir / "ca.pem")
- ca.cert_pem.write_to_path(ca_bundle)
- context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
- server_cert.configure_cert(context)
- server = HTTPServer(("localhost", 0), SimpleHTTPRequestHandler)
- server.socket = context.wrap_socket(server.socket, server_side=True)
- server_thread = threading.Thread(target=server.serve_forever)
- server_thread.start()
- yield "localhost", server.server_address[1], ca_bundle
- server.shutdown()
- server_thread.join()
|