1 # This file is part of python-rwhoisd
3 # Copyright (C) 2008 David E. Blacka
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
10 # This program is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
23 import unittest, types
25 class MemIndexTest(unittest.TestCase):
27 source = [ ("foo", "foo-id"), ("bar", "bar-id"), ("baz", "baz-id"),
28 ("foobar", "foo-id-2"), ("barnone", "bar-id-2"),
32 self.memindex = MemIndex.MemIndex()
33 self.memindex.addlist(self.source)
35 def testDirectMatch(self):
36 for key, val in self.source:
37 res = self.memindex.find(key)
38 self.assertEquals(res, [val])
40 def testPrefixMatch(self):
41 res = self.memindex.find("foo", 1)
42 self.assertEquals(res, ["foo-id", "foo-id-2"])
43 res = self.memindex.find("barn", 1)
44 self.assertEquals(res, ["bar-id-2"])
46 def testMaxMatch(self):
47 res = self.memindex.find("foo", 1, 1)
48 self.assertEquals(res, ["foo-id"])
51 self.memindex.add("bork", "bork-id")
52 res = self.memindex.find("b", 1)
53 # note, values will come back in the alphabetical order of the
55 self.assertEquals(res, ["bar-id", "bar-id-2", "baz-id", "bork-id"])
58 class CidrMemIndexTest(unittest.TestCase):
60 source = [ ("127.0.0.1/24", "net-local-1"),
61 ("127.0.0.1/32", "net-local-2"),
62 ("24.36.191.0/24", "net-foo-c"),
63 ("24.36.191.32/27", "net-foo-sub-c"),
64 ("24.36.0/16", "net-foo-b"),
65 ("3ffe:4:5::0/48", "net-foo-d6"),
66 ("3ffe:4:5:6::0/64", "net-foo-e6"),
67 ("48.12.6.0 - 48.12.6.95", "net-bar-1") ]
70 self.ci = MemIndex.CidrMemIndex()
71 self.ci.addlist(self.source)
72 self.ci.add(Cidr.new("216.168.224.0", 22), "net-vrsn-1")
73 self.ci.add(Cidr.new("216.168.252.1", 32), "net-vrsn-2")
75 def testFindExact(self):
76 res = self.ci.find_exact("127.0.0.0/24")
77 self.assertEquals(res, ["net-local-1"])
78 res = self.ci.find_exact(Cidr.new("216.168.224.0/22"))
79 self.assertEquals(res, ["net-vrsn-1"])
81 res = self.ci.find_exact("127.0.0.16/32")
82 self.assertEquals(res, [])
83 res = self.ci.find_exact("3ffe:0004:0005:0::0/48")
84 self.assertEquals(res, ["net-foo-d6"])
86 def testFindSupernets(self):
87 res = self.ci.find_supernets("127.0.0.16/32")
88 self.assertEquals(res, ["net-local-1"])
89 res = self.ci.find_supernets("127.0.0.1")
90 self.assertEquals(res, ["net-local-2", "net-local-1"])
91 res = self.ci.find_supernets(Cidr.valid_cidr("24.36.191.63"))
92 self.assertEquals(res, ["net-foo-sub-c", "net-foo-c", "net-foo-b"])
93 res = self.ci.find_supernets("48.12.6.92")
94 self.assertEquals(res, ["net-bar-1"])
95 res = self.ci.find_supernets("24.0.0.0/8")
96 self.assertEquals(res, [])
98 def testFindSubnets(self):
99 res = self.ci.find_subnets("127.0.0.0/24")
100 self.assertEquals(res, ["net-local-2", "net-local-1"])
101 res = self.ci.find_subnets("24.36.128.0/17")
102 self.assertEquals(res, ["net-foo-sub-c", "net-foo-c"])
103 res = self.ci.find_subnets("24.36.0/17")
104 self.assertEquals(res, [])
105 res = self.ci.find_subnets("3ffe:4::/32")
106 self.assertEquals(res, ["net-foo-e6", "net-foo-d6"])
107 res = self.ci.find_subnets("48.12.6.0/24")
108 self.assertEquals(res, ["net-bar-1"])
109 res = self.ci.find_subnets("216.168.224.0/19")
110 self.assertEquals(res, ["net-vrsn-1", "net-vrsn-2"])
113 res = self.ci.find("24.36.191.63")
114 self.assertEquals(res, ["net-foo-sub-c"])
115 res = self.ci.find("24.36.191.63", True, 2)
116 self.assertEquals(res, ["net-foo-sub-c", "net-foo-c"])
117 res = self.ci.find("24.36.191.32/27")
118 self.assertEquals(res, ["net-foo-sub-c"])
119 res = self.ci.find("216.168.252.1")
120 self.assertEquals(res, ["net-vrsn-2"])
123 class ComboMemIndexTest(unittest.TestCase):
124 source = [ ("127.0.0.1/24", "net-local-1"),
125 ("127.0.0.1/32", "net-local-2"),
126 ("3ffe:4:5::0/48", "net-foo-d6"),
127 ("3ffe:4:5:6::0/64", "net-foo-e6"),
128 ("48.12.6.0 - 48.12.6.95", "net-bar-1"),
129 ("foo", "foo-id"), ("bar", "bar-id"), ("baz", "baz-id"),
130 ("foobar", "foo-id-2"), ("barnone", "bar-id-2"),
134 self.ci = MemIndex.ComboMemIndex()
135 self.ci.addlist(self.source)
138 res = self.ci.find("foo")
139 self.assertEquals(res, ["foo-id"])
140 res = self.ci.find("foo", True)
141 self.assertEquals(res, ["foo-id", "foo-id-2"])
142 res = self.ci.find("127.0.0.8")
143 self.assertEquals(res, ["net-local-1"])
144 res = self.ci.find("3ffe:4:5:6:7:8::ffff")
145 self.assertEquals(res, ["net-foo-e6"])
146 res = self.ci.find("3ffe:4:5:6:7:8::ffff", True)
147 self.assertEquals(res, ["net-foo-e6", "net-foo-d6"])
150 if __name__ == "__main__":