diff options
Diffstat (limited to 'certbot-dns-digitalocean/certbot_dns_digitalocean')
-rw-r--r-- | certbot-dns-digitalocean/certbot_dns_digitalocean/_internal/__init__.py | 1 | ||||
-rw-r--r-- | certbot-dns-digitalocean/certbot_dns_digitalocean/_internal/dns_digitalocean.py (renamed from certbot-dns-digitalocean/certbot_dns_digitalocean/dns_digitalocean.py) | 2 | ||||
-rw-r--r-- | certbot-dns-digitalocean/certbot_dns_digitalocean/dns_digitalocean_test.py | 171 |
3 files changed, 2 insertions, 172 deletions
diff --git a/certbot-dns-digitalocean/certbot_dns_digitalocean/_internal/__init__.py b/certbot-dns-digitalocean/certbot_dns_digitalocean/_internal/__init__.py new file mode 100644 index 000000000..0291a9341 --- /dev/null +++ b/certbot-dns-digitalocean/certbot_dns_digitalocean/_internal/__init__.py @@ -0,0 +1 @@ +"""Internal implementation of `~certbot_dns_digitalocean.dns_digitalocean` plugin.""" diff --git a/certbot-dns-digitalocean/certbot_dns_digitalocean/dns_digitalocean.py b/certbot-dns-digitalocean/certbot_dns_digitalocean/_internal/dns_digitalocean.py index 5a4f22327..7f3abbe31 100644 --- a/certbot-dns-digitalocean/certbot_dns_digitalocean/dns_digitalocean.py +++ b/certbot-dns-digitalocean/certbot_dns_digitalocean/_internal/dns_digitalocean.py @@ -154,7 +154,7 @@ class _DigitalOceanClient(object): for guess in domain_name_guesses: matches = [domain for domain in domains if domain.name == guess] - if len(matches) > 0: + if matches: domain = matches[0] logger.debug('Found base domain for %s using name %s', domain_name, guess) return domain diff --git a/certbot-dns-digitalocean/certbot_dns_digitalocean/dns_digitalocean_test.py b/certbot-dns-digitalocean/certbot_dns_digitalocean/dns_digitalocean_test.py deleted file mode 100644 index 0e2043f50..000000000 --- a/certbot-dns-digitalocean/certbot_dns_digitalocean/dns_digitalocean_test.py +++ /dev/null @@ -1,171 +0,0 @@ -"""Tests for certbot_dns_digitalocean.dns_digitalocean.""" - -import os -import unittest - -import digitalocean -import mock - -from certbot import errors -from certbot.plugins import dns_test_common -from certbot.plugins.dns_test_common import DOMAIN -from certbot.tests import util as test_util - -API_ERROR = digitalocean.DataReadError() -TOKEN = 'a-token' - - -class AuthenticatorTest(test_util.TempDirTestCase, dns_test_common.BaseAuthenticatorTest): - - def setUp(self): - from certbot_dns_digitalocean.dns_digitalocean import Authenticator - - super(AuthenticatorTest, self).setUp() - - path = os.path.join(self.tempdir, 'file.ini') - dns_test_common.write({"digitalocean_token": TOKEN}, path) - - self.config = mock.MagicMock(digitalocean_credentials=path, - digitalocean_propagation_seconds=0) # don't wait during tests - - self.auth = Authenticator(self.config, "digitalocean") - - self.mock_client = mock.MagicMock() - # _get_digitalocean_client | pylint: disable=protected-access - self.auth._get_digitalocean_client = mock.MagicMock(return_value=self.mock_client) - - def test_perform(self): - self.auth.perform([self.achall]) - - expected = [mock.call.add_txt_record(DOMAIN, '_acme-challenge.'+DOMAIN, mock.ANY)] - self.assertEqual(expected, self.mock_client.mock_calls) - - def test_cleanup(self): - # _attempt_cleanup | pylint: disable=protected-access - self.auth._attempt_cleanup = True - self.auth.cleanup([self.achall]) - - expected = [mock.call.del_txt_record(DOMAIN, '_acme-challenge.'+DOMAIN, mock.ANY)] - self.assertEqual(expected, self.mock_client.mock_calls) - - -class DigitalOceanClientTest(unittest.TestCase): - - id_num = 1 - record_prefix = "_acme-challenge" - record_name = record_prefix + "." + DOMAIN - record_content = "bar" - - def setUp(self): - from certbot_dns_digitalocean.dns_digitalocean import _DigitalOceanClient - - self.digitalocean_client = _DigitalOceanClient(TOKEN) - - self.manager = mock.MagicMock() - self.digitalocean_client.manager = self.manager - - def test_add_txt_record(self): - wrong_domain_mock = mock.MagicMock() - wrong_domain_mock.name = "other.invalid" - wrong_domain_mock.create_new_domain_record.side_effect = AssertionError('Wrong Domain') - - domain_mock = mock.MagicMock() - domain_mock.name = DOMAIN - domain_mock.create_new_domain_record.return_value = {'domain_record': {'id': self.id_num}} - - self.manager.get_all_domains.return_value = [wrong_domain_mock, domain_mock] - - self.digitalocean_client.add_txt_record(DOMAIN, self.record_name, self.record_content) - - domain_mock.create_new_domain_record.assert_called_with(type='TXT', - name=self.record_prefix, - data=self.record_content) - - def test_add_txt_record_fail_to_find_domain(self): - self.manager.get_all_domains.return_value = [] - - self.assertRaises(errors.PluginError, - self.digitalocean_client.add_txt_record, - DOMAIN, self.record_name, self.record_content) - - def test_add_txt_record_error_finding_domain(self): - self.manager.get_all_domains.side_effect = API_ERROR - - self.assertRaises(errors.PluginError, - self.digitalocean_client.add_txt_record, - DOMAIN, self.record_name, self.record_content) - - def test_add_txt_record_error_creating_record(self): - domain_mock = mock.MagicMock() - domain_mock.name = DOMAIN - domain_mock.create_new_domain_record.side_effect = API_ERROR - - self.manager.get_all_domains.return_value = [domain_mock] - - self.assertRaises(errors.PluginError, - self.digitalocean_client.add_txt_record, - DOMAIN, self.record_name, self.record_content) - - def test_del_txt_record(self): - first_record_mock = mock.MagicMock() - first_record_mock.type = 'TXT' - first_record_mock.name = "DIFFERENT" - first_record_mock.data = self.record_content - - correct_record_mock = mock.MagicMock() - correct_record_mock.type = 'TXT' - correct_record_mock.name = self.record_prefix - correct_record_mock.data = self.record_content - - last_record_mock = mock.MagicMock() - last_record_mock.type = 'TXT' - last_record_mock.name = self.record_prefix - last_record_mock.data = "DIFFERENT" - - domain_mock = mock.MagicMock() - domain_mock.name = DOMAIN - domain_mock.get_records.return_value = [first_record_mock, - correct_record_mock, - last_record_mock] - - self.manager.get_all_domains.return_value = [domain_mock] - - self.digitalocean_client.del_txt_record(DOMAIN, self.record_name, self.record_content) - - self.assertTrue(correct_record_mock.destroy.called) - - self.assertFalse(first_record_mock.destroy.call_args_list) - self.assertFalse(last_record_mock.destroy.call_args_list) - - def test_del_txt_record_error_finding_domain(self): - self.manager.get_all_domains.side_effect = API_ERROR - - self.digitalocean_client.del_txt_record(DOMAIN, self.record_name, self.record_content) - - def test_del_txt_record_error_finding_record(self): - domain_mock = mock.MagicMock() - domain_mock.name = DOMAIN - domain_mock.get_records.side_effect = API_ERROR - - self.manager.get_all_domains.return_value = [domain_mock] - - self.digitalocean_client.del_txt_record(DOMAIN, self.record_name, self.record_content) - - def test_del_txt_record_error_deleting_record(self): - record_mock = mock.MagicMock() - record_mock.type = 'TXT' - record_mock.name = self.record_prefix - record_mock.data = self.record_content - record_mock.destroy.side_effect = API_ERROR - - domain_mock = mock.MagicMock() - domain_mock.name = DOMAIN - domain_mock.get_records.return_value = [record_mock] - - self.manager.get_all_domains.return_value = [domain_mock] - - self.digitalocean_client.del_txt_record(DOMAIN, self.record_name, self.record_content) - - -if __name__ == "__main__": - unittest.main() # pragma: no cover |