From ff80a2f003068c7a3163bb8716c74707dc9dd661 Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Fri, 27 Dec 2013 13:24:06 -0800 Subject: [PATCH] Make smtp tests more robust Current implementation does not support running more than one test sequentially in the same test runner. Move message storage to the test object and create a factory method for FakeSMTP that links the FakeSMTP object to the message storage. Also, make the timeout non-gentle. Gentle didn't seem to work. Change-Id: I1eae42ceac4deb6eb30affd1d84f3e79c97ca2f4 --- tests/test_scheduler.py | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py index 697cef59ea..94d2aa36aa 100755 --- a/tests/test_scheduler.py +++ b/tests/test_scheduler.py @@ -690,11 +690,11 @@ class FakeGearmanServer(gear.Server): class FakeSMTP(object): log = logging.getLogger('zuul.FakeSMTP') - messages = [] - def __init__(self, server, port): + def __init__(self, messages, server, port): self.server = server self.port = port + self.messages = messages def sendmail(self, from_email, to_email, msg): self.log.info("Sending email from %s, to %s, with msg %s" % ( @@ -703,7 +703,7 @@ class FakeSMTP(object): headers = msg.split('\n\n', 1)[0] body = msg.split('\n\n', 1)[1] - FakeSMTP.messages.append(dict( + self.messages.append(dict( from_email=from_email, to_email=to_email, msg=msg, @@ -729,7 +729,7 @@ class TestScheduler(testtools.TestCase): # If timeout value is invalid do not set a timeout. test_timeout = 0 if test_timeout > 0: - self.useFixture(fixtures.Timeout(test_timeout, gentle=True)) + self.useFixture(fixtures.Timeout(test_timeout, gentle=False)) if (os.environ.get('OS_STDOUT_CAPTURE') == 'True' or os.environ.get('OS_STDOUT_CAPTURE') == '1'): @@ -800,8 +800,14 @@ class TestScheduler(testtools.TestCase): urllib2.urlopen = URLOpenerFactory self.launcher = zuul.launcher.gearman.Gearman(self.config, self.sched) + self.smtp_messages = [] + + def FakeSMTPFactory(*args, **kw): + args = [self.smtp_messages] + list(args) + return FakeSMTP(*args, **kw) + zuul.lib.gerrit.Gerrit = FakeGerrit - self.useFixture(fixtures.MonkeyPatch('smtplib.SMTP', FakeSMTP)) + self.useFixture(fixtures.MonkeyPatch('smtplib.SMTP', FakeSMTPFactory)) self.gerrit = FakeGerritTrigger( self.upstream_root, self.config, self.sched) @@ -2972,25 +2978,25 @@ class TestScheduler(testtools.TestCase): self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1)) self.waitUntilSettled() - self.assertEqual(len(FakeSMTP.messages), 2) + self.assertEqual(len(self.smtp_messages), 2) # A.messages only holds what FakeGerrit places in it. Thus we # work on the knowledge of what the first message should be as # it is only configured to go to SMTP. self.assertEqual('zuul@example.com', - FakeSMTP.messages[0]['from_email']) + self.smtp_messages[0]['from_email']) self.assertEqual(['you@example.com'], - FakeSMTP.messages[0]['to_email']) + self.smtp_messages[0]['to_email']) self.assertEqual('Starting check jobs.', - FakeSMTP.messages[0]['body']) + self.smtp_messages[0]['body']) self.assertEqual('zuul_from@example.com', - FakeSMTP.messages[1]['from_email']) + self.smtp_messages[1]['from_email']) self.assertEqual(['alternative_me@example.com'], - FakeSMTP.messages[1]['to_email']) + self.smtp_messages[1]['to_email']) self.assertEqual(A.messages[0], - FakeSMTP.messages[1]['body']) + self.smtp_messages[1]['body']) def test_timer_smtp(self): "Test that a periodic job is triggered" @@ -3018,18 +3024,18 @@ class TestScheduler(testtools.TestCase): self.assertEqual(self.getJobFromHistory( 'project-bitrot-stable-older').result, 'SUCCESS') - self.assertEqual(len(FakeSMTP.messages), 1) + self.assertEqual(len(self.smtp_messages), 1) # A.messages only holds what FakeGerrit places in it. Thus we # work on the knowledge of what the first message should be as # it is only configured to go to SMTP. self.assertEqual('zuul_from@example.com', - FakeSMTP.messages[0]['from_email']) + self.smtp_messages[0]['from_email']) self.assertEqual(['alternative_me@example.com'], - FakeSMTP.messages[0]['to_email']) + self.smtp_messages[0]['to_email']) self.assertIn('Subject: Periodic check for org/project succeeded', - FakeSMTP.messages[0]['headers']) + self.smtp_messages[0]['headers']) def test_client_enqueue(self): "Test that the RPC client can enqueue a change"