[tor-commits] [bridgedb/master] More unit tests for Email Server
isis at torproject.org
isis at torproject.org
Sat Apr 19 17:02:42 UTC 2014
commit 0556e7daa8504756b34384a0f9b5dfa753556c09
Author: Matthew Finkel <Matthew.Finkel at gmail.com>
Date: Fri Mar 21 03:19:23 2014 +0000
More unit tests for Email Server
---
lib/bridgedb/test/test_EmailServer.py | 160 +++++++++++++++++++++++++++++++++
1 file changed, 160 insertions(+)
diff --git a/lib/bridgedb/test/test_EmailServer.py b/lib/bridgedb/test/test_EmailServer.py
index 4c6bcd7..e8b9360 100644
--- a/lib/bridgedb/test/test_EmailServer.py
+++ b/lib/bridgedb/test/test_EmailServer.py
@@ -17,8 +17,13 @@ import os
import shutil
from io import StringIO
+import copy
from bridgedb import EmailServer
+from bridgedb.Dist import BadEmail
+from bridgedb.Dist import EmailBasedDistributor
+from bridgedb.EmailServer import MailContext
+from bridgedb.Time import NoSchedule
from bridgedb.persistent import Conf
from bridgedb.test.util import fileCheckDecorator
from twisted.python import log
@@ -29,8 +34,36 @@ TEST_CONFIG_FILE = StringIO(unicode("""\
EMAIL_DIST = True
EMAIL_GPG_SIGNING_ENABLED = True
EMAIL_GPG_SIGNING_KEY = 'TESTING.subkeys.sec'
+EMAIL_DOMAIN_MAP = {}
+EMAIL_DOMAIN_RULES = {
+ 'gmail.com': ["ignore_dots", "dkim"],
+ 'example.com': [],
+}
+EMAIL_DOMAINS = ["gmail.com", "example.com"]
+EMAIL_USERNAME = "bridges"
+EMAIL_SMTP_HOST = "127.0.0.1"
+EMAIL_SMTP_PORT = 25
+EMAIL_SMTP_FROM_ADDR = "bridges at localhost"
+EMAIL_N_BRIDGES_PER_ANSWER = 3
+EMAIL_FROM_ADDR = "bridges at localhost"
+EMAIL_BIND_IP = "127.0.0.1"
+EMAIL_PORT = 5225
"""))
+class FakeDistributor(EmailBasedDistributor):
+ def __init__(self, key, domainmap, domainrules, answerParameters=None,
+ bridges=None):
+ super(FakeDistributor, self).__init__(key, domainmap, domainrules,
+ answerParameters)
+ if bridges:
+ self.bridges = bridges
+ else:
+ self.bridges = []
+
+ def getBridgesForEmail(self, emailaddr, epoch, N=1,
+ parameters=None, countryCode=None, bridgeFilterRules=None):
+ return self.bridges[:N]
+
class EmailGnuPGTest(unittest.TestCase):
"""Tests for :func:`bridgedb.EmailServer.getGPGContext`."""
@@ -96,3 +129,130 @@ class EmailGnuPGTest(unittest.TestCase):
self.makeBadKey()
ctx = EmailServer.getGPGContext(self.config)
self.assertTrue(ctx is None)
+
+class EmailCompositionTests(unittest.TestCase):
+ """Tests for :func:`bridgedb.EmailServer.getMailResponse`."""
+
+ def setUp(self):
+ """Create fake email and associated data"""
+ configuration = {}
+ TEST_CONFIG_FILE.seek(0)
+ compiled = compile(TEST_CONFIG_FILE.read(), '<string>', 'exec')
+ exec compiled in configuration
+ self.config = Conf(**configuration)
+
+ # TODO: Add headers if we start validating them
+ self.lines = ["From: %s@%s.com", "To: %s at example.net",
+ "Subject: testing", "\n", "get bridges"]
+ self.distributor = FakeDistributor('key', {}, {}, [])
+ self.ctx = MailContext(self.config, self.distributor, NoSchedule())
+
+ def test_getMailResponseNoFrom(self):
+ lines = self.lines
+ lines[0] = ""
+ lines[1] = self.lines[1] % "bridges"
+ ret = EmailServer.getMailResponse(lines, self.ctx)
+ self.assertIsInstance(ret, tuple)
+ self.assertEqual(len(ret), 2)
+ self.assertEqual(ret[0], None)
+ self.assertEqual(ret[1], None)
+
+ def test_getMailResponseBadAddress(self):
+ lines = copy.copy(self.lines)
+ lines[0] = self.lines[0] % ("testing?", "example")
+ lines[1] = self.lines[1] % "bridges"
+ lines[2] = ""
+ ret = EmailServer.getMailResponse(lines, self.ctx)
+ self.assertIsInstance(ret, tuple)
+ self.assertEqual(len(ret), 2)
+ self.assertEqual(ret[0], None)
+ self.assertEqual(ret[1], None)
+ #lines[0] = self.lines[0] % ("<>>", "example")
+ lines[0] = "From: %s@%s.com" % ("<>>", "example")
+ ret = EmailServer.getMailResponse(lines, self.ctx)
+ self.assertIsInstance(ret, tuple)
+ self.assertEqual(len(ret), 2)
+ self.assertEqual(ret[0], None)
+ self.assertEqual(ret[1], None)
+
+ def test_getMailResponseInvalidDomain(self):
+ lines = copy.copy(self.lines)
+ lines[0] = self.lines[0] % ("testing", "exa#mple")
+ ret = EmailServer.getMailResponse(lines, self.ctx)
+ self.assertIsInstance(ret, tuple)
+ self.assertEqual(len(ret), 2)
+ self.assertEqual(ret[0], None)
+ self.assertEqual(ret[1], None)
+ lines[0] = self.lines[0] % ("testing", "exam+ple")
+ ret = EmailServer.getMailResponse(lines, self.ctx)
+ self.assertIsInstance(ret, tuple)
+ self.assertEqual(len(ret), 2)
+ self.assertEqual(ret[0], None)
+ self.assertEqual(ret[1], None)
+
+ def test_getMailResponseDKIM(self):
+ lines = copy.copy(self.lines)
+ lines[0] = self.lines[0] % ("testing", "gmail")
+ lines.append("X-DKIM-Authentication-Result: ")
+ ret = EmailServer.getMailResponse(lines, self.ctx)
+ self.assertIsInstance(ret, tuple)
+ self.assertEqual(len(ret), 2)
+ self.assertEqual(ret[0], None)
+ self.assertEqual(ret[1], None)
+ lines[0] = self.lines[0] % ("testing", "example")
+ ret = EmailServer.getMailResponse(lines, self.ctx)
+ self.assertIsInstance(ret, tuple)
+ self.assertEqual(len(ret), 2)
+ self.assertEqual(ret[0], "testing at example.com")
+ self.assertIsInstance(ret[1], StringIO)
+ mail = ret[1].getvalue()
+ self.assertNotEqual(mail.find("no bridges currently"), -1)
+
+ def test_getMailResponseMailContent(self):
+ lines = copy.copy(self.lines)
+ lines[0] = self.lines[0] % ("testing", "example")
+ lines.append("transport obfs")
+ ret = EmailServer.getMailResponse(lines, self.ctx)
+ self.assertIsInstance(ret, tuple)
+ self.assertEqual(len(ret), 2)
+ self.assertEqual(ret[0], "testing at example.com")
+ self.assertIsInstance(ret[1], StringIO)
+ mail = ret[1].getvalue()
+ self.assertNotEqual(mail.find("no bridges currently"), -1)
+ lines.append("transport obfs")
+ lines.append("unblocked webz")
+ ret = EmailServer.getMailResponse(lines, self.ctx)
+ self.assertIsInstance(ret, tuple)
+ self.assertEqual(len(ret), 2)
+ self.assertEqual(ret[0], "testing at example.com")
+ self.assertIsInstance(ret[1], StringIO)
+ mail = ret[1].getvalue()
+ self.assertNotEqual(mail.find("no bridges currently"), -1)
+ lines.append("ipv6")
+ ret = EmailServer.getMailResponse(lines, self.ctx)
+ self.assertIsInstance(ret, tuple)
+ self.assertEqual(len(ret), 2)
+ self.assertEqual(ret[0], "testing at example.com")
+ self.assertIsInstance(ret[1], StringIO)
+ mail = ret[1].getvalue()
+ self.assertNotEqual(mail.find("no bridges currently"), -1)
+
+class EmailServerServiceTests(unittest.TestCase):
+ def setUp(self):
+ configuration = {}
+ TEST_CONFIG_FILE.seek(0)
+ compiled = compile(TEST_CONFIG_FILE.read(), '<string>', 'exec')
+ exec compiled in configuration
+ self.config = Conf(**configuration)
+
+ # TODO: Add headers if we start validating them
+ self.lines = ["From: %s@%s.com", "To: %s at example.net",
+ "Subject: testing", "\n", "get bridges"]
+ self.distributor = FakeDistributor('key', {}, {}, [])
+ self.ctx = MailContext(self.config, self.distributor, NoSchedule())
+
+ def test_receiveMail(self):
+ self.skip = True
+ raise unittest.SkipTest("Not finished yet")
+ from twisted.internet import reactor
+ EmailServer.addSMTPServer(self.config, self.distributor, NoSchedule)
More information about the tor-commits
mailing list