summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2013-07-11 20:58:06 +0200
committerClaude Paroz <claude@2xlibre.net>2013-07-11 22:00:08 +0200
commit59ebe39812858ba37e83ab0ee886f676980d472d (patch)
tree321863def25ef1148b27881adff1836b6c23ad1e /tests
parent684a606a4ea21de6d1cc59b69f43b3a133672d59 (diff)
Fixed #17471 -- Added smtplib.SMTP_SSL connection option for SMTP backend
Thanks dj.facebook at gmail.com for the report and initial patch and Areski Belaid and senko for improvements.
Diffstat (limited to 'tests')
-rw-r--r--tests/mail/tests.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/mail/tests.py b/tests/mail/tests.py
index c90dc7e22a..822c572b0f 100644
--- a/tests/mail/tests.py
+++ b/tests/mail/tests.py
@@ -9,6 +9,8 @@ import smtpd
import sys
import tempfile
import threading
+from smtplib import SMTPException
+from ssl import SSLError
from django.core import mail
from django.core.mail import (EmailMessage, mail_admins, mail_managers,
@@ -621,11 +623,23 @@ class ConsoleBackendTests(BaseEmailBackendTests, TestCase):
self.assertTrue(s.getvalue().startswith('Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\nContent-Transfer-Encoding: 7bit\nSubject: Subject\nFrom: from@example.com\nTo: to@example.com\nDate: '))
+class FakeSMTPChannel(smtpd.SMTPChannel):
+
+ def collect_incoming_data(self, data):
+ try:
+ super(FakeSMTPChannel, self).collect_incoming_data(data)
+ except UnicodeDecodeError:
+ # ignore decode error in SSL/TLS connection tests as we only care
+ # whether the connection attempt was made
+ pass
+
+
class FakeSMTPServer(smtpd.SMTPServer, threading.Thread):
"""
Asyncore SMTP server wrapped into a thread. Based on DummyFTPServer from:
http://svn.python.org/view/python/branches/py3k/Lib/test/test_ftplib.py?revision=86061&view=markup
"""
+ channel_class = FakeSMTPChannel
def __init__(self, *args, **kwargs):
threading.Thread.__init__(self)
@@ -738,3 +752,44 @@ class SMTPBackendTests(BaseEmailBackendTests, TestCase):
backend.close()
except Exception as e:
self.fail("close() unexpectedly raised an exception: %s" % e)
+
+ @override_settings(EMAIL_USE_TLS=True)
+ def test_email_tls_use_settings(self):
+ backend = smtp.EmailBackend()
+ self.assertTrue(backend.use_tls)
+
+ @override_settings(EMAIL_USE_TLS=True)
+ def test_email_tls_override_settings(self):
+ backend = smtp.EmailBackend(use_tls=False)
+ self.assertFalse(backend.use_tls)
+
+ def test_email_tls_default_disabled(self):
+ backend = smtp.EmailBackend()
+ self.assertFalse(backend.use_tls)
+
+ @override_settings(EMAIL_USE_SSL=True)
+ def test_email_ssl_use_settings(self):
+ backend = smtp.EmailBackend()
+ self.assertTrue(backend.use_ssl)
+
+ @override_settings(EMAIL_USE_SSL=True)
+ def test_email_ssl_override_settings(self):
+ backend = smtp.EmailBackend(use_ssl=False)
+ self.assertFalse(backend.use_ssl)
+
+ def test_email_ssl_default_disabled(self):
+ backend = smtp.EmailBackend()
+ self.assertFalse(backend.use_ssl)
+
+ @override_settings(EMAIL_USE_TLS=True)
+ def test_email_tls_attempts_starttls(self):
+ backend = smtp.EmailBackend()
+ self.assertTrue(backend.use_tls)
+ self.assertRaisesMessage(SMTPException,
+ 'STARTTLS extension not supported by server.', backend.open)
+
+ @override_settings(EMAIL_USE_SSL=True)
+ def test_email_ssl_attempts_ssl_connection(self):
+ backend = smtp.EmailBackend()
+ self.assertTrue(backend.use_ssl)
+ self.assertRaises(SSLError, backend.open)