l = self._conv_key_value(i.key, i.value)
res_list.append(l)
+ # flatten the list of lists of tuples to just a list of tuples
+ res_list = [ x for y in res_list for x in y ]
MemIndex.addlist(self, res_list)
return
if not isinstance(other, type(self)): return False
return self.key == other.key and self.value == other.value
-if __name__ == "__main__":
-
- source = [ ("foo", "foo-id"), ("bar", "bar-id"), ("baz", "baz-id"),
- ("foobar", "foo-id-2"), ("barnone", "bar-id-2"),
- ("zygnax", "z-id") ]
-
- mi = MemIndex()
- mi.addlist(source)
-
- print "finding foobar:"
- res = mi.find("foobar")
- print res
-
- print "finding foo*:"
- res = mi.find("foo", 1)
- print res
-
- print "finding baz:"
- res = mi.find("baz")
- print res
-
- print "adding bork"
- mi.add("bork", "bork-id")
-
- print "finding b*:"
- res = mi.find("b", 1)
- print res
-
- ci = CidrMemIndex()
-
- ci.add("127.0.0.1/24", "net-local-1");
- ci.add("127.0.0.1/32", "net-local-2");
- ci.add(Cidr.new("216.168.224.0", 22), "net-vrsn-1")
- ci.add(Cidr.new("216.168.252.1", 32), "net-vrsn-2")
- ci.add("24.36.191.0/24", "net-foo-c")
- ci.add("24.36.191.32/27", "net-foo-sub-c")
- ci.add("24.36/16", "net-foo-b")
- ci.add("3ffe:4:5::0/48", "net-foo-d6")
- ci.add("3ffe:4:5:6::0/64", "net-foo-e6")
- ci.add("48.12.6.0 - 48.12.6.95", "net-bar-1")
-
- print "finding exactly 127.0.0.0/24"
- res = ci.find(Cidr.new("127.0.0.0/24"))
- print res
-
- print "finding exactly 127.0.0.16/32"
- res = ci.find(Cidr.new("127.0.0.16/32"))
- print res
-
- print "finding exactly 3ffe:4:5:6::0/64"
- res = ci.find(Cidr.valid_cidr("3ffe:4:5:6::/64"))
- print res
-
- print "finding supernets of 127.0.0.16/32"
- res = ci.find_supernets(Cidr.new("127.0.0.16/32"))
- print res
-
- print "finding supernets of 24.36.191.32/27"
- res = ci.find(Cidr.new("24.36.191.32/27"), 1)
- print res
-
- print "finding supernets of 24.36.191.33/27"
- res = ci.find_supernets(Cidr.new("24.36.191.33/27"))
- print res
-
- print "finding supernets of 24.36.191.64/27"
- res = ci.find_supernets(Cidr.new("24.36.191.64/27"))
- print res
-
- print "finding supernets of 3ffe:4:5:6:7::0/80"
- res = ci.find_supernets(Cidr.valid_cidr("3ffe:4:5:6:7::0/80"))
- print res
-
- print "finding supernets of 48.12.6.90"
- res = ci.find_supernets(Cidr.valid_cidr("48.12.6.90"))
- print res
-
- print "finding subnets of 127.0/16"
- res = ci.find_subnets(Cidr.new("127.0/16"))
- print res
-
- print "finding subnets of 3ffe:4::0/32"
- res = ci.find_subnets(Cidr.valid_cidr("3ffe:4::0/32"))
- print res
-
- print "finding subnets of 48.12.0.0/16"
- res = ci.find_subnets(Cidr.valid_cidr("48.12.0.0/16"))
- print res
--- /dev/null
+# This file is part of python-rwhoisd
+#
+# Copyright (C) 2008 David E. Blacka
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
+
+
+import path
+import MemIndex, Cidr
+import unittest, types
+
+class MemIndexTest(unittest.TestCase):
+
+ source = [ ("foo", "foo-id"), ("bar", "bar-id"), ("baz", "baz-id"),
+ ("foobar", "foo-id-2"), ("barnone", "bar-id-2"),
+ ("zygnax", "z-id") ]
+
+ def setUp(self):
+ self.memindex = MemIndex.MemIndex()
+ self.memindex.addlist(self.source)
+
+ def testDirectMatch(self):
+ for key, val in self.source:
+ res = self.memindex.find(key)
+ self.assertEquals(res, [val])
+
+ def testPrefixMatch(self):
+ res = self.memindex.find("foo", 1)
+ self.assertEquals(res, ["foo-id", "foo-id-2"])
+ res = self.memindex.find("barn", 1)
+ self.assertEquals(res, ["bar-id-2"])
+
+ def testMaxMatch(self):
+ res = self.memindex.find("foo", 1, 1)
+ self.assertEquals(res, ["foo-id"])
+
+ def testAdd(self):
+ self.memindex.add("bork", "bork-id")
+ res = self.memindex.find("b", 1)
+ # note, values will come back in the alphabetical order of the
+ # keys.
+ self.assertEquals(res, ["bar-id", "bar-id-2", "baz-id", "bork-id"])
+
+
+class CidrMemIndexTest(unittest.TestCase):
+
+ source = [ ("127.0.0.1/24", "net-local-1"),
+ ("127.0.0.1/32", "net-local-2"),
+ ("24.36.191.0/24", "net-foo-c"),
+ ("24.36.191.32/27", "net-foo-sub-c"),
+ ("24.36.0/16", "net-foo-b"),
+ ("3ffe:4:5::0/48", "net-foo-d6"),
+ ("3ffe:4:5:6::0/64", "net-foo-e6"),
+ ("48.12.6.0 - 48.12.6.95", "net-bar-1") ]
+
+ def setUp(self):
+ self.ci = MemIndex.CidrMemIndex()
+ self.ci.addlist(self.source)
+ self.ci.add(Cidr.new("216.168.224.0", 22), "net-vrsn-1")
+ self.ci.add(Cidr.new("216.168.252.1", 32), "net-vrsn-2")
+
+ def testFindExact(self):
+ res = self.ci.find_exact("127.0.0.0/24")
+ self.assertEquals(res, ["net-local-1"])
+ res = self.ci.find_exact(Cidr.new("216.168.224.0/22"))
+ self.assertEquals(res, ["net-vrsn-1"])
+ # isn't in the index.
+ res = self.ci.find_exact("127.0.0.16/32")
+ self.assertEquals(res, [])
+ res = self.ci.find_exact("3ffe:0004:0005:0::0/48")
+ self.assertEquals(res, ["net-foo-d6"])
+
+ def testFindSupernets(self):
+ res = self.ci.find_supernets("127.0.0.16/32")
+ self.assertEquals(res, ["net-local-1"])
+ res = self.ci.find_supernets("127.0.0.1")
+ self.assertEquals(res, ["net-local-2", "net-local-1"])
+ res = self.ci.find_supernets(Cidr.valid_cidr("24.36.191.63"))
+ self.assertEquals(res, ["net-foo-sub-c", "net-foo-c", "net-foo-b"])
+ res = self.ci.find_supernets("48.12.6.92")
+ self.assertEquals(res, ["net-bar-1"])
+ res = self.ci.find_supernets("24.0.0.0/8")
+ self.assertEquals(res, [])
+
+ def testFindSubnets(self):
+ res = self.ci.find_subnets("127.0.0.0/24")
+ self.assertEquals(res, ["net-local-2", "net-local-1"])
+ res = self.ci.find_subnets("24.36.128.0/17")
+ self.assertEquals(res, ["net-foo-sub-c", "net-foo-c"])
+ res = self.ci.find_subnets("24.36.0/17")
+ self.assertEquals(res, [])
+ res = self.ci.find_subnets("3ffe:4::/32")
+ self.assertEquals(res, ["net-foo-e6", "net-foo-d6"])
+ res = self.ci.find_subnets("48.12.6.0/24")
+ self.assertEquals(res, ["net-bar-1"])
+ res = self.ci.find_subnets("216.168.224.0/19")
+ self.assertEquals(res, ["net-vrsn-1", "net-vrsn-2"])
+
+ def testFind(self):
+ res = self.ci.find("24.36.191.63")
+ self.assertEquals(res, ["net-foo-sub-c"])
+ res = self.ci.find("24.36.191.63", True, 2)
+ self.assertEquals(res, ["net-foo-sub-c", "net-foo-c"])
+ res = self.ci.find("24.36.191.32/27")
+ self.assertEquals(res, ["net-foo-sub-c"])
+ res = self.ci.find("216.168.252.1")
+ self.assertEquals(res, ["net-vrsn-2"])
+
+
+class ComboMemIndexTest(unittest.TestCase):
+ source = [ ("127.0.0.1/24", "net-local-1"),
+ ("127.0.0.1/32", "net-local-2"),
+ ("3ffe:4:5::0/48", "net-foo-d6"),
+ ("3ffe:4:5:6::0/64", "net-foo-e6"),
+ ("48.12.6.0 - 48.12.6.95", "net-bar-1"),
+ ("foo", "foo-id"), ("bar", "bar-id"), ("baz", "baz-id"),
+ ("foobar", "foo-id-2"), ("barnone", "bar-id-2"),
+ ("zygnax", "z-id") ]
+
+ def setUp(self):
+ self.ci = MemIndex.ComboMemIndex()
+ self.ci.addlist(self.source)
+
+ def testFind(self):
+ res = self.ci.find("foo")
+ self.assertEquals(res, ["foo-id"])
+ res = self.ci.find("foo", True)
+ self.assertEquals(res, ["foo-id", "foo-id-2"])
+ res = self.ci.find("127.0.0.8")
+ self.assertEquals(res, ["net-local-1"])
+ res = self.ci.find("3ffe:4:5:6:7:8::ffff")
+ self.assertEquals(res, ["net-foo-e6"])
+ res = self.ci.find("3ffe:4:5:6:7:8::ffff", True)
+ self.assertEquals(res, ["net-foo-e6", "net-foo-d6"])
+
+
+if __name__ == "__main__":
+ unittest.main()