File: LookupTests.py

package info (click to toggle)
straw 0.27-0.1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 1,972 kB
  • ctags: 2,318
  • sloc: python: 13,450; ansic: 107; makefile: 21
file content (110 lines) | stat: -rwxr-xr-x 4,300 bytes parent folder | download | duplicates (2)
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()