Testcase for greylist

This commit is contained in:
Stuart Gathman
2013-02-16 05:40:46 +00:00
parent b12c4c9746
commit 3fb9beb5c0
3 changed files with 48 additions and 2 deletions
+2 -2
View File
@@ -35,7 +35,7 @@ class Greylist(object):
self.dbp = shelve.open(dbname,'c',protocol=2) self.dbp = shelve.open(dbname,'c',protocol=2)
self.lock = thread.allocate_lock() self.lock = thread.allocate_lock()
def check(self,ip,sender,recipient): def check(self,ip,sender,recipient,timeinc=0):
"Return number of allowed messages for greylist triple." "Return number of allowed messages for greylist triple."
sender = quoteAddress(sender) sender = quoteAddress(sender)
recipient = quoteAddress(recipient) recipient = quoteAddress(recipient)
@@ -45,7 +45,7 @@ class Greylist(object):
dbp = self.dbp dbp = self.dbp
try: try:
r = dbp[key] r = dbp[key]
now = time.time() now = time.time() + timeinc
if now > r.lastseen + self.greylist_retain: if now > r.lastseen + self.greylist_retain:
# expired # expired
log.debug('Expired greylist: %s',key) log.debug('Expired greylist: %s',key)
+2
View File
@@ -2,6 +2,7 @@ import unittest
import testmime import testmime
import testsample import testsample
import testutils import testutils
import testgrey
import os import os
def suite(): def suite():
@@ -9,6 +10,7 @@ def suite():
s.addTest(testmime.suite()) s.addTest(testmime.suite())
s.addTest(testsample.suite()) s.addTest(testsample.suite())
s.addTest(testutils.suite()) s.addTest(testutils.suite())
s.addTest(testgrey.suite())
return s return s
if __name__ == '__main__': if __name__ == '__main__':
+44
View File
@@ -0,0 +1,44 @@
import unittest
import doctest
import os
import Milter.greylist
from Milter.greylist import Greylist
class GreylistTestCase(unittest.TestCase):
def setUp(self):
self.fname = 'test.db'
def tearDown(self):
os.remove(self.fname)
def testGrey(self):
grey = Greylist(self.fname)
# first time
rc = grey.check('1.2.3.4','foo@bar.com','baz@spat.com')
self.failUnless(rc == 0)
# not in window yet
rc = grey.check('1.2.3.4','foo@bar.com','baz@spat.com',timeinc=5*60)
self.failUnless(rc == 0)
# within window
rc = grey.check('1.2.3.4','foo@bar.com','baz@spat.com',timeinc=15*60)
self.failUnless(rc == 1)
# new triple
rc = grey.check('1.2.3.5','foo@bar.com','baz@spat.com',timeinc=15*60)
self.failUnless(rc == 0)
# seen again
rc = grey.check('1.2.3.4','foo@bar.com','baz@spat.com',timeinc=5*3600)
self.failUnless(rc == 2)
# new one past expire
rc = grey.check('1.2.3.5','foo@bar.com','baz@spat.com',timeinc=5*3600)
self.failUnless(rc == 0)
# original past retain
rc = grey.check('1.2.3.4','foo@bar.com','baz@spat.com',timeinc=37*24*3600)
self.failUnless(rc == 0)
def suite():
s = unittest.makeSuite(GreylistTestCase,'test')
return s
if __name__ == '__main__':
unittest.TextTestRunner().run(suite())