Remove fopen argument in favor of mock.

This simplifies the actual production code and is a more standard approach in
Python.
This commit is contained in:
Brad Warren 2017-08-04 10:19:46 -07:00
parent b37be61807
commit b50a71ff4e
2 changed files with 29 additions and 45 deletions

View file

@ -26,7 +26,6 @@ class Installer(plugins_common.Plugin):
policy_config,
postfix_dir,
fixup=False,
fopen=open,
version=None):
self.fixup = fixup
self.postfix_dir = postfix_dir
@ -38,7 +37,7 @@ class Installer(plugins_common.Plugin):
self.additions = []
self.deletions = []
self.fn = self.find_postfix_cf()
self.raw_cf = fopen(self.fn).readlines()
self.raw_cf = open(self.fn).readlines()
self.cf = map(string.strip, self.raw_cf)
#self.cf = [line for line in cf if line and not line.startswith("#")]
self.policy_lines = []
@ -114,7 +113,7 @@ class Installer(plugins_common.Plugin):
self.ensure_cf_var("smtp_tls_protocols", "!SSLv2, !SSLv3", [])
self.ensure_cf_var("smtp_tls_mandatory_protocols", "!SSLv2, !SSLv3", [])
def maybe_add_config_lines(self, fopen=open):
def maybe_add_config_lines(self):
if not self.additions:
return
if self.fixup:
@ -135,10 +134,10 @@ class Installer(plugins_common.Plugin):
self.new_cf += line
self.new_cf += sep + new_cf_lines
with fopen(self.fn, "w") as f:
with open(self.fn, "w") as f:
f.write(self.new_cf)
def set_domainwise_tls_policies(self, fopen=open):
def set_domainwise_tls_policies(self):
all_acceptable_mxs = self.policy_config.acceptable_mxs
for address_domain, properties in all_acceptable_mxs.items():
mx_list = properties.accept_mx_domains
@ -164,7 +163,7 @@ class Installer(plugins_common.Plugin):
)
self.policy_lines.append(entry)
with fopen(self.policy_file, "w") as f:
with open(self.policy_file, "w") as f:
f.write("\n".join(self.policy_lines) + "\n")
### Let's Encrypt client IPlugin ###

View file

@ -6,10 +6,12 @@ from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import io
import logging
import unittest
import mock
import six
from certbot_postfix import installer
@ -28,61 +30,44 @@ certs_only_config = (
smtpd_tls_key_file = /etc/letsencrypt/live/www.fubard.org/privkey.pem""")
def GetFakeOpen(fake_file_contents):
fake_file = io.StringIO()
# cast this to unicode for py2
fake_file.write(fake_file_contents)
fake_file.seek(0)
def FakeOpen(_):
return fake_file
return FakeOpen
class TestPostfixConfigGenerator(unittest.TestCase):
def setUp(self):
self.fopen_names_only_config = GetFakeOpen(names_only_config)
self.fopen_certs_only_config = GetFakeOpen(certs_only_config)
self.fopen_no_certs_only_config = self.fopen_names_only_config
#self.config = Config.Config()
self.config = None
self.postfix_dir = 'tests/'
def tearDown(self):
pass
def testGetAllNames(self):
sorted_names = ['fubard.org', 'mail.fubard.org']
postfix_config_gen = installer.Installer(
self.config,
self.postfix_dir,
fixup=True,
fopen=self.fopen_names_only_config
)
with mock.patch('certbot_postfix.installer.open') as mock_open:
mock_open.return_value = six.StringIO(names_only_config)
postfix_config_gen = installer.Installer(
self.config,
self.postfix_dir,
fixup=True,
)
self.assertEqual(sorted_names, postfix_config_gen.get_all_names())
def testGetAllCertAndKeys(self):
return_vals = [('/etc/letsencrypt/live/www.fubard.org/fullchain.pem',
'/etc/letsencrypt/live/www.fubard.org/privkey.pem',
'tests/main.cf'),]
postfix_config_gen = installer.Installer(
self.config,
self.postfix_dir,
fixup=True,
fopen=self.fopen_certs_only_config
)
with mock.patch('certbot_postfix.installer.open') as mock_open:
mock_open.return_value = six.StringIO(certs_only_config)
postfix_config_gen = installer.Installer(
self.config,
self.postfix_dir,
fixup=True,
)
self.assertEqual(return_vals, postfix_config_gen.get_all_certs_keys())
def testGetAllCertsAndKeys_With_None(self):
postfix_config_gen = installer.Installer(
self.config,
self.postfix_dir,
fixup=True,
fopen=self.fopen_no_certs_only_config
)
with mock.patch('certbot_postfix.installer.open') as mock_open:
mock_open.return_value = six.StringIO(names_only_config)
postfix_config_gen = installer.Installer(
self.config,
self.postfix_dir,
fixup=True,
)
self.assertEqual([], postfix_config_gen.get_all_certs_keys())