From 3e05ce27b2d54976de489df6ec5a7a5430a291c8 Mon Sep 17 00:00:00 2001 From: Will Greenberg Date: Thu, 11 Dec 2025 12:35:47 -0800 Subject: [PATCH] Mass rename of certbot_nginx paths --- .../certbot/_internal/nginx/configurator.py | 34 +++---- .../certbot/_internal/nginx/display_ops.py | 2 +- .../src/certbot/_internal/nginx/http_01.py | 8 +- certbot/src/certbot/_internal/nginx/parser.py | 20 ++--- .../nginx/tests/configurator_test.py | 88 +++++++++---------- .../_internal/nginx/tests/display_ops_test.py | 10 +-- .../_internal/nginx/tests/http_01_test.py | 26 +++--- .../_internal/nginx/tests/nginxparser_test.py | 16 ++-- .../certbot/_internal/nginx/tests/obj_test.py | 26 +++--- .../_internal/nginx/tests/parser_obj_test.py | 32 +++---- .../_internal/nginx/tests/parser_test.py | 22 ++--- .../_internal/nginx/tests/test_util.py | 10 +-- 12 files changed, 147 insertions(+), 147 deletions(-) diff --git a/certbot/src/certbot/_internal/nginx/configurator.py b/certbot/src/certbot/_internal/nginx/configurator.py index 185ed0280..41af899d6 100644 --- a/certbot/src/certbot/_internal/nginx/configurator.py +++ b/certbot/src/certbot/_internal/nginx/configurator.py @@ -25,12 +25,12 @@ from certbot import util from certbot.compat import os from certbot.display import util as display_util from certbot.plugins import common -from certbot_nginx._internal import constants -from certbot_nginx._internal import display_ops -from certbot_nginx._internal import http_01 -from certbot_nginx._internal import nginxparser -from certbot_nginx._internal import obj -from certbot_nginx._internal import parser +from certbot._internal.nginx import constants +from certbot._internal.nginx import display_ops +from certbot._internal.nginx import http_01 +from certbot._internal.nginx import nginxparser +from certbot._internal.nginx import obj +from certbot._internal.nginx import parser NAME_RANK = 0 START_WILDCARD_RANK = 1 @@ -52,7 +52,7 @@ class NginxConfigurator(common.Configurator): :type config: certbot.configuration.NamespaceConfig :ivar parser: Handles low level parsing - :type parser: :class:`~certbot_nginx._internal.parser` + :type parser: :class:`~certbot._internal.nginx.parser` :ivar str save_notes: Human-readable config change notes @@ -173,8 +173,8 @@ class NginxConfigurator(common.Configurator): file_manager = ExitStack() atexit.register(file_manager.close) - ref = (importlib.resources.files("certbot_nginx").joinpath("_internal") - .joinpath("tls_configs").joinpath(config_filename)) + ref = (importlib.resources.files("certbot").joinpath("_internal") + .joinpath("nginx").joinpath("tls_configs").joinpath(config_filename)) return str(file_manager.enter_context(importlib.resources.as_file(ref))) @@ -348,7 +348,7 @@ class NginxConfigurator(common.Configurator): :param str target_name: domain name :returns: ssl vhosts associated with name - :rtype: list of :class:`~certbot_nginx._internal.obj.VirtualHost` + :rtype: list of :class:`~certbot._internal.nginx.obj.VirtualHost` """ return [vhost for vhost in self._choose_vhosts_common(target_name) if vhost.ssl] @@ -369,7 +369,7 @@ class NginxConfigurator(common.Configurator): :param str fullchain_path: certificates to use when creating SSL vhosts :returns: ssl vhosts associated with name - :rtype: list of :class:`~certbot_nginx._internal.obj.VirtualHost` + :rtype: list of :class:`~certbot._internal.nginx.obj.VirtualHost` """ vhosts = self._choose_vhosts_common(target_name) @@ -478,7 +478,7 @@ class NginxConfigurator(common.Configurator): :param list matches: list of dicts containing the vhost, the matching name, and the numerical rank :returns: the most matching vhost - :rtype: :class:`~certbot_nginx._internal.obj.VirtualHost` + :rtype: :class:`~certbot._internal.nginx.obj.VirtualHost` """ if not matches: @@ -564,7 +564,7 @@ class NginxConfigurator(common.Configurator): :param str port: port number :returns: vhosts associated with name - :rtype: list of :class:`~certbot_nginx._internal.obj.VirtualHost` + :rtype: list of :class:`~certbot._internal.nginx.obj.VirtualHost` """ if util.is_wildcard_domain(target_name): @@ -586,7 +586,7 @@ class NginxConfigurator(common.Configurator): :param str target_name: non-wildcard domain name :returns: tuple of HTTP and HTTPS virtualhosts - :rtype: tuple of :class:`~certbot_nginx._internal.obj.VirtualHost` + :rtype: tuple of :class:`~certbot._internal.nginx.obj.VirtualHost` """ vhosts = [m['vhost'] for m in self._get_ranked_matches(target_name) if m and 'vhost' in m] @@ -712,7 +712,7 @@ class NginxConfigurator(common.Configurator): Make a server SSL by adding new listen and SSL directives. :param vhost: The vhost to add SSL to. - :type vhost: :class:`~certbot_nginx._internal.obj.VirtualHost` + :type vhost: :class:`~certbot._internal.nginx.obj.VirtualHost` :param str key_path: key to use for SSL :param str fullchain_path: certificates to use for SSL @@ -868,9 +868,9 @@ class NginxConfigurator(common.Configurator): :param vhost: The server block to break up into two. :param list only_directives: If this exists, only duplicate these directives when splitting the block. - :type vhost: :class:`~certbot_nginx._internal.obj.VirtualHost` + :type vhost: :class:`~certbot._internal.nginx.obj.VirtualHost` :returns: tuple (http_vhost, https_vhost) - :rtype: tuple of type :class:`~certbot_nginx._internal.obj.VirtualHost` + :rtype: tuple of type :class:`~certbot._internal.nginx.obj.VirtualHost` """ http_vhost = self.parser.duplicate_vhost(vhost, only_directives=only_directives) diff --git a/certbot/src/certbot/_internal/nginx/display_ops.py b/certbot/src/certbot/_internal/nginx/display_ops.py index 1efb75e7f..4dbdc5218 100644 --- a/certbot/src/certbot/_internal/nginx/display_ops.py +++ b/certbot/src/certbot/_internal/nginx/display_ops.py @@ -4,7 +4,7 @@ from typing import Iterable from typing import Optional from certbot.display import util as display_util -from certbot_nginx._internal.obj import VirtualHost +from certbot._internal.nginx.obj import VirtualHost logger = logging.getLogger(__name__) diff --git a/certbot/src/certbot/_internal/nginx/http_01.py b/certbot/src/certbot/_internal/nginx/http_01.py index ce2ee3a17..8566e2a43 100644 --- a/certbot/src/certbot/_internal/nginx/http_01.py +++ b/certbot/src/certbot/_internal/nginx/http_01.py @@ -11,11 +11,11 @@ from certbot import errors from certbot.achallenges import KeyAuthorizationAnnotatedChallenge from certbot.compat import os from certbot.plugins import common -from certbot_nginx._internal import nginxparser -from certbot_nginx._internal.obj import Addr +from certbot._internal.nginx import nginxparser +from certbot._internal.nginx.obj import Addr if TYPE_CHECKING: - from certbot_nginx._internal.configurator import NginxConfigurator + from certbot._internal.nginx.configurator import NginxConfigurator logger = logging.getLogger(__name__) @@ -146,7 +146,7 @@ class NginxHttp01(common.ChallengePerformer): def _default_listen_addresses(self) -> list[Addr]: """Finds addresses for a challenge block to listen on. - :returns: list of :class:`certbot_nginx._internal.obj.Addr` to apply + :returns: list of :class:`certbot._internal.nginx.obj.Addr` to apply :rtype: list """ addresses: list[Addr] = [] diff --git a/certbot/src/certbot/_internal/nginx/parser.py b/certbot/src/certbot/_internal/nginx/parser.py index eb5b67636..cbaeded7f 100644 --- a/certbot/src/certbot/_internal/nginx/parser.py +++ b/certbot/src/certbot/_internal/nginx/parser.py @@ -18,9 +18,9 @@ import pyparsing from certbot import errors from certbot.compat import os -from certbot_nginx._internal import nginxparser -from certbot_nginx._internal import obj -from certbot_nginx._internal.nginxparser import UnspacedList +from certbot._internal.nginx import nginxparser +from certbot._internal.nginx import obj +from certbot._internal.nginx.nginxparser import UnspacedList logger = logging.getLogger(__name__) @@ -145,7 +145,7 @@ class NginxParser: Technically this is a misnomer because Nginx does not have virtual hosts, it has 'server blocks'. - :returns: List of :class:`~certbot_nginx._internal.obj.VirtualHost` + :returns: List of :class:`~certbot._internal.nginx.obj.VirtualHost` objects found in configuration :rtype: list @@ -286,7 +286,7 @@ class NginxParser: def has_ssl_on_directive(self, vhost: obj.VirtualHost) -> bool: """Does vhost have ssl on for all ports? - :param :class:`~certbot_nginx._internal.obj.VirtualHost` vhost: The vhost in question + :param :class:`~certbot._internal.nginx.obj.VirtualHost` vhost: The vhost in question :returns: True if 'ssl on' directive is included :rtype: bool @@ -313,7 +313,7 @@ class NginxParser: ..todo :: Doesn't match server blocks whose server_name directives are split across multiple conf files. - :param :class:`~certbot_nginx._internal.obj.VirtualHost` vhost: The vhost + :param :class:`~certbot._internal.nginx.obj.VirtualHost` vhost: The vhost whose information we use to match on :param list directives: The directives to add :param bool insert_at_top: True if the directives need to be inserted at the top @@ -336,7 +336,7 @@ class NginxParser: ..todo :: Doesn't match server blocks whose server_name directives are split across multiple conf files. - :param :class:`~certbot_nginx._internal.obj.VirtualHost` vhost: The vhost + :param :class:`~certbot._internal.nginx.obj.VirtualHost` vhost: The vhost whose information we use to match on :param list directives: The directives to add :param bool insert_at_top: True if the directives need to be inserted at the top @@ -350,7 +350,7 @@ class NginxParser: match_func: Optional[Callable[[Any], bool]] = None) -> None: """Remove all directives of type directive_name. - :param :class:`~certbot_nginx._internal.obj.VirtualHost` vhost: The vhost + :param :class:`~certbot._internal.nginx.obj.VirtualHost` vhost: The vhost to remove directives from :param string directive_name: The directive type to remove :param callable match_func: Function of the directive that returns true for directives @@ -389,7 +389,7 @@ class NginxParser: only_directives: Optional[list[Any]] = None) -> obj.VirtualHost: """Duplicate the vhost in the configuration files. - :param :class:`~certbot_nginx._internal.obj.VirtualHost` vhost_template: The vhost + :param :class:`~certbot._internal.nginx.obj.VirtualHost` vhost_template: The vhost whose information we copy :param bool remove_singleton_listen_params: If we should remove parameters from listen directives in the block that can only be used once per address @@ -397,7 +397,7 @@ class NginxParser: looks at first level of depth; does not expand includes. :returns: A vhost object for the newly created vhost - :rtype: :class:`~certbot_nginx._internal.obj.VirtualHost` + :rtype: :class:`~certbot._internal.nginx.obj.VirtualHost` """ # TODO: https://github.com/certbot/certbot/issues/5185 # put it in the same file as the template, at the same level diff --git a/certbot/src/certbot/_internal/nginx/tests/configurator_test.py b/certbot/src/certbot/_internal/nginx/tests/configurator_test.py index 9eec8c38f..85a59c267 100644 --- a/certbot/src/certbot/_internal/nginx/tests/configurator_test.py +++ b/certbot/src/certbot/_internal/nginx/tests/configurator_test.py @@ -1,4 +1,4 @@ -"""Test for certbot_nginx._internal.configurator.""" +"""Test for certbot._internal.nginx.configurator.""" import sys from unittest import mock @@ -11,11 +11,11 @@ from certbot import crypto_util from certbot import errors from certbot.compat import os from certbot.tests import util as certbot_test_util -from certbot_nginx._internal import obj -from certbot_nginx._internal import parser -from certbot_nginx._internal.configurator import _redirect_block_for_domain -from certbot_nginx._internal.nginxparser import UnspacedList -from certbot_nginx._internal.tests import test_util as util +from certbot._internal.nginx import obj +from certbot._internal.nginx import parser +from certbot._internal.nginx.configurator import _redirect_block_for_domain +from certbot._internal.nginx.nginxparser import UnspacedList +from certbot._internal.nginx.tests import test_util as util class NginxConfiguratorTest(util.NginxTest): @@ -27,11 +27,11 @@ class NginxConfiguratorTest(util.NginxTest): self.config = self.get_nginx_configurator( self.config_path, self.config_dir, self.work_dir, self.logs_dir) - patch = mock.patch('certbot_nginx._internal.configurator.display_util.notify') + patch = mock.patch('certbot._internal.nginx.configurator.display_util.notify') self.mock_notify = patch.start() self.addCleanup(patch.stop) - @mock.patch("certbot_nginx._internal.configurator.util.exe_exists") + @mock.patch("certbot._internal.nginx.configurator.util.exe_exists") def test_prepare_no_install(self, mock_exe_exists): mock_exe_exists.return_value = False with pytest.raises(errors.NoInstallationError): @@ -41,8 +41,8 @@ class NginxConfiguratorTest(util.NginxTest): assert (1, 6, 2) == self.config.version assert 16 == len(self.config.parser.parsed) - @mock.patch("certbot_nginx._internal.configurator.util.exe_exists") - @mock.patch("certbot_nginx._internal.configurator.subprocess.run") + @mock.patch("certbot._internal.nginx.configurator.util.exe_exists") + @mock.patch("certbot._internal.nginx.configurator.subprocess.run") def test_prepare_initializes_version(self, mock_run, mock_exe_exists): mock_run.return_value.stdout = "" mock_run.return_value.stderr = "\n".join( @@ -76,7 +76,7 @@ class NginxConfiguratorTest(util.NginxTest): self.config.config_test = mock.Mock() certbot_test_util.lock_and_call(self._test_prepare_locked, server_root) - @mock.patch("certbot_nginx._internal.configurator.util.exe_exists") + @mock.patch("certbot._internal.nginx.configurator.util.exe_exists") def _test_prepare_locked(self, unused_exe_exists): try: self.config.prepare() @@ -87,8 +87,8 @@ class NginxConfiguratorTest(util.NginxTest): else: # pragma: no cover self.fail("Exception wasn't raised!") - @mock.patch("certbot_nginx._internal.configurator.socket.gethostname") - @mock.patch("certbot_nginx._internal.configurator.socket.gethostbyaddr") + @mock.patch("certbot._internal.nginx.configurator.socket.gethostname") + @mock.patch("certbot._internal.nginx.configurator.socket.gethostbyaddr") def test_get_all_names(self, mock_gethostbyaddr, mock_gethostname): mock_gethostbyaddr.return_value = ('155.225.50.69.nephoscale.net', [], []) mock_gethostname.return_value = ('example.net') @@ -268,7 +268,7 @@ class NginxConfiguratorTest(util.NginxTest): "example/chain.pem", None) - @mock.patch('certbot_nginx._internal.parser.NginxParser.update_or_add_server_directives') + @mock.patch('certbot._internal.nginx.parser.NginxParser.update_or_add_server_directives') def test_deploy_cert_raise_on_add_error(self, mock_update_or_add_server_directives): mock_update_or_add_server_directives.side_effect = errors.MisconfigurationError() with pytest.raises(errors.PluginError): @@ -364,9 +364,9 @@ class NginxConfiguratorTest(util.NginxTest): ]] == \ parsed_migration_conf[0] - @mock.patch("certbot_nginx._internal.configurator.http_01.NginxHttp01.perform") - @mock.patch("certbot_nginx._internal.configurator.NginxConfigurator.restart") - @mock.patch("certbot_nginx._internal.configurator.NginxConfigurator.revert_challenge_config") + @mock.patch("certbot._internal.nginx.configurator.http_01.NginxHttp01.perform") + @mock.patch("certbot._internal.nginx.configurator.NginxConfigurator.restart") + @mock.patch("certbot._internal.nginx.configurator.NginxConfigurator.revert_challenge_config") def test_perform_and_cleanup(self, mock_revert, mock_restart, mock_http_perform): # Only tests functionality specific to configurator.perform # Note: As more challenges are offered this will have to be expanded @@ -394,7 +394,7 @@ class NginxConfiguratorTest(util.NginxTest): assert mock_revert.call_count == 1 assert mock_restart.call_count == 2 - @mock.patch("certbot_nginx._internal.configurator.subprocess.run") + @mock.patch("certbot._internal.nginx.configurator.subprocess.run") def test_get_version(self, mock_run): mock_run.return_value.stdout = "" mock_run.return_value.stderr = "\n".join( @@ -455,7 +455,7 @@ class NginxConfiguratorTest(util.NginxTest): with pytest.raises(errors.PluginError): self.config.get_version() - @mock.patch("certbot_nginx._internal.configurator.subprocess.run") + @mock.patch("certbot._internal.nginx.configurator.subprocess.run") def test_get_openssl_version(self, mock_run): # pylint: disable=protected-access mock_run.return_value.stdout = "" @@ -517,8 +517,8 @@ class NginxConfiguratorTest(util.NginxTest): """ assert self.config._get_openssl_version() == "" - @mock.patch("certbot_nginx._internal.configurator.subprocess.run") - @mock.patch("certbot_nginx._internal.configurator.time") + @mock.patch("certbot._internal.nginx.configurator.subprocess.run") + @mock.patch("certbot._internal.nginx.configurator.time") def test_nginx_restart(self, mock_time, mock_run): mocked = mock_run.return_value mocked.stdout = '' @@ -528,8 +528,8 @@ class NginxConfiguratorTest(util.NginxTest): assert mock_run.call_count == 1 mock_time.sleep.assert_called_once_with(0.1234) - @mock.patch("certbot_nginx._internal.configurator.subprocess.run") - @mock.patch("certbot_nginx._internal.configurator.logger.debug") + @mock.patch("certbot._internal.nginx.configurator.subprocess.run") + @mock.patch("certbot._internal.nginx.configurator.logger.debug") def test_nginx_restart_fail(self, mock_log_debug, mock_run): mocked = mock_run.return_value mocked.stdout = '' @@ -540,7 +540,7 @@ class NginxConfiguratorTest(util.NginxTest): assert mock_run.call_count == 2 mock_log_debug.assert_called_once_with("nginx reload failed:\n%s", "") - @mock.patch("certbot_nginx._internal.configurator.subprocess.run") + @mock.patch("certbot._internal.nginx.configurator.subprocess.run") def test_no_nginx_start(self, mock_run): mock_run.side_effect = OSError("Can't find program") with pytest.raises(errors.MisconfigurationError): @@ -687,20 +687,20 @@ class NginxConfiguratorTest(util.NginxTest): self.config.enhance("migration.com", "ensure-http-header", "Strict-Transport-Security") - @mock.patch('certbot_nginx._internal.obj.VirtualHost.contains_list') + @mock.patch('certbot._internal.nginx.obj.VirtualHost.contains_list') def test_certbot_redirect_exists(self, mock_contains_list): # Test that we add no redirect statement if there is already a # redirect in the block that is managed by certbot # Has a certbot redirect mock_contains_list.return_value = True - with mock.patch("certbot_nginx._internal.configurator.logger") as mock_logger: + with mock.patch("certbot._internal.nginx.configurator.logger") as mock_logger: self.config.enhance("www.example.com", "redirect") assert mock_logger.info.call_args[0][0] == \ "Traffic on port %s already redirecting to ssl in %s" def test_redirect_dont_enhance(self): # Test that we don't accidentally add redirect to ssl-only block - with mock.patch("certbot_nginx._internal.configurator.logger") as mock_logger: + with mock.patch("certbot._internal.nginx.configurator.logger") as mock_logger: self.config.enhance("geese.com", "redirect") assert mock_logger.info.call_args[0][0] == \ 'No matching insecure server blocks listening on port %s found.' @@ -895,7 +895,7 @@ class NginxConfiguratorTest(util.NginxTest): assert util.contains_at_depth(generated_conf, expected, 2) @mock.patch('certbot.reverter.logger') - @mock.patch('certbot_nginx._internal.parser.NginxParser.load') + @mock.patch('certbot._internal.nginx.parser.NginxParser.load') def test_parser_reload_after_config_changes(self, mock_parser_load, unused_mock_logger): self.config.recovery_routine() self.config.revert_challenge_config() @@ -904,7 +904,7 @@ class NginxConfiguratorTest(util.NginxTest): def test_choose_vhosts_wildcard(self): # pylint: disable=protected-access - mock_path = "certbot_nginx._internal.display_ops.select_vhost_multiple" + mock_path = "certbot._internal.nginx.display_ops.select_vhost_multiple" with mock.patch(mock_path) as mock_select_vhs: vhost = [x for x in self.config.parser.get_vhosts() if 'summer.com' in x.names][0] @@ -920,7 +920,7 @@ class NginxConfiguratorTest(util.NginxTest): def test_choose_vhosts_wildcard_redirect(self): # pylint: disable=protected-access - mock_path = "certbot_nginx._internal.display_ops.select_vhost_multiple" + mock_path = "certbot._internal.nginx.display_ops.select_vhost_multiple" with mock.patch(mock_path) as mock_select_vhs: vhost = [x for x in self.config.parser.get_vhosts() if 'summer.com' in x.names][0] @@ -941,7 +941,7 @@ class NginxConfiguratorTest(util.NginxTest): if 'geese.com' in x.names][0] mock_choose_vhosts.return_value = [vhost] self.config._choose_vhosts_wildcard = mock_choose_vhosts - mock_d = "certbot_nginx._internal.configurator.NginxConfigurator._deploy_cert" + mock_d = "certbot._internal.nginx.configurator.NginxConfigurator._deploy_cert" with mock.patch(mock_d) as mock_dep: self.config.deploy_cert("*.com", "/tmp/path", "/tmp/path", "/tmp/path", "/tmp/path") @@ -949,7 +949,7 @@ class NginxConfiguratorTest(util.NginxTest): assert len(mock_dep.call_args_list) == 1 assert vhost == mock_dep.call_args_list[0][0][0] - @mock.patch("certbot_nginx._internal.display_ops.select_vhost_multiple") + @mock.patch("certbot._internal.nginx.display_ops.select_vhost_multiple") def test_deploy_cert_wildcard_no_vhosts(self, mock_dialog): # pylint: disable=protected-access mock_dialog.return_value = [] @@ -957,7 +957,7 @@ class NginxConfiguratorTest(util.NginxTest): self.config.deploy_cert("*.wild.cat", "/tmp/path", "/tmp/path", "/tmp/path", "/tmp/path") - @mock.patch("certbot_nginx._internal.display_ops.select_vhost_multiple") + @mock.patch("certbot._internal.nginx.display_ops.select_vhost_multiple") def test_enhance_wildcard_ocsp_after_install(self, mock_dialog): # pylint: disable=protected-access vhost = [x for x in self.config.parser.get_vhosts() @@ -966,7 +966,7 @@ class NginxConfiguratorTest(util.NginxTest): self.config.enhance("*.com", "staple-ocsp", "example/chain.pem") assert not mock_dialog.called - @mock.patch("certbot_nginx._internal.display_ops.select_vhost_multiple") + @mock.patch("certbot._internal.nginx.display_ops.select_vhost_multiple") def test_enhance_wildcard_redirect_or_ocsp_no_install(self, mock_dialog): # we need to select an SSL enabled vhost here for the OCSP stapling # enhancement @@ -976,7 +976,7 @@ class NginxConfiguratorTest(util.NginxTest): self.config.enhance("*.com", "staple-ocsp", "example/chain.pem") assert mock_dialog.called is True - @mock.patch("certbot_nginx._internal.display_ops.select_vhost_multiple") + @mock.patch("certbot._internal.nginx.display_ops.select_vhost_multiple") def test_enhance_wildcard_double_redirect(self, mock_dialog): # pylint: disable=protected-access vhost = [x for x in self.config.parser.get_vhosts() @@ -987,7 +987,7 @@ class NginxConfiguratorTest(util.NginxTest): def test_choose_vhosts_wildcard_no_ssl_filter_port(self): # pylint: disable=protected-access - mock_path = "certbot_nginx._internal.display_ops.select_vhost_multiple" + mock_path = "certbot._internal.nginx.display_ops.select_vhost_multiple" with mock.patch(mock_path) as mock_select_vhs: mock_select_vhs.return_value = [] self.config._choose_vhosts_wildcard("*.com", @@ -1055,14 +1055,14 @@ class InstallSslOptionsConfTest(util.NginxTest): return _hash def test_prev_file_updates_to_current(self): - from certbot_nginx._internal.constants import ALL_SSL_OPTIONS_HASHES + from certbot._internal.nginx.constants import ALL_SSL_OPTIONS_HASHES with mock.patch('certbot.crypto_util.sha256sum', new=self._mock_hash_except_ssl_conf_src(ALL_SSL_OPTIONS_HASHES[0])): self._call() self._assert_current_file() def test_prev_file_updates_to_current_old_nginx(self): - from certbot_nginx._internal.constants import ALL_SSL_OPTIONS_HASHES + from certbot._internal.nginx.constants import ALL_SSL_OPTIONS_HASHES self.config.version = (1, 5, 8) with mock.patch('certbot.crypto_util.sha256sum', new=self._mock_hash_except_ssl_conf_src(ALL_SSL_OPTIONS_HASHES[0])): @@ -1099,7 +1099,7 @@ class InstallSslOptionsConfTest(util.NginxTest): assert not mock_logger.warning.called def test_current_file_hash_in_all_hashes(self): - from certbot_nginx._internal.constants import ALL_SSL_OPTIONS_HASHES + from certbot._internal.nginx.constants import ALL_SSL_OPTIONS_HASHES assert self._current_ssl_options_hash() in ALL_SSL_OPTIONS_HASHES, \ "Constants.ALL_SSL_OPTIONS_HASHES must be appended" \ " with the sha256 hash of self.config.mod_ssl_conf when it is updated." @@ -1113,10 +1113,10 @@ class InstallSslOptionsConfTest(util.NginxTest): """ import importlib.resources - from certbot_nginx._internal.constants import ALL_SSL_OPTIONS_HASHES + from certbot._internal.nginx.constants import ALL_SSL_OPTIONS_HASHES - tls_configs_ref = importlib.resources.files("certbot_nginx").joinpath( - "_internal", "tls_configs") + tls_configs_ref = importlib.resources.files("certbot").joinpath( + "_internal", "nginx", "tls_configs") with importlib.resources.as_file(tls_configs_ref) as tls_configs_dir: for tls_config_file in os.listdir(tls_configs_dir): file_hash = crypto_util.sha256sum(os.path.join(tls_configs_dir, tls_config_file)) @@ -1149,10 +1149,10 @@ class InstallSslOptionsConfTest(util.NginxTest): class DetermineDefaultServerRootTest(certbot_test_util.ConfigTestCase): - """Tests for certbot_nginx._internal.configurator._determine_default_server_root.""" + """Tests for certbot._internal.nginx.configurator._determine_default_server_root.""" def _call(self): - from certbot_nginx._internal.configurator import _determine_default_server_root + from certbot._internal.nginx.configurator import _determine_default_server_root return _determine_default_server_root() @mock.patch.dict(os.environ, {"CERTBOT_DOCS": "1"}) diff --git a/certbot/src/certbot/_internal/nginx/tests/display_ops_test.py b/certbot/src/certbot/_internal/nginx/tests/display_ops_test.py index 4d1256b0d..dae7c32e0 100644 --- a/certbot/src/certbot/_internal/nginx/tests/display_ops_test.py +++ b/certbot/src/certbot/_internal/nginx/tests/display_ops_test.py @@ -1,17 +1,17 @@ -"""Test certbot_nginx._internal.display_ops.""" +"""Test certbot._internal.nginx.display_ops.""" import sys import pytest from certbot.display import util as display_util from certbot.tests import util as certbot_util -from certbot_nginx._internal import parser -from certbot_nginx._internal.display_ops import select_vhost_multiple -from certbot_nginx._internal.tests import test_util as util +from certbot._internal.nginx import parser +from certbot._internal.nginx.display_ops import select_vhost_multiple +from certbot._internal.nginx.tests import test_util as util class SelectVhostMultiTest(util.NginxTest): - """Tests for certbot_nginx._internal.display_ops.select_vhost_multiple.""" + """Tests for certbot._internal.nginx.display_ops.select_vhost_multiple.""" def setUp(self): super().setUp() diff --git a/certbot/src/certbot/_internal/nginx/tests/http_01_test.py b/certbot/src/certbot/_internal/nginx/tests/http_01_test.py index c06edb3dd..d7afa86e4 100644 --- a/certbot/src/certbot/_internal/nginx/tests/http_01_test.py +++ b/certbot/src/certbot/_internal/nginx/tests/http_01_test.py @@ -1,4 +1,4 @@ -"""Tests for certbot_nginx._internal.http_01""" +"""Tests for certbot._internal.nginx.http_01""" import sys from unittest import mock @@ -9,8 +9,8 @@ from acme import challenges, messages from certbot import achallenges from certbot.tests import acme_util from certbot.tests import util as test_util -from certbot_nginx._internal.obj import Addr -from certbot_nginx._internal.tests import test_util as util +from certbot._internal.nginx.obj import Addr +from certbot._internal.nginx.tests import test_util as util AUTH_KEY = jose.JWKRSA.load(test_util.load_vector("rsa512_key.pem")) @@ -59,14 +59,14 @@ class HttpPerformTest(util.NginxTest): config = self.get_nginx_configurator( self.config_path, self.config_dir, self.work_dir, self.logs_dir) - from certbot_nginx._internal import http_01 + from certbot._internal.nginx import http_01 self.http01 = http_01.NginxHttp01(config) def test_perform0(self): responses = self.http01.perform() assert [] == responses - @mock.patch("certbot_nginx._internal.configurator.NginxConfigurator.save") + @mock.patch("certbot._internal.nginx.configurator.NginxConfigurator.save") def test_perform1(self, mock_save): self.http01.add_chall(self.achalls[0]) response = self.achalls[0].response(self.account_key) @@ -112,7 +112,7 @@ class HttpPerformTest(util.NginxTest): # self.assertEqual(vhost.addrs, set(v_addr2_print)) # self.assertEqual(vhost.names, set([response.z_domain.decode('ascii')])) - @mock.patch('certbot_nginx._internal.parser.NginxParser.add_server_directives') + @mock.patch('certbot._internal.nginx.parser.NginxParser.add_server_directives') def test_mod_config_http_and_https(self, mock_add_server_directives): """A server_name with both HTTP and HTTPS vhosts should get modded in both vhosts""" self.configuration.https_port = 443 @@ -123,8 +123,8 @@ class HttpPerformTest(util.NginxTest): # 2 * 'rewrite' + 2 * 'return 200 keyauthz' = 4 assert mock_add_server_directives.call_count == 4 - @mock.patch('certbot_nginx._internal.parser.nginxparser.dump') - @mock.patch('certbot_nginx._internal.parser.NginxParser.add_server_directives') + @mock.patch('certbot._internal.nginx.parser.nginxparser.dump') + @mock.patch('certbot._internal.nginx.parser.NginxParser.add_server_directives') def test_mod_config_only_https(self, mock_add_server_directives, mock_dump): """A server_name with only an HTTPS vhost should get modded""" self.http01.add_chall(self.achalls[4]) # ipv6ssl.com @@ -136,7 +136,7 @@ class HttpPerformTest(util.NginxTest): # should have been created and written to the challenge conf file assert mock_dump.call_args[0][0] != [] - @mock.patch('certbot_nginx._internal.parser.NginxParser.add_server_directives') + @mock.patch('certbot._internal.nginx.parser.NginxParser.add_server_directives') def test_mod_config_deduplicate(self, mock_add_server_directives): """A vhost that appears in both HTTP and HTTPS vhosts only gets modded once""" achall = achallenges.KeyAuthorizationAnnotatedChallenge( @@ -198,7 +198,7 @@ class HttpPerformTest(util.NginxTest): f.write(original_example_com) self.http01.configurator.parser.load() - @mock.patch("certbot_nginx._internal.configurator.NginxConfigurator.ipv6_info") + @mock.patch("certbot._internal.nginx.configurator.NginxConfigurator.ipv6_info") def test_default_listen_addresses_no_memoization(self, ipv6_info): # pylint: disable=protected-access ipv6_info.return_value = (True, True) @@ -208,7 +208,7 @@ class HttpPerformTest(util.NginxTest): self.http01._default_listen_addresses() assert ipv6_info.call_count == 2 - @mock.patch("certbot_nginx._internal.configurator.NginxConfigurator.ipv6_info") + @mock.patch("certbot._internal.nginx.configurator.NginxConfigurator.ipv6_info") def test_default_listen_addresses_t_t(self, ipv6_info): # pylint: disable=protected-access ipv6_info.return_value = (True, True) @@ -217,7 +217,7 @@ class HttpPerformTest(util.NginxTest): http_ipv6_addr = Addr.fromstring("[::]:80") assert addrs == [http_addr, http_ipv6_addr] - @mock.patch("certbot_nginx._internal.configurator.NginxConfigurator.ipv6_info") + @mock.patch("certbot._internal.nginx.configurator.NginxConfigurator.ipv6_info") def test_default_listen_addresses_t_f(self, ipv6_info): # pylint: disable=protected-access ipv6_info.return_value = (True, False) @@ -226,7 +226,7 @@ class HttpPerformTest(util.NginxTest): http_ipv6_addr = Addr.fromstring("[::]:80 ipv6only=on") assert addrs == [http_addr, http_ipv6_addr] - @mock.patch("certbot_nginx._internal.configurator.NginxConfigurator.ipv6_info") + @mock.patch("certbot._internal.nginx.configurator.NginxConfigurator.ipv6_info") def test_default_listen_addresses_f_f(self, ipv6_info): # pylint: disable=protected-access ipv6_info.return_value = (False, False) diff --git a/certbot/src/certbot/_internal/nginx/tests/nginxparser_test.py b/certbot/src/certbot/_internal/nginx/tests/nginxparser_test.py index 764634832..b68ac66fa 100644 --- a/certbot/src/certbot/_internal/nginx/tests/nginxparser_test.py +++ b/certbot/src/certbot/_internal/nginx/tests/nginxparser_test.py @@ -1,4 +1,4 @@ -"""Test for certbot_nginx._internal.nginxparser.""" +"""Test for certbot._internal.nginx.nginxparser.""" import copy import operator import sys @@ -8,13 +8,13 @@ import unittest from pyparsing import ParseException import pytest -from certbot_nginx._internal.nginxparser import dump -from certbot_nginx._internal.nginxparser import dumps -from certbot_nginx._internal.nginxparser import load -from certbot_nginx._internal.nginxparser import loads -from certbot_nginx._internal.nginxparser import RawNginxParser -from certbot_nginx._internal.nginxparser import UnspacedList -from certbot_nginx._internal.tests import test_util as util +from certbot._internal.nginx.nginxparser import dump +from certbot._internal.nginx.nginxparser import dumps +from certbot._internal.nginx.nginxparser import load +from certbot._internal.nginx.nginxparser import loads +from certbot._internal.nginx.nginxparser import RawNginxParser +from certbot._internal.nginx.nginxparser import UnspacedList +from certbot._internal.nginx.tests import test_util as util FIRST = operator.itemgetter(0) diff --git a/certbot/src/certbot/_internal/nginx/tests/obj_test.py b/certbot/src/certbot/_internal/nginx/tests/obj_test.py index 9dd56aaa4..1295a200c 100644 --- a/certbot/src/certbot/_internal/nginx/tests/obj_test.py +++ b/certbot/src/certbot/_internal/nginx/tests/obj_test.py @@ -1,4 +1,4 @@ -"""Test the helper objects in certbot_nginx._internal.obj.""" +"""Test the helper objects in certbot._internal.nginx.obj.""" import itertools import sys import unittest @@ -9,7 +9,7 @@ import pytest class AddrTest(unittest.TestCase): """Test the Addr class.""" def setUp(self): - from certbot_nginx._internal.obj import Addr + from certbot._internal.nginx.obj import Addr self.addr1 = Addr.fromstring("192.168.1.1") self.addr2 = Addr.fromstring("192.168.1.1:* ssl") self.addr3 = Addr.fromstring("192.168.1.1:80") @@ -52,7 +52,7 @@ class AddrTest(unittest.TestCase): assert self.addr7.default is True def test_fromstring_socket(self): - from certbot_nginx._internal.obj import Addr, SocketAddrError + from certbot._internal.nginx.obj import Addr, SocketAddrError socket_string = r"unix:/var/run/nginx.sock" with pytest.raises(SocketAddrError, match=socket_string): Addr.fromstring(socket_string) @@ -77,14 +77,14 @@ class AddrTest(unittest.TestCase): assert self.addr6.to_string(include_default=False) == "80" def test_eq(self): - from certbot_nginx._internal.obj import Addr + from certbot._internal.nginx.obj import Addr new_addr1 = Addr.fromstring("192.168.1.1 spdy") assert self.addr1 == new_addr1 assert self.addr1 != self.addr2 assert self.addr1 != 3333 def test_equivalent_any_addresses(self): - from certbot_nginx._internal.obj import Addr + from certbot._internal.nginx.obj import Addr any_addresses = ("0.0.0.0:80 default_server ssl", "80 default_server ssl", "*:80 default_server ssl", @@ -102,7 +102,7 @@ class AddrTest(unittest.TestCase): Addr.fromstring(any_address) def test_set_inclusion(self): - from certbot_nginx._internal.obj import Addr + from certbot._internal.nginx.obj import Addr set_a = {self.addr1, self.addr2} addr1b = Addr.fromstring("192.168.1.1") addr2b = Addr.fromstring("192.168.1.1:* ssl") @@ -114,8 +114,8 @@ class AddrTest(unittest.TestCase): class VirtualHostTest(unittest.TestCase): """Test the VirtualHost class.""" def setUp(self): - from certbot_nginx._internal.obj import Addr - from certbot_nginx._internal.obj import VirtualHost + from certbot._internal.nginx.obj import Addr + from certbot._internal.nginx.obj import VirtualHost raw1 = [ ['listen', '69.50.225.155:9000'], [['if', '($scheme', '!=', '"https") '], @@ -164,8 +164,8 @@ class VirtualHostTest(unittest.TestCase): {'localhost'}, raw_has_hsts, []) def test_eq(self): - from certbot_nginx._internal.obj import Addr - from certbot_nginx._internal.obj import VirtualHost + from certbot._internal.nginx.obj import Addr + from certbot._internal.nginx.obj import VirtualHost vhost1b = VirtualHost( "filep", {Addr.fromstring("localhost blah")}, False, False, @@ -188,9 +188,9 @@ class VirtualHostTest(unittest.TestCase): assert self.vhost1.has_header('Bogus-Header') is False def test_contains_list(self): - from certbot_nginx._internal.configurator import _test_block_from_block - from certbot_nginx._internal.obj import Addr - from certbot_nginx._internal.obj import VirtualHost + from certbot._internal.nginx.configurator import _test_block_from_block + from certbot._internal.nginx.obj import Addr + from certbot._internal.nginx.obj import VirtualHost test_block = [ ['\n ', 'return', ' ', '301', ' ', 'https://$host$request_uri'], ['\n'] diff --git a/certbot/src/certbot/_internal/nginx/tests/parser_obj_test.py b/certbot/src/certbot/_internal/nginx/tests/parser_obj_test.py index 05bc86dbc..fa7d8c0b2 100644 --- a/certbot/src/certbot/_internal/nginx/tests/parser_obj_test.py +++ b/certbot/src/certbot/_internal/nginx/tests/parser_obj_test.py @@ -9,19 +9,19 @@ from unittest import mock import pytest -from certbot_nginx._internal.parser_obj import COMMENT_BLOCK -from certbot_nginx._internal.parser_obj import parse_raw +from certbot._internal.nginx.parser_obj import COMMENT_BLOCK +from certbot._internal.nginx.parser_obj import parse_raw class CommentHelpersTest(unittest.TestCase): def test_is_comment(self): - from certbot_nginx._internal.parser_obj import _is_comment + from certbot._internal.nginx.parser_obj import _is_comment assert _is_comment(parse_raw(['#'])) assert _is_comment(parse_raw(['#', ' literally anything else'])) assert not _is_comment(parse_raw(['not', 'even', 'a', 'comment'])) def test_is_certbot_comment(self): - from certbot_nginx._internal.parser_obj import _is_certbot_comment + from certbot._internal.nginx.parser_obj import _is_certbot_comment assert _is_certbot_comment( parse_raw(COMMENT_BLOCK)) assert not _is_certbot_comment( @@ -32,8 +32,8 @@ class CommentHelpersTest(unittest.TestCase): parse_raw(['not', 'even', 'a', 'comment'])) def test_certbot_comment(self): - from certbot_nginx._internal.parser_obj import _certbot_comment - from certbot_nginx._internal.parser_obj import _is_certbot_comment + from certbot._internal.nginx.parser_obj import _certbot_comment + from certbot._internal.nginx.parser_obj import _is_certbot_comment comment = _certbot_comment(None) assert _is_certbot_comment(comment) assert comment.dump() == COMMENT_BLOCK @@ -43,7 +43,7 @@ class CommentHelpersTest(unittest.TestCase): class ParsingHooksTest(unittest.TestCase): def test_is_sentence(self): - from certbot_nginx._internal.parser_obj import Sentence + from certbot._internal.nginx.parser_obj import Sentence assert not Sentence.should_parse([]) assert Sentence.should_parse(['']) assert Sentence.should_parse(['word']) @@ -52,7 +52,7 @@ class ParsingHooksTest(unittest.TestCase): assert not Sentence.should_parse(['word', []]) def test_is_block(self): - from certbot_nginx._internal.parser_obj import Block + from certbot._internal.nginx.parser_obj import Block assert not Block.should_parse([]) assert not Block.should_parse(['']) assert not Block.should_parse(['two', 'words']) @@ -64,7 +64,7 @@ class ParsingHooksTest(unittest.TestCase): assert Block.should_parse([['block_name'], [['many'], ['statements'], 'here']]) assert Block.should_parse([['if', ' ', '(whatever)'], ['hi']]) - @mock.patch("certbot_nginx._internal.parser_obj.Parsable.parsing_hooks") + @mock.patch("certbot._internal.nginx.parser_obj.Parsable.parsing_hooks") def test_parse_raw(self, parsing_hooks): fake_parser1 = mock.Mock() fake_parser1.should_parse = lambda x: True @@ -82,7 +82,7 @@ class ParsingHooksTest(unittest.TestCase): fake_parser1().parse.assert_not_called() fake_parser2().parse.assert_called_once() - @mock.patch("certbot_nginx._internal.parser_obj.Parsable.parsing_hooks") + @mock.patch("certbot._internal.nginx.parser_obj.Parsable.parsing_hooks") def test_parse_raw_no_match(self, parsing_hooks): from certbot import errors fake_parser1 = mock.Mock() @@ -94,7 +94,7 @@ class ParsingHooksTest(unittest.TestCase): with pytest.raises(errors.MisconfigurationError): parse_raw([]) - @mock.patch("certbot_nginx._internal.parser_obj.Parsable.parsing_hooks") + @mock.patch("certbot._internal.nginx.parser_obj.Parsable.parsing_hooks") def test_parse_raw_passes_add_spaces(self, parsing_hooks): fake_parser1 = mock.Mock() fake_parser1.should_parse = lambda x: True @@ -107,7 +107,7 @@ class ParsingHooksTest(unittest.TestCase): class SentenceTest(unittest.TestCase): def setUp(self): - from certbot_nginx._internal.parser_obj import Sentence + from certbot._internal.nginx.parser_obj import Sentence self.sentence = Sentence(None) def test_parse_bad_sentence_raises_error(self): @@ -157,7 +157,7 @@ class SentenceTest(unittest.TestCase): class BlockTest(unittest.TestCase): def setUp(self): - from certbot_nginx._internal.parser_obj import Block + from certbot._internal.nginx.parser_obj import Block self.bloc = Block(None) self.name = ['server', 'name'] self.contents = [['thing', '1'], ['thing', '2'], ['another', 'one']] @@ -173,8 +173,8 @@ class BlockTest(unittest.TestCase): def test_iterate_match(self): # can match on contents while expanded - from certbot_nginx._internal.parser_obj import Block - from certbot_nginx._internal.parser_obj import Sentence + from certbot._internal.nginx.parser_obj import Block + from certbot._internal.nginx.parser_obj import Sentence expected = [['thing', '1'], ['thing', '2']] for i, elem in enumerate(self.bloc.iterate(expanded=True, match=lambda x: isinstance(x, Sentence) and 'thing' in x.words)): @@ -216,7 +216,7 @@ class BlockTest(unittest.TestCase): class StatementsTest(unittest.TestCase): def setUp(self): - from certbot_nginx._internal.parser_obj import Statements + from certbot._internal.nginx.parser_obj import Statements self.statements = Statements(None) self.raw = [ ['sentence', 'one'], diff --git a/certbot/src/certbot/_internal/nginx/tests/parser_test.py b/certbot/src/certbot/_internal/nginx/tests/parser_test.py index 1e398717c..2becd6a84 100644 --- a/certbot/src/certbot/_internal/nginx/tests/parser_test.py +++ b/certbot/src/certbot/_internal/nginx/tests/parser_test.py @@ -1,4 +1,4 @@ -"""Tests for certbot_nginx._internal.parser.""" +"""Tests for certbot._internal.nginx.parser.""" import glob import re import shutil @@ -8,10 +8,10 @@ import pytest from certbot import errors from certbot.compat import os -from certbot_nginx._internal import nginxparser -from certbot_nginx._internal import obj -from certbot_nginx._internal import parser -from certbot_nginx._internal.tests import test_util as util +from certbot._internal.nginx import nginxparser +from certbot._internal.nginx import obj +from certbot._internal.nginx import parser +from certbot._internal.nginx.tests import test_util as util class NginxParserTest(util.NginxTest): @@ -264,7 +264,7 @@ class NginxParserTest(util.NginxTest): [['foo', 'bar'], ['ssl_certificate', '/etc/ssl/cert2.pem']]) nparser.add_server_directives(mock_vhost, [['foo', 'bar']]) - from certbot_nginx._internal.parser import COMMENT + from certbot._internal.nginx.parser import COMMENT assert nparser.parsed[example_com] == \ [[['server'], [['listen', '69.50.225.155:9000'], ['listen', '127.0.0.1'], @@ -298,7 +298,7 @@ class NginxParserTest(util.NginxTest): nparser.add_server_directives(mock_vhost, [['\n ', 'include', ' ', nparser.abs_path('comment_in_file.conf')]]) - from certbot_nginx._internal.parser import COMMENT + from certbot._internal.nginx.parser import COMMENT assert nparser.parsed[example_com] == \ [[['server'], [['listen', '69.50.225.155:9000'], ['listen', '127.0.0.1'], @@ -317,7 +317,7 @@ class NginxParserTest(util.NginxTest): mock_vhost = obj.VirtualHost(filep, None, None, None, target, None, [0]) nparser.update_or_add_server_directives( mock_vhost, [['server_name', 'foobar.com']]) - from certbot_nginx._internal.parser import COMMENT + from certbot._internal.nginx.parser import COMMENT assert nparser.parsed[filep] == \ [[['server'], [['listen', '69.50.225.155:9000'], ['listen', '127.0.0.1'], @@ -378,8 +378,8 @@ class NginxParserTest(util.NginxTest): ["\n", "a", " ", "b", "\n"], ["c", " ", "d"], ["\n", "e", " ", "f"]]) - from certbot_nginx._internal.parser import COMMENT_BLOCK - from certbot_nginx._internal.parser import comment_directive + from certbot._internal.nginx.parser import COMMENT_BLOCK + from certbot._internal.nginx.parser import comment_directive comment_directive(block, 1) comment_directive(block, 0) assert block.spaced == [ @@ -403,7 +403,7 @@ class NginxParserTest(util.NginxTest): ssl_prefer_server_ciphers on; }""") block = server_block[0][1] - from certbot_nginx._internal.parser import _comment_out_directive + from certbot._internal.nginx.parser import _comment_out_directive _comment_out_directive(block, 4, "blah1") _comment_out_directive(block, 5, "blah2") _comment_out_directive(block, 6, "blah3") diff --git a/certbot/src/certbot/_internal/nginx/tests/test_util.py b/certbot/src/certbot/_internal/nginx/tests/test_util.py index cf73b3d42..f24dcc756 100644 --- a/certbot/src/certbot/_internal/nginx/tests/test_util.py +++ b/certbot/src/certbot/_internal/nginx/tests/test_util.py @@ -1,4 +1,4 @@ -"""Common utilities for certbot_nginx.""" +"""Common test utilities for the nginx plugin.""" import copy import importlib.resources import shutil @@ -12,8 +12,8 @@ from certbot import util from certbot.compat import os from certbot.plugins import common from certbot.tests import util as test_util -from certbot_nginx._internal import configurator -from certbot_nginx._internal import nginxparser +from certbot._internal.nginx import configurator +from certbot._internal.nginx import nginxparser class NginxTest(test_util.ConfigTestCase): @@ -63,9 +63,9 @@ class NginxTest(test_util.ConfigTestCase): self.configuration.http01_port = 80 self.configuration.https_port = 5001 - with mock.patch("certbot_nginx._internal.configurator.NginxConfigurator." + with mock.patch("certbot._internal.nginx.configurator.NginxConfigurator." "config_test"): - with mock.patch("certbot_nginx._internal.configurator.util." + with mock.patch("certbot._internal.nginx.configurator.util." "exe_exists") as mock_exe_exists: mock_exe_exists.return_value = True config = configurator.NginxConfigurator(