123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- import isc.log
- from isc.dns import *
- from isc.datasrc import DataSourceClient
- from isc.ddns.zone_config import *
- import isc.acl.dns
- from isc.acl.acl import ACCEPT, REJECT, DROP, LoaderError
- import unittest
- import socket
- TEST_ZONE_NAME = Name('example.org')
- TEST_SECONDARY_ZONE_NAME = Name('example.com')
- TEST_RRCLASS = RRClass.IN()
- TEST_TSIG_KEY = TSIGKey("example.com:SFuWd/q99SzF8Yzd1QbB9g==")
- TEST_ACL_CONTEXT = isc.acl.dns.RequestContext(
- socket.getaddrinfo("192.0.2.1", 1234, 0, socket.SOCK_DGRAM,
- socket.IPPROTO_UDP, socket.AI_NUMERICHOST)[0][4])
- class FakeDataSourceClient:
- '''Faked data source client used in the ZoneConfigTest.
- It emulates isc.datasrc.DataSourceClient, but only has to provide
- the find_zone() interface (and only the first element of the return
- value matters). By default it returns 'SUCCESS' (exact match) for
- any input. It can be dynamically customized via the set_find_result()
- method.
- '''
- def __init__(self):
- self.__find_result = DataSourceClient.SUCCESS
- def find_zone(self, zname):
- return (self.__find_result, None)
- def set_find_result(self, result):
- self.__find_result = result
- class ZoneConfigTest(unittest.TestCase):
- '''Some basic tests for the ZoneConfig class.'''
- def setUp(self):
- self.__datasrc_client = FakeDataSourceClient()
- self.zconfig = ZoneConfig([(TEST_SECONDARY_ZONE_NAME, TEST_RRCLASS)],
- TEST_RRCLASS, self.__datasrc_client)
- def test_find_zone(self):
-
- self.assertEqual((ZONE_PRIMARY, self.__datasrc_client),
- (self.zconfig.find_zone(TEST_ZONE_NAME, TEST_RRCLASS)))
-
- self.assertEqual((ZONE_SECONDARY, None),
- (self.zconfig.find_zone(TEST_SECONDARY_ZONE_NAME,
- TEST_RRCLASS)))
-
- self.__datasrc_client.set_find_result(DataSourceClient.NOTFOUND)
- self.assertEqual((ZONE_NOTFOUND, None),
- (self.zconfig.find_zone(Name('example'),
- TEST_RRCLASS)))
-
- self.__datasrc_client.set_find_result(DataSourceClient.PARTIALMATCH)
- self.assertEqual((ZONE_NOTFOUND, None),
- (self.zconfig.find_zone(Name('example'),
- TEST_RRCLASS)))
-
-
-
- self.__datasrc_client.set_find_result(DataSourceClient.NOTFOUND)
- self.assertEqual((ZONE_NOTFOUND, None),
- (self.zconfig.find_zone(TEST_ZONE_NAME,
- TEST_RRCLASS)))
-
- self.__datasrc_client.set_find_result(DataSourceClient.SUCCESS)
- zconfig = ZoneConfig([(TEST_SECONDARY_ZONE_NAME, TEST_RRCLASS)],
- RRClass.CH(), self.__datasrc_client)
- self.assertEqual((ZONE_NOTFOUND, None),
- (zconfig.find_zone(TEST_ZONE_NAME, TEST_RRCLASS)))
-
- zconfig = ZoneConfig([(TEST_ZONE_NAME, TEST_RRCLASS)],
- RRClass.CH(), self.__datasrc_client)
- self.assertEqual((ZONE_NOTFOUND, None),
- (zconfig.find_zone(TEST_ZONE_NAME, TEST_RRCLASS)))
-
-
- zconfig = ZoneConfig([], TEST_RRCLASS, self.__datasrc_client)
- self.assertEqual((ZONE_PRIMARY, self.__datasrc_client),
- self.zconfig.find_zone(TEST_ZONE_NAME, TEST_RRCLASS))
-
-
- zconfig = ZoneConfig([(TEST_SECONDARY_ZONE_NAME, TEST_RRCLASS),
- (Name('example'), TEST_RRCLASS),
- (Name('sub.example.org'), TEST_RRCLASS),
- (TEST_ZONE_NAME, RRClass.CH())],
- TEST_RRCLASS, self.__datasrc_client)
- self.assertEqual((ZONE_PRIMARY, self.__datasrc_client),
- self.zconfig.find_zone(TEST_ZONE_NAME, TEST_RRCLASS))
-
-
- zconfig = ZoneConfig([(TEST_SECONDARY_ZONE_NAME, TEST_RRCLASS),
- (TEST_SECONDARY_ZONE_NAME, TEST_RRCLASS)],
- TEST_RRCLASS, self.__datasrc_client)
- self.assertEqual((ZONE_PRIMARY, self.__datasrc_client),
- self.zconfig.find_zone(TEST_ZONE_NAME, TEST_RRCLASS))
- class ACLConfigTest(unittest.TestCase):
- def setUp(self):
- self.__datasrc_client = FakeDataSourceClient()
- self.__zconfig = ZoneConfig([(TEST_SECONDARY_ZONE_NAME, TEST_RRCLASS)],
- TEST_RRCLASS, self.__datasrc_client)
- def test_get_update_acl(self):
-
- acl = self.__zconfig.get_update_acl(TEST_ZONE_NAME, TEST_RRCLASS)
- self.assertEqual(REJECT, acl.execute(TEST_ACL_CONTEXT))
-
-
- acl_map = {(TEST_ZONE_NAME, TEST_RRCLASS):
- REQUEST_LOADER.load([{"action": "ACCEPT"}])}
- self.__zconfig.set_update_acl_map(acl_map)
- acl = self.__zconfig.get_update_acl(TEST_ZONE_NAME, TEST_RRCLASS)
- self.assertEqual(ACCEPT, acl.execute(TEST_ACL_CONTEXT))
-
- acl = self.__zconfig.get_update_acl(Name('example.com'), TEST_RRCLASS)
- self.assertEqual(REJECT, acl.execute(TEST_ACL_CONTEXT))
- acl = self.__zconfig.get_update_acl(TEST_ZONE_NAME, RRClass.CH())
- self.assertEqual(REJECT, acl.execute(TEST_ACL_CONTEXT))
-
-
- acl_map = {(Name('example.com'), TEST_RRCLASS):
- REQUEST_LOADER.load([{"action": "REJECT"}]),
- (TEST_ZONE_NAME, TEST_RRCLASS):
- REQUEST_LOADER.load([{"action": "ACCEPT"}]),
- (TEST_ZONE_NAME, RRClass.CH()):
- REQUEST_LOADER.load([{"action": "DROP"}])}
- self.__zconfig.set_update_acl_map(acl_map)
- acl = self.__zconfig.get_update_acl(TEST_ZONE_NAME, TEST_RRCLASS)
- self.assertEqual(ACCEPT, acl.execute(TEST_ACL_CONTEXT))
- acl = self.__zconfig.get_update_acl(Name('example.com'), TEST_RRCLASS)
- self.assertEqual(REJECT, acl.execute(TEST_ACL_CONTEXT))
- acl = self.__zconfig.get_update_acl(TEST_ZONE_NAME, RRClass.CH())
- self.assertEqual(DROP, acl.execute(TEST_ACL_CONTEXT))
- if __name__ == "__main__":
- isc.log.init("bind10")
- isc.log.resetUnitTestRootLogger()
- unittest.main()
|