summaryrefslogtreecommitdiff
path: root/900-implements.yarn
diff options
context:
space:
mode:
Diffstat (limited to '900-implements.yarn')
-rw-r--r--900-implements.yarn57
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)