예제 #1
0
    def test_domain(self):
        """
        test suffix domain functionality:
        """

        reg = Registry(TEST_DOMAIN)

        self.assertIsNone(
            reg._mappings.get(PREFIX_NAME + TEST_KEY + "." + TEST_DOMAIN))
        self.assertIsNone(
            reg._mappings.get(PREFIX_NAME + TEST_KEY2 + "." + TEST_DOMAIN))

        log.info("Adding mapping %s => %s", TEST_KEY, TEST_NAMES)
        reg.add(PREFIX_NAME + TEST_KEY, TEST_NAMES)
        log.debug('_mapping %s' % reg._mappings)
        self.assertIsNotNone(
            reg._mappings.get(PREFIX_NAME + TEST_KEY + "." + TEST_DOMAIN))
        self.assertIsNone(
            reg._mappings.get(PREFIX_NAME + TEST_KEY2 + "." + TEST_DOMAIN))

        log.info("Removing mapping %s => %s", TEST_KEY, TEST_NAMES)
        reg.rename(TEST_KEY, TEST_KEY2)
        self.assertIsNone(
            reg._mappings.get(PREFIX_NAME + TEST_KEY + "." + TEST_DOMAIN))
        self.assertIsNotNone(
            reg._mappings.get(PREFIX_NAME + TEST_KEY2 + "." + TEST_DOMAIN))
예제 #2
0
 def _resolve(self, name):
     log.debug('resolve name=%s', name)
     if not self._resolver:
         return None
     try:
         return self._resolver.gethostbyname(name)
     except socket.gaierror as e:
         log.debug('Host by name could not be resolved')
         msg = str(e)
         if not contains(msg, 'ETIMEOUT', 'ENOTFOUND'):
             print(msg)
예제 #3
0
 def _resolve(self, name):
     log.debug('resolve name=%s', name)
     if not self._resolver:
         return None
     try:
         return self._resolver.gethostbyname(name)
     except socket.gaierror as e:
         log.debug('Host by name could not be resolved')
         msg = str(e)
         if not contains(msg, 'ETIMEOUT', 'ENOTFOUND'):
             print(msg)
예제 #4
0
 def handle(self, data, peer):
     rec = DNSRecord.parse(data)
     addr = None
     if rec.q.qtype in (QTYPE.A, QTYPE.AAAA):
         log.debug('Quering DNS')
         addr = self._registry.resolve(rec.q.qname.idna())
         if not addr:
             strArr = []
             for l in rec.q.qname.label:
                 strArr.append(str(l, 'utf-8'))
             domainName = '.'.join(strArr)
             addr = self._resolve(domainName)
     log.debug('Sending request to %s', addr)
     self.socket.sendto(self._reply(rec, addr), peer)
예제 #5
0
 def handle(self, data, peer):
     rec = DNSRecord.parse(data)
     addr = None
     if rec.q.qtype in (QTYPE.A, QTYPE.AAAA):
         log.debug('Quering DNS')
         addr = self._registry.resolve(rec.q.qname.idna())
         if not addr:
             strArr = []
             for l in rec.q.qname.label:
                 strArr.append(str(l,'utf-8'))
             domainName = '.'.join(strArr)
             addr = self._resolve(domainName)
     log.debug('Sending request to %s', addr)
     self.socket.sendto(self._reply(rec, addr), peer)
예제 #6
0
    def test_registry_resolve(self):
        """
        test resolve method
        """

        reg = Registry()

        log.info("Adding %s", TEST_ADDR)
        reg._activate(TEST_NAMES2, TEST_ADDR, TEST_KEY)

        for name in TEST_NAMES:
            addrs = reg.resolve(name)
            log.debug('resolve %s result %s', name, addrs)
            self.assertIsNotNone(addrs)
            self.assertEqual(addrs, [TEST_ADDR])

        addrs = reg.resolve("foo.it")
        self.assertIsNone(addrs)
예제 #7
0
    def test_registry_domains_static(self):
        """
        test activate_static / deactivate_static functionality:
        this is to map a domain name to a particular address
        through the REST Api
        """

        reg = Registry()

        for domainName in TEST_NAMES:
            self.assertIsNone(reg._domains.get(domainName))

        log.info("Adding static %s", TEST_ADDR)
        reg.activate_static(TEST_NAMES2[0], TEST_ADDR)
        self.assertIsNotNone(reg._domains.get(TEST_NAMES[0]))

        log.info("Removing static %s", TEST_ADDR)
        reg.deactivate_static(TEST_NAMES2[0], TEST_ADDR)
        log.debug(reg.dump())
        self.assertIsNone(reg._domains.get(TEST_NAMES[0]))
예제 #8
0
    def test_registry_domains(self):
        """
        test activate / deactivate functionality:
        this is to map a domain name to a particular address
        you can inspect the DNS tree with print(reg.dump())
        """

        reg = Registry()

        for domainName in TEST_NAMES:
            self.assertIsNone(reg._domains.get(domainName))

        log.info("Adding %s", TEST_ADDR)
        reg._activate(TEST_NAMES2, TEST_ADDR, TEST_KEY)
        for domainName in TEST_NAMES:
            self.assertIsNotNone(reg._domains.get(domainName))

        log.info("Removing %s", TEST_ADDR)
        reg._deactivate(TEST_NAMES2, TEST_ADDR, TEST_KEY)
        log.debug(reg.dump())
        for domainName in TEST_NAMES:
            log.debug("name %s", domainName)
            self.assertIsNone(reg._domains.get(domainName))
예제 #9
0
 def resolve(self, name):
     'Resolves the address for this name, if any'
     log.debug('Resolve %s', name)
     with self._lock:
         res = self._domains.get(name)
         if res:
             addrs = [a for a, _ in res]
             log.debug('resolved %s -> %s', name, ', '.join(map(str,addrs)))
             return addrs
         else:
             log.debug('no mapping for %s' % name)
예제 #10
0
 def resolve(self, name):
     'Resolves the address for this name, if any'
     log.debug('Resolve %s', name)
     with self._lock:
         res = self._domains.get(name)
         if res:
             addrs = [a for a, _ in res]
             log.debug('resolved %s -> %s', name, ', '.join(map(str,
                                                                addrs)))
             return addrs
         else:
             log.debug('no mapping for %s' % name)