From 7b29338ff9646755e91442ff96f9968741daf1b6 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Tue, 31 Jan 2017 19:55:51 +0200 Subject: Start mail handling scenario --- 900-implements.yarn | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to '900-implements.yarn') diff --git a/900-implements.yarn b/900-implements.yarn index e5943f7..9a2493f 100644 --- a/900-implements.yarn +++ b/900-implements.yarn @@ -87,3 +87,60 @@ print 'argv:', repr(h.get_variable('argv')) print 'stderr:', repr(stderr) h.assertNotEqual(m, None) + +# Mail handling tests + +## Generate a random number + + IMPLEMENTS GIVEN large random number (\S+) + import yarnhelper, random + h = yarnhelper.YarnHelper() + varname = h.get_next_match() + mini = 2**32 + maxi = 2**64 + r = random.randint(mini, maxi) + h.set_variable(varname, str(r)) + + +## Send mail over SMTP+TLS + + IMPLEMENTS WHEN someone sends mail to (\S+) with subject \$(\S+) + import smtplib, sys, yarnhelper + h = yarnhelper.YarnHelper() + to_addr = h.get_next_match() + subject_key = h.get_next_match() + server_name = h.get_variable('SERVER') + from_addr = 'someone@example.com' + msg = 'From: {}\nTo: {}\nSubject: {}\n\nThis is the body\n'.format( + from_addr, to_addr, subject) + server = smtplib.SMTP(server_name) + server.set_debuglevel(True) + server.starttls() + server.sendmail(from_addr, to_addr, msg) + server.quit() + +## Check for a mail in a mailbox + + IMPLEMENTS THEN mailbox of (\S+) has a mail with subject \$(\S+) + import email, imaplib, subprocess, yarnhelper + h = yarnhelper.YarnHelper() + user = h.get_next_match() + subject = h.get_next_match() + server = h.get_variable('SERVER') + pass_name = 'server-yarns/imap/{}@{}'.format(user, server) + p = subprocess.Popen(['pass', 'show', pass_name], stdout=subprocess.PIPE) + stdout, stderr = p.communicate() + password = stdout.rstrip() + m = imaplib.IMAP4_SSL(server) + m.login(user, password) + m.select('INBOX', True) + typ, data = m.search(None, 'ALL') + got_it = False + for num in data[0].split(): + typ, data = m.fetch(num, '(RFC822)') + typ, text = data[0] + msg = email.message_from_string(text) + got_it = got_it or (msg['Subject'] == subject) + m.close() + m.logout() + h.assertEqual(got_it, True) -- cgit v1.2.1