diff options
author | Lars Wirzenius <liw@liw.fi> | 2017-01-31 19:55:51 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2017-01-31 19:55:51 +0200 |
commit | 7b29338ff9646755e91442ff96f9968741daf1b6 (patch) | |
tree | c2005eac99cb0ffc0a5288ae87126c550887e388 /900-implements.yarn | |
parent | 14cd81f6418b5a81124b000cc950d70bf301b359 (diff) | |
download | server-yarns-7b29338ff9646755e91442ff96f9968741daf1b6.tar.gz |
Start mail handling scenario
Diffstat (limited to '900-implements.yarn')
-rw-r--r-- | 900-implements.yarn | 57 |
1 files changed, 57 insertions, 0 deletions
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) |