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