mirror of
https://github.com/certbot/certbot.git
synced 2026-01-26 07:41:33 +03:00
* Removed `ConfigParser.py` (ACK by Daniel). * Removed MTAConfigGenerator-stub and renamed to `PostfixConfigGenerator.py` * Moved all text/csv processing scripts to `tools/`. * Moved all configuration files into dedicated `examples/` directory. * unified all shebangs to `#!/usr/bin/env python` (default system python). * Moved domain CSV and text-files to `share/`.
133 lines
5.4 KiB
Python
Executable File
133 lines
5.4 KiB
Python
Executable File
#!/usr/bin/env python
|
|
import copy
|
|
import itertools
|
|
import logging
|
|
import unittest
|
|
|
|
import Config
|
|
|
|
logger = logging.getLogger(__name__)
|
|
logger.addHandler(logging.StreamHandler())
|
|
|
|
|
|
class TestTLSPolicy(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.old_config = Config.TLSPolicy(domain_suffix='.eff.org')
|
|
self.old_config.comment = 'Testing EFF.org TLS policy'
|
|
self.old_config.require_tls = True
|
|
self.old_config.require_valid_certificate = False
|
|
self.old_config.min_tls_version = 'TLSv1'
|
|
self.old_config.enforce_mode = 'log-only'
|
|
|
|
self.new_config = Config.TLSPolicy(domain_suffix='.eff.org')
|
|
self.new_config.require_valid_certificate = True
|
|
self.new_config.min_tls_version = 'TLSv1.2'
|
|
self.new_config.enforce_mode = 'enforce'
|
|
|
|
def testUpdateDropsOldSettings(self):
|
|
logger.debug('old: %s' % self.old_config)
|
|
logger.debug('new: %s' % self.new_config)
|
|
tls_policy = self.old_config.update(self.new_config)
|
|
logger.debug('just generated: %s' % tls_policy)
|
|
self.assertFalse(any([tls_policy.require_tls, tls_policy.comment]))
|
|
|
|
def testMergeKeepsOldSettings(self):
|
|
logger.debug('old: %s' % self.old_config)
|
|
logger.debug('new: %s' % self.new_config)
|
|
tls_policy = self.old_config.merge(self.new_config, merge=True)
|
|
logger.debug('just generated: %s' % tls_policy)
|
|
self.assertTrue(all([tls_policy.require_tls, tls_policy.comment]))
|
|
|
|
def testUpdateGetsNameSet(self):
|
|
tls_policy = self.old_config.update(self.new_config)
|
|
self.assertEquals(tls_policy.domain_suffix, self.old_config.domain_suffix)
|
|
|
|
|
|
class TestAcceptableMX(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.old_config = Config.AcceptableMX(domain='eff.org')
|
|
self.old_config.add_acceptable_mx('.eff.org')
|
|
|
|
def testUpdateDropsOldMXs(self):
|
|
new_bogus_mx = '.testing.eff.org'
|
|
new_config = Config.AcceptableMX(domain='eff.org')
|
|
new_config.add_acceptable_mx(new_bogus_mx)
|
|
updated_config = self.old_config.update(new_config)
|
|
self.assertNotIn('.eff.org', updated_config.accept_mx_domains)
|
|
|
|
def testMergeKeepsOldMXs(self):
|
|
new_bogus_mx = '.testing.eff.org'
|
|
new_config = Config.AcceptableMX(domain='eff.org')
|
|
new_config.add_acceptable_mx(new_bogus_mx)
|
|
updated_config = self.old_config.merge(new_config)
|
|
self.assertListEqual(sorted(['.eff.org', '.testing.eff.org']),
|
|
sorted(updated_config.accept_mx_domains))
|
|
|
|
def testUpdateGetsNameSet(self):
|
|
new_policy = Config.AcceptableMX(domain=self.old_config.domain)
|
|
mx_policy = self.old_config.update(new_policy)
|
|
self.assertEquals(mx_policy.domain, self.old_config.domain)
|
|
|
|
|
|
class TestConfig(unittest.TestCase):
|
|
"""Test entire configuration.
|
|
|
|
Currently lower coverage is being obtained since string sets are
|
|
being compared rather than returned objects. Comparison logic for
|
|
the config objects isn't clear yet and proof that they function is enough.
|
|
"""
|
|
|
|
def setUp(self):
|
|
self.config = Config.Config()
|
|
domain_policies = self.config._data['acceptable-mxs']
|
|
self.mail_domains = ['gmail.com', 'yahoo.com', 'hotmail.com', '123.cn', 'qq.com']
|
|
for domain in self.mail_domains:
|
|
new = Config.AcceptableMX(domain=domain)
|
|
new.add_acceptable_mx('.' + domain)
|
|
domain_policies[domain] = new
|
|
|
|
def testGetAllMxItems(self):
|
|
"""Make sure the basic use case of get_all_mx_items functions."""
|
|
# [ ('.gmail.com', 'gmail.com'), ('.yahoo.com', 'yahoo.com'), ... ]
|
|
control_data = [ ('.' + domain, domain) for domain in self.mail_domains ]
|
|
test_data = [ (mx, p.domain) for mx, p in self.config.get_all_mx_items() ]
|
|
self.assertListEqual(sorted(test_data), sorted(control_data))
|
|
|
|
def testGetAllMxItemsMultiMX(self):
|
|
config = copy.deepcopy(self.config)
|
|
domain_policy = config.acceptable_mxs.get('gmail.com')
|
|
# deal with reality, mail.google.com
|
|
domain_policy.add_acceptable_mx('.mail.google.com')
|
|
control_data = [ ('.' + domain, domain) for domain in self.mail_domains ]
|
|
control_data.append(('.mail.google.com', 'gmail.com'))
|
|
test_data = [ (mx, p.domain) for mx, p in config.get_all_mx_items() ]
|
|
self.assertListEqual(sorted(test_data), sorted(control_data))
|
|
|
|
def testGetMXtoDomainPolicy(self):
|
|
control_data = dict([ ('.' + domain, set([domain]))
|
|
for domain in self.mail_domains ])
|
|
test_data = {}
|
|
for mx, pset in self.config.get_mx_to_domain_policy_map().items():
|
|
policy_list = [ p.domain for p in pset ]
|
|
test_data[mx] = set(policy_list)
|
|
self.assertDictEqual(test_data, control_data)
|
|
|
|
def testGetMXtoDomainPolicyMultiMX(self):
|
|
config = copy.deepcopy(self.config)
|
|
domain_policy = config.acceptable_mxs.get('gmail.com')
|
|
domain_policy.add_acceptable_mx('.mail.google.com')
|
|
control_data = dict([ ('.' + domain, set([domain]))
|
|
for domain in self.mail_domains ])
|
|
control_data['.mail.google.com'] = set(['gmail.com'])
|
|
test_data = {}
|
|
for mx, pset in config.get_mx_to_domain_policy_map().items():
|
|
policy_list = [ p.domain for p in pset ]
|
|
test_data[mx] = set(policy_list)
|
|
self.assertDictEqual(test_data, control_data)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|