123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- # Copyright (c) Twisted Matrix Laboratories.
- # See LICENSE for details.
- """
- Tests for L{twisted.names.common}.
- """
- from __future__ import division, absolute_import
- from zope.interface.verify import verifyClass
- from twisted.internet.interfaces import IResolver
- from twisted.trial.unittest import SynchronousTestCase
- from twisted.python.failure import Failure
- from twisted.names.common import ResolverBase
- from twisted.names.dns import EFORMAT, ESERVER, ENAME, ENOTIMP, EREFUSED, Query
- from twisted.names.error import DNSFormatError, DNSServerError, DNSNameError
- from twisted.names.error import DNSNotImplementedError, DNSQueryRefusedError
- from twisted.names.error import DNSUnknownError
- class ExceptionForCodeTests(SynchronousTestCase):
- """
- Tests for L{ResolverBase.exceptionForCode}.
- """
- def setUp(self):
- self.exceptionForCode = ResolverBase().exceptionForCode
- def test_eformat(self):
- """
- L{ResolverBase.exceptionForCode} converts L{EFORMAT} to
- L{DNSFormatError}.
- """
- self.assertIs(self.exceptionForCode(EFORMAT), DNSFormatError)
- def test_eserver(self):
- """
- L{ResolverBase.exceptionForCode} converts L{ESERVER} to
- L{DNSServerError}.
- """
- self.assertIs(self.exceptionForCode(ESERVER), DNSServerError)
- def test_ename(self):
- """
- L{ResolverBase.exceptionForCode} converts L{ENAME} to L{DNSNameError}.
- """
- self.assertIs(self.exceptionForCode(ENAME), DNSNameError)
- def test_enotimp(self):
- """
- L{ResolverBase.exceptionForCode} converts L{ENOTIMP} to
- L{DNSNotImplementedError}.
- """
- self.assertIs(self.exceptionForCode(ENOTIMP), DNSNotImplementedError)
- def test_erefused(self):
- """
- L{ResolverBase.exceptionForCode} converts L{EREFUSED} to
- L{DNSQueryRefusedError}.
- """
- self.assertIs(self.exceptionForCode(EREFUSED), DNSQueryRefusedError)
- def test_other(self):
- """
- L{ResolverBase.exceptionForCode} converts any other response code to
- L{DNSUnknownError}.
- """
- self.assertIs(self.exceptionForCode(object()), DNSUnknownError)
- class QueryTests(SynchronousTestCase):
- """
- Tests for L{ResolverBase.query}.
- """
- def test_resolverBaseProvidesIResolver(self):
- """
- L{ResolverBase} provides the L{IResolver} interface.
- """
- verifyClass(IResolver, ResolverBase)
- def test_typeToMethodDispatch(self):
- """
- L{ResolverBase.query} looks up a method to invoke using the type of the
- query passed to it and the C{typeToMethod} mapping on itself.
- """
- results = []
- resolver = ResolverBase()
- resolver.typeToMethod = {
- 12345: lambda query, timeout: results.append((query, timeout))}
- query = Query(name=b"example.com", type=12345)
- resolver.query(query, 123)
- self.assertEqual([(b"example.com", 123)], results)
- def test_typeToMethodResult(self):
- """
- L{ResolverBase.query} returns a L{Deferred} which fires with the result
- of the method found in the C{typeToMethod} mapping for the type of the
- query passed to it.
- """
- expected = object()
- resolver = ResolverBase()
- resolver.typeToMethod = {54321: lambda query, timeout: expected}
- query = Query(name=b"example.com", type=54321)
- queryDeferred = resolver.query(query, 123)
- result = []
- queryDeferred.addBoth(result.append)
- self.assertEqual(expected, result[0])
- def test_unknownQueryType(self):
- """
- L{ResolverBase.query} returns a L{Deferred} which fails with
- L{NotImplementedError} when called with a query of a type not present in
- its C{typeToMethod} dictionary.
- """
- resolver = ResolverBase()
- resolver.typeToMethod = {}
- query = Query(name=b"example.com", type=12345)
- queryDeferred = resolver.query(query, 123)
- result = []
- queryDeferred.addBoth(result.append)
- self.assertIsInstance(result[0], Failure)
- result[0].trap(NotImplementedError)
|