Skip to content

Commit

Permalink
fixup! Move bridgedb.Dist.EmailBasedDistributor → bridgedb.email.dist…
Browse files Browse the repository at this point in the history
…ributor.
  • Loading branch information
isislovecruft committed Apr 21, 2015
1 parent 6493893 commit 3055dff
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 19 deletions.
6 changes: 1 addition & 5 deletions lib/bridgedb/email/distributor.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,10 +100,6 @@ def __init__(self, key, domainmap, domainrules,
def bridgesPerResponse(self, hashring=None):
return super(EmailDistributor, self).bridgesPerResponse(hashring)

def insert(self, bridge):
"""Assign a bridge to this distributor."""
self.hashring.insert(bridge)

def getBridges(self, bridgeRequest, interval):
"""Return a list of bridges to give to a user.
Expand Down Expand Up @@ -166,7 +162,7 @@ def getBridges(self, bridgeRequest, interval):
logging.debug("Cache hit %s" % filtres)
_, ring = self.hashring.filterRings[filtres]
else:
logging.debug("Cache miss %s" % ruleset)
logging.debug("Cache miss %s" % filtres)
key = getHMAC(self.key, "Order-Bridges-In-Ring")
ring = BridgeRing(key, self.answerParameters)
self.hashring.addRing(ring, filtres, byFilters(filtres),
Expand Down
3 changes: 1 addition & 2 deletions lib/bridgedb/test/legacy_Tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -329,8 +329,7 @@ def testDiscountAndPruneBridgeHistory(self):
def testSuite():
suite = unittest.TestSuite()
loader = unittest.TestLoader()

for klass in [SQLStorageTests, EmailBridgeDistTests, BridgeStabilityTests]:
for klass in [SQLStorageTests, BridgeStabilityTests]:
suite.addTest(loader.loadTestsFromTestCase(klass))
return suite

Expand Down
41 changes: 29 additions & 12 deletions lib/bridgedb/test/test_email_distributor.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,17 @@
from __future__ import print_function

import logging
import tempfile
import os

from twisted.trial import unittest

from bridgedb import Storage
from bridgedb.email import distributor
import bridgedb.Storage

from bridgedb.bridges import Bridge
from bridgedb.email.distributor import EmailDistributor
from bridgedb.email.distributor import IgnoreEmail
from bridgedb.email.distributor import TooSoonEmail
from bridgedb.email.request import EmailBridgeRequest
from bridgedb.parse.addr import UnsupportedDomain
from bridgedb.parse.addr import normalizeEmail
Expand All @@ -33,42 +39,53 @@ class EmailDistributorTests(unittest.TestCase):

def setUp(self):
self.fd, self.fname = tempfile.mkstemp()
self.db = bridgedb.Storage.Database(self.fname)
Storage.setDB(self.db)
self.cur = self.db._conn.cursor()
bridgedb.Storage.initializeDBLock()
self.db = bridgedb.Storage.openDatabase(self.fname)
bridgedb.Storage.setDBFilename(self.fname)
self.cur = self.db.cursor()
self.db.close()

self.bridges = BRIDGES
self.key = 'aQpeOFIj8q20s98awfoiq23rpOIjFaqpEWFoij1X'
self.domainmap = {
'example.com': 'example.com',
'dkim.example.com': 'dkim.example.com'},
'dkim.example.com': 'dkim.example.com',
}
self.domainrules = {
'example.com': ['ignore_dots'],
'dkim.example.com': ['dkim', 'ignore_dots']}
'dkim.example.com': ['dkim', 'ignore_dots']
}

def tearDown(self):
self.db.close()
os.close(self.fd)
os.unlink(self.fname)

def makeClientRequest(self, clientEmailAddress):
bridgeRequest = EmailBridgeRequest()
bridgeRequest.client = clientEmailAddress
bridgeRequest.isValid(True)
bridgeRequest.generateFilters()
return bridgeRequest

def test_EmailDistributor_rate_limit(self):
"""A client's first email should return bridges. The second should
return a warning, and the third should receive no response.
"""
dist = EmailDistributor(self.key, self.domainmap, self.domainrules)
[dist.hashring.insert(bridge) for bridge in self.bridges]

bridgeRequest = self.makeClientRequest('abc@example.com')

# The first request should get a response with bridges
bridges = d.getBridges('abc@example.com', 1)
bridges = dist.getBridges(bridgeRequest, 1)
self.assertGreater(len(bridges), 0)
for b in bridges:
self.assertIsInstance(b, Bridge)
[self.assertIsInstance(b, Bridge) for b in bridges]
self.assertEqual(len(bridges), 3)

# The second gets a warning, and the third is ignored
self.assertRaises(TooSoonEmail, d.getBridges, 'abc@example.com', 1)
self.assertRaises(IgnoreEmail, d.getBridges, 'abc@example.com', 1)
self.assertRaises(TooSoonEmail, dist.getBridges, bridgeRequest, 1)
self.assertRaises(IgnoreEmail, dist.getBridges, bridgeRequest, 1)

def test_EmailDistributor_unsupported_domain(self):
"""An unsupported domain should raise an UnsupportedDomain exception."""
Expand Down

0 comments on commit 3055dff

Please sign in to comment.