Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/certbot/certbot.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Warren <bmw@users.noreply.github.com>2020-12-22 21:24:20 +0300
committerGitHub <noreply@github.com>2020-12-22 21:24:20 +0300
commitd3b82a4e8e2fe2ccf7d6bb6ed2d560d94a53eec6 (patch)
tree2868c8fd40c733909681798ef19253e38e38b2df /certbot-ci
parent18faf4f7aba0f1661c5e85e92b7096eb8dcccc3a (diff)
Fix test farm tests by using a local Pebble instance (#8561)test-everything
[As discussed in Mattermost](https://opensource.eff.org/eff-open-source/pl/yhtp4qu4zpfczm5wxmzxhndrto), our Apache test farm tests are failing because the CA certificate in the old version of boulder we have pinned expired over the weekend. This PR fixes that by running a local Pebble instance instead of an external boulder instance. * switch from external boulder to local pebble * add --http-01-port to run_acme_server
Diffstat (limited to 'certbot-ci')
-rwxr-xr-xcertbot-ci/certbot_integration_tests/utils/acme_server.py20
-rwxr-xr-xcertbot-ci/certbot_integration_tests/utils/certbot_call.py2
-rw-r--r--certbot-ci/certbot_integration_tests/utils/constants.py2
-rw-r--r--certbot-ci/certbot_integration_tests/utils/pebble_artifacts.py10
4 files changed, 23 insertions, 11 deletions
diff --git a/certbot-ci/certbot_integration_tests/utils/acme_server.py b/certbot-ci/certbot_integration_tests/utils/acme_server.py
index c20f624db..bbbdd196b 100755
--- a/certbot-ci/certbot_integration_tests/utils/acme_server.py
+++ b/certbot-ci/certbot_integration_tests/utils/acme_server.py
@@ -35,7 +35,8 @@ class ACMEServer(object):
ACMEServer is also a context manager, and so can be used to ensure ACME server is
started/stopped upon context enter/exit.
"""
- def __init__(self, acme_server, nodes, http_proxy=True, stdout=False, dns_server=None):
+ def __init__(self, acme_server, nodes, http_proxy=True, stdout=False,
+ dns_server=None, http_01_port=DEFAULT_HTTP_01_PORT):
"""
Create an ACMEServer instance.
:param str acme_server: the type of acme server used (boulder-v1, boulder-v2 or pebble)
@@ -43,6 +44,8 @@ class ACMEServer(object):
:param bool http_proxy: if False do not start the HTTP proxy
:param bool stdout: if True stream all subprocesses stdout to standard stdout
:param str dns_server: if set, Pebble/Boulder will use it to resolve domains
+ :param int http_01_port: port to use for http-01 validation; currently
+ only supported for pebble without an HTTP proxy
"""
self._construct_acme_xdist(acme_server, nodes)
@@ -52,6 +55,11 @@ class ACMEServer(object):
self._processes = [] # type: List[subprocess.Popen]
self._stdout = sys.stdout if stdout else open(os.devnull, 'w')
self._dns_server = dns_server
+ self._http_01_port = http_01_port
+ if http_01_port != DEFAULT_HTTP_01_PORT:
+ if self._acme_type != 'pebble' or self._proxy:
+ raise ValueError('setting http_01_port is not currently supported '
+ 'with boulder or the HTTP proxy')
def start(self):
"""Start the test stack"""
@@ -134,7 +142,8 @@ class ACMEServer(object):
def _prepare_pebble_server(self):
"""Configure and launch the Pebble server"""
print('=> Starting pebble instance deployment...')
- pebble_path, challtestsrv_path, pebble_config_path = pebble_artifacts.fetch(self._workspace)
+ pebble_artifacts_rv = pebble_artifacts.fetch(self._workspace, self._http_01_port)
+ pebble_path, challtestsrv_path, pebble_config_path = pebble_artifacts_rv
# Configure Pebble at full speed (PEBBLE_VA_NOSLEEP=1) and not randomly refusing valid
# nonce (PEBBLE_WFE_NONCEREJECT=0) to have a stable test environment.
@@ -223,7 +232,7 @@ class ACMEServer(object):
print('=> Configuring the HTTP proxy...')
mapping = {r'.+\.{0}\.wtf'.format(node): 'http://127.0.0.1:{0}'.format(port)
for node, port in self.acme_xdist['http_port'].items()}
- command = [sys.executable, proxy.__file__, str(HTTP_01_PORT), json.dumps(mapping)]
+ command = [sys.executable, proxy.__file__, str(DEFAULT_HTTP_01_PORT), json.dumps(mapping)]
self._launch_process(command)
print('=> Finished configuring the HTTP proxy.')
@@ -251,11 +260,14 @@ def main():
help='specify the DNS server as `IP:PORT` to use by '
'Pebble; if not specified, a local mock DNS server will be used to '
'resolve domains to localhost.')
+ parser.add_argument('--http-01-port', type=int, default=DEFAULT_HTTP_01_PORT,
+ help='specify the port to use for http-01 validation; '
+ 'this is currently only supported for Pebble.')
args = parser.parse_args()
acme_server = ACMEServer(
args.server_type, [], http_proxy=False, stdout=True,
- dns_server=args.dns_server
+ dns_server=args.dns_server, http_01_port=args.http_01_port,
)
try:
diff --git a/certbot-ci/certbot_integration_tests/utils/certbot_call.py b/certbot-ci/certbot_integration_tests/utils/certbot_call.py
index 28aae3227..c9e46cdc7 100755
--- a/certbot-ci/certbot_integration_tests/utils/certbot_call.py
+++ b/certbot-ci/certbot_integration_tests/utils/certbot_call.py
@@ -127,7 +127,7 @@ def main():
# Default config is pebble
directory_url = os.environ.get('SERVER', PEBBLE_DIRECTORY_URL)
- http_01_port = int(os.environ.get('HTTP_01_PORT', HTTP_01_PORT))
+ http_01_port = int(os.environ.get('HTTP_01_PORT', DEFAULT_HTTP_01_PORT))
tls_alpn_01_port = int(os.environ.get('TLS_ALPN_01_PORT', TLS_ALPN_01_PORT))
# Execution of certbot in a self-contained workspace
diff --git a/certbot-ci/certbot_integration_tests/utils/constants.py b/certbot-ci/certbot_integration_tests/utils/constants.py
index 81612ad53..b02c434db 100644
--- a/certbot-ci/certbot_integration_tests/utils/constants.py
+++ b/certbot-ci/certbot_integration_tests/utils/constants.py
@@ -1,5 +1,5 @@
"""Some useful constants to use throughout certbot-ci integration tests"""
-HTTP_01_PORT = 5002
+DEFAULT_HTTP_01_PORT = 5002
TLS_ALPN_01_PORT = 5001
CHALLTESTSRV_PORT = 8055
BOULDER_V1_DIRECTORY_URL = 'http://localhost:4000/directory'
diff --git a/certbot-ci/certbot_integration_tests/utils/pebble_artifacts.py b/certbot-ci/certbot_integration_tests/utils/pebble_artifacts.py
index 33ea6edcb..cd62e1a7f 100644
--- a/certbot-ci/certbot_integration_tests/utils/pebble_artifacts.py
+++ b/certbot-ci/certbot_integration_tests/utils/pebble_artifacts.py
@@ -7,19 +7,19 @@ import stat
import pkg_resources
import requests
-from certbot_integration_tests.utils.constants import MOCK_OCSP_SERVER_PORT
+from certbot_integration_tests.utils.constants import DEFAULT_HTTP_01_PORT, MOCK_OCSP_SERVER_PORT
PEBBLE_VERSION = 'v2.3.0'
ASSETS_PATH = pkg_resources.resource_filename('certbot_integration_tests', 'assets')
-def fetch(workspace):
+def fetch(workspace, http_01_port=DEFAULT_HTTP_01_PORT):
# pylint: disable=missing-function-docstring
suffix = 'linux-amd64' if os.name != 'nt' else 'windows-amd64.exe'
pebble_path = _fetch_asset('pebble', suffix)
challtestsrv_path = _fetch_asset('pebble-challtestsrv', suffix)
- pebble_config_path = _build_pebble_config(workspace)
+ pebble_config_path = _build_pebble_config(workspace, http_01_port)
return pebble_path, challtestsrv_path, pebble_config_path
@@ -38,7 +38,7 @@ def _fetch_asset(asset, suffix):
return asset_path
-def _build_pebble_config(workspace):
+def _build_pebble_config(workspace, http_01_port):
config_path = os.path.join(workspace, 'pebble-config.json')
with open(config_path, 'w') as file_h:
file_h.write(json.dumps({
@@ -47,7 +47,7 @@ def _build_pebble_config(workspace):
'managementListenAddress': '0.0.0.0:15000',
'certificate': os.path.join(ASSETS_PATH, 'cert.pem'),
'privateKey': os.path.join(ASSETS_PATH, 'key.pem'),
- 'httpPort': 5002,
+ 'httpPort': http_01_port,
'tlsPort': 5001,
'ocspResponderURL': 'http://127.0.0.1:{0}'.format(MOCK_OCSP_SERVER_PORT),
},