1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
#!/usr/bin/python
import unittest
import sys
import time
sys.path.insert(0, '../src/lib')
import LookupManager
class LookupTestCase(unittest.TestCase):
def setUp(self):
self.lm = LookupManager.get_instance()
self.timeout = 60
self.extraNames = (
"art.gnome.org", "b9.com", "blog.neoteny.com",
"diveintomark.org", "freshmeat.net", "home.comcast.net",
"imperialviolet.org", "inessential.com", "kode-fu.com",
"kt.zork.net", "lambda.weblogs.com",
"morenews.blogspot.com", "mpt.phrasewise.com",
"online.effbot.org", "patricklogan.blogspot.com",
"people.enginesofcreation.ie", "polydistortion.net",
"pragprog.com", "primates.ximian.com",
"radio.weblogs.com", "rover.cs.northwestern.edu",
"slashdot.org", "tbray.org", "toulouse.amber.org",
"usefulinc.com", "weblog.infoworld.com",
"weblogs.mozillazine.org", "wmf.editthispage.com",
"ww.telent.net", "www.advogato.org", "www.amk.ca",
"www.artima.com", "www.benhammersley.com",
"www.blackbeltjones.com", "www.burtonini.com",
"www.deadlybloodyserious.com", "www.debianplanet.net",
"www.gnomedesktop.org", "www.hole.fi", "www.iki.fi",
"www.inkstain.net", "www.lemonodor.com",
"www.markokarppinen.com", "www.markwatson.com",
"www.merrells.com", "www.mozillazine.org", "www.nat.org",
"www.nongnu.org", "www.orbtech.com",
"www.playbynumbers.com", "www.python.org",
"www.rekaksois.com", "www.s2.org", "www.sidhe.org",
"www.spacetoday.net", "www.sweetcode.org",
"www.textism.com", "www.toolshed.com", "www.zanthan.com")
def _callback(self, name, ip, data=None):
self.response = (name, ip)
def testGoodARecord(self):
self.response = None
self.lm.lookup('www.google.com', self._callback)
now = time.time()
while not self.response:
assert time.time() - now < self.timeout, 'Lookup timed out'
self.lm.poll(1)
assert self.response[1] is not None
def testBadARecord(self):
self.response = None
# this has, at least at some point, returned a cname even though
# asked for an a record
self.lm.lookup('www.morestuff4less.com', self._callback)
now = time.time()
while not self.response:
assert time.time() - now < self.timeout, 'Lookup timed out'
self.lm.poll(1)
assert self.response[1] is not None
def testEmptyDomain(self):
self.response = None
self.lm.lookup('', self._callback)
now = time.time()
while not self.response:
assert time.time() - now < self.timeout, 'Lookup timed out'
self.lm.poll(1)
assert self.response[1] is None
def testInvalidDomain(self):
self.response = None
self.lm.lookup('www.sdkfskdjjfsd.xcv', self._callback)
now = time.time()
while not self.response:
assert time.time() - now < self.timeout, 'Lookup timed out'
self.lm.poll(1)
assert self.response[1] is None
def _callback_multiple(self, name, ip, data=None):
print "received %s for %s" % (name, ip)
self.multiple_responses[name] = (name, ip)
def testExtraNames(self):
self.multiple_responses = {}
for n in self.extraNames:
self.multiple_responses[n] = None
self.lm.lookup(n, self._callback_multiple)
now = time.time()
timeout = self.timeout * len(self.extraNames)
while None in self.multiple_responses.values():
assert time.time() - now < self.timeout, 'Lookup timed out'
self.lm.poll(1)
assert None not in self.multiple_responses.values()
def suite():
suite = unittest.TestSuite()
suite.addTest(LookupTestCase('testGoodARecord'))
suite.addTest(LookupTestCase('testBadARecord'))
suite.addTest(LookupTestCase('testEmptyDomain'))
suite.addTest(LookupTestCase('testInvalidDomain'))
suite.addTest(LookupTestCase('testExtraNames'))
return suite
if __name__ == '__main__':
unittest.main()
|