From 7ffd4cf4b5e3a1358c189ad49c01a3b3f4198ba4 Mon Sep 17 00:00:00 2001 From: Jessica Tallon Date: Tue, 12 Aug 2014 16:56:08 +0100 Subject: [PATCH] Fix #861 - Add unit test and documentation for email_smtp_force_starttls --- mediagoblin/config_spec.ini | 17 ++++++++++++++++- mediagoblin/tests/test_util.py | 27 +++++++++++++++++++++++++++ mediagoblin/tools/mail.py | 2 +- 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/mediagoblin/config_spec.ini b/mediagoblin/config_spec.ini index 72993ed0..b5c957c8 100644 --- a/mediagoblin/config_spec.ini +++ b/mediagoblin/config_spec.ini @@ -23,14 +23,29 @@ direct_remote_path = string(default="/mgoblin_static/") # set to false to enable sending notices email_debug_mode = boolean(default=True) + +# Uses SSL/TLS when connecting to SMTP server email_smtp_use_ssl = boolean(default=False) -email_smtp_force_tls = boolean(default=False) + +# Uses STARTTLS when connecting to SMTP server +email_smtp_force_starttls = boolean(default=False) + +# Email address which notices are sent from email_sender_address = string(default="notice@mediagoblin.example.org") + +# Hostname of SMTP server email_smtp_host = string(default='') + +# Port for SMTP server email_smtp_port = integer(default=0) + +# Username used for SMTP server email_smtp_user = string(default=None) + +# Password used for SMTP server email_smtp_pass = string(default=None) + # Set to false to disable registrations allow_registration = boolean(default=True) diff --git a/mediagoblin/tests/test_util.py b/mediagoblin/tests/test_util.py index 9d9b1c16..36563e75 100644 --- a/mediagoblin/tests/test_util.py +++ b/mediagoblin/tests/test_util.py @@ -14,8 +14,13 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import mock import email +import pytest +import smtplib +import pkg_resources +from mediagoblin.tests.tools import get_app from mediagoblin.tools import common, url, translate, mail, text, testing testing._activate_testing() @@ -69,6 +74,28 @@ I hope you like unit tests JUST AS MUCH AS I DO!""" I hope you like unit tests JUST AS MUCH AS I DO!""" +@pytest.fixture() +def starttls_enabled_app(request): + return get_app( + request, + mgoblin_config=pkg_resources.resource_filename( + "mediagoblin.tests", + "starttls_config.ini" + ) + ) + +def test_email_force_starttls(starttls_enabled_app): + common.TESTS_ENABLED = False + SMTP = lambda *args, **kwargs: mail.FakeMhost() + with mock.patch('smtplib.SMTP', SMTP): + with pytest.raises(smtplib.SMTPException): + mail.send_email( + from_addr="notices@my.test.instance.com", + to_addrs="someone@someplace.com", + subject="Testing is so much fun!", + message_body="Ohai ^_^" + ) + def test_slugify(): assert url.slugify(u'a walk in the park') == u'a-walk-in-the-park' assert url.slugify(u'A Walk in the Park') == u'a-walk-in-the-park' diff --git a/mediagoblin/tools/mail.py b/mediagoblin/tools/mail.py index 889a4420..ab355835 100644 --- a/mediagoblin/tools/mail.py +++ b/mediagoblin/tools/mail.py @@ -111,7 +111,7 @@ def send_email(from_addr, to_addrs, subject, message_body): mhost.starttls() except smtplib.SMTPException: # Only raise an exception if we're forced to - if mg_globals.app_config['email_smtp_force_tls']: + if mg_globals.app_config['email_smtp_force_starttls']: six.reraise(*sys.exc_info()) if ((not common.TESTS_ENABLED) -- 2.25.1