Files
edx-platform/lms/djangoapps/bulk_email/tests/smtp_server_thread.py
Kevin Luo 3b32d4216c Add delay to course bulk email task and use SITE_NAME for site url
Delay for possible race condition with fetching course email object.
 Use settings.SITE_NAME for host name to generate email footer url.
2013-08-29 12:40:32 -04:00

48 lines
1.3 KiB
Python

"""
Defines a class for a thread that runs a Fake SMTP server, used for testing
error handling from sending email.
"""
import threading
from bulk_email.tests.fake_smtp import FakeSMTPServer
class FakeSMTPServerThread(threading.Thread):
"""
Thread for running a fake SMTP server
"""
def __init__(self, host, port):
self.host = host
self.port = port
self.is_ready = threading.Event()
self.error = None
self.server = None
super(FakeSMTPServerThread, self).__init__()
def start(self):
self.daemon = True
super(FakeSMTPServerThread, self).start()
self.is_ready.wait()
if self.error:
raise self.error # pylint: disable=E0702
def stop(self):
"""
Stop the thread by closing the server instance.
Wait for the server thread to terminate.
"""
if hasattr(self, 'server'):
self.server.close()
self.join()
def run(self):
"""
Sets up the test smtp server and handle requests.
"""
try:
self.server = FakeSMTPServer((self.host, self.port), None)
self.is_ready.set()
self.server.serve_forever()
except Exception, exc: # pylint: disable=W0703
self.error = exc
self.is_ready.set()