aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/names/test/test_dns.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/names/test/test_dns.py')
-rwxr-xr-xlib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/names/test/test_dns.py1501
1 files changed, 0 insertions, 1501 deletions
diff --git a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/names/test/test_dns.py b/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/names/test/test_dns.py
deleted file mode 100755
index 5e24b42f..00000000
--- a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/names/test/test_dns.py
+++ /dev/null
@@ -1,1501 +0,0 @@
-# test-case-name: twisted.names.test.test_dns
-# Copyright (c) Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-"""
-Tests for twisted.names.dns.
-"""
-
-from cStringIO import StringIO
-
-import struct
-
-from twisted.python.failure import Failure
-from twisted.internet import address, task
-from twisted.internet.error import CannotListenError, ConnectionDone
-from twisted.trial import unittest
-from twisted.names import dns
-
-from twisted.test import proto_helpers
-
-RECORD_TYPES = [
- dns.Record_NS, dns.Record_MD, dns.Record_MF, dns.Record_CNAME,
- dns.Record_MB, dns.Record_MG, dns.Record_MR, dns.Record_PTR,
- dns.Record_DNAME, dns.Record_A, dns.Record_SOA, dns.Record_NULL,
- dns.Record_WKS, dns.Record_SRV, dns.Record_AFSDB, dns.Record_RP,
- dns.Record_HINFO, dns.Record_MINFO, dns.Record_MX, dns.Record_TXT,
- dns.Record_AAAA, dns.Record_A6, dns.Record_NAPTR, dns.UnknownRecord,
- ]
-
-class NameTests(unittest.TestCase):
- """
- Tests for L{Name}, the representation of a single domain name with support
- for encoding into and decoding from DNS message format.
- """
- def test_decode(self):
- """
- L{Name.decode} populates the L{Name} instance with name information read
- from the file-like object passed to it.
- """
- n = dns.Name()
- n.decode(StringIO("\x07example\x03com\x00"))
- self.assertEqual(n.name, "example.com")
-
-
- def test_encode(self):
- """
- L{Name.encode} encodes its name information and writes it to the
- file-like object passed to it.
- """
- name = dns.Name("foo.example.com")
- stream = StringIO()
- name.encode(stream)
- self.assertEqual(stream.getvalue(), "\x03foo\x07example\x03com\x00")
-
-
- def test_encodeWithCompression(self):
- """
- If a compression dictionary is passed to it, L{Name.encode} uses offset
- information from it to encode its name with references to existing
- labels in the stream instead of including another copy of them in the
- output. It also updates the compression dictionary with the location of
- the name it writes to the stream.
- """
- name = dns.Name("foo.example.com")
- compression = {"example.com": 0x17}
-
- # Some bytes already encoded into the stream for this message
- previous = "some prefix to change .tell()"
- stream = StringIO()
- stream.write(previous)
-
- # The position at which the encoded form of this new name will appear in
- # the stream.
- expected = len(previous) + dns.Message.headerSize
- name.encode(stream, compression)
- self.assertEqual(
- "\x03foo\xc0\x17",
- stream.getvalue()[len(previous):])
- self.assertEqual(
- {"example.com": 0x17, "foo.example.com": expected},
- compression)
-
-
- def test_unknown(self):
- """
- A resource record of unknown type and class is parsed into an
- L{UnknownRecord} instance with its data preserved, and an
- L{UnknownRecord} instance is serialized to a string equal to the one it
- was parsed from.
- """
- wire = (
- '\x01\x00' # Message ID
- '\x00' # answer bit, opCode nibble, auth bit, trunc bit, recursive
- # bit
- '\x00' # recursion bit, empty bit, empty bit, empty bit, response
- # code nibble
- '\x00\x01' # number of queries
- '\x00\x01' # number of answers
- '\x00\x00' # number of authorities
- '\x00\x01' # number of additionals
-
- # query
- '\x03foo\x03bar\x00' # foo.bar
- '\xde\xad' # type=0xdead
- '\xbe\xef' # cls=0xbeef
-
- # 1st answer
- '\xc0\x0c' # foo.bar - compressed
- '\xde\xad' # type=0xdead
- '\xbe\xef' # cls=0xbeef
- '\x00\x00\x01\x01' # ttl=257
- '\x00\x08somedata' # some payload data
-
- # 1st additional
- '\x03baz\x03ban\x00' # baz.ban
- '\x00\x01' # type=A
- '\x00\x01' # cls=IN
- '\x00\x00\x01\x01' # ttl=257
- '\x00\x04' # len=4
- '\x01\x02\x03\x04' # 1.2.3.4
-
- )
-
- msg = dns.Message()
- msg.fromStr(wire)
-
- self.assertEqual(msg.queries, [
- dns.Query('foo.bar', type=0xdead, cls=0xbeef),
- ])
- self.assertEqual(msg.answers, [
- dns.RRHeader('foo.bar', type=0xdead, cls=0xbeef, ttl=257,
- payload=dns.UnknownRecord('somedata', ttl=257)),
- ])
- self.assertEqual(msg.additional, [
- dns.RRHeader('baz.ban', type=dns.A, cls=dns.IN, ttl=257,
- payload=dns.Record_A('1.2.3.4', ttl=257)),
- ])
-
- enc = msg.toStr()
-
- self.assertEqual(enc, wire)
-
-
- def test_decodeWithCompression(self):
- """
- If the leading byte of an encoded label (in bytes read from a stream
- passed to L{Name.decode}) has its two high bits set, the next byte is
- treated as a pointer to another label in the stream and that label is
- included in the name being decoded.
- """
- # Slightly modified version of the example from RFC 1035, section 4.1.4.
- stream = StringIO(
- "x" * 20 +
- "\x01f\x03isi\x04arpa\x00"
- "\x03foo\xc0\x14"
- "\x03bar\xc0\x20")
- stream.seek(20)
- name = dns.Name()
- name.decode(stream)
- # Verify we found the first name in the stream and that the stream
- # position is left at the first byte after the decoded name.
- self.assertEqual("f.isi.arpa", name.name)
- self.assertEqual(32, stream.tell())
-
- # Get the second name from the stream and make the same assertions.
- name.decode(stream)
- self.assertEqual(name.name, "foo.f.isi.arpa")
- self.assertEqual(38, stream.tell())
-
- # Get the third and final name
- name.decode(stream)
- self.assertEqual(name.name, "bar.foo.f.isi.arpa")
- self.assertEqual(44, stream.tell())
-
-
- def test_rejectCompressionLoop(self):
- """
- L{Name.decode} raises L{ValueError} if the stream passed to it includes
- a compression pointer which forms a loop, causing the name to be
- undecodable.
- """
- name = dns.Name()
- stream = StringIO("\xc0\x00")
- self.assertRaises(ValueError, name.decode, stream)
-
-
-
-class RoundtripDNSTestCase(unittest.TestCase):
- """Encoding and then decoding various objects."""
-
- names = ["example.org", "go-away.fish.tv", "23strikesback.net"]
-
- def testName(self):
- for n in self.names:
- # encode the name
- f = StringIO()
- dns.Name(n).encode(f)
-
- # decode the name
- f.seek(0, 0)
- result = dns.Name()
- result.decode(f)
- self.assertEqual(result.name, n)
-
- def testQuery(self):
- for n in self.names:
- for dnstype in range(1, 17):
- for dnscls in range(1, 5):
- # encode the query
- f = StringIO()
- dns.Query(n, dnstype, dnscls).encode(f)
-
- # decode the result
- f.seek(0, 0)
- result = dns.Query()
- result.decode(f)
- self.assertEqual(result.name.name, n)
- self.assertEqual(result.type, dnstype)
- self.assertEqual(result.cls, dnscls)
-
- def testRR(self):
- # encode the RR
- f = StringIO()
- dns.RRHeader("test.org", 3, 4, 17).encode(f)
-
- # decode the result
- f.seek(0, 0)
- result = dns.RRHeader()
- result.decode(f)
- self.assertEqual(str(result.name), "test.org")
- self.assertEqual(result.type, 3)
- self.assertEqual(result.cls, 4)
- self.assertEqual(result.ttl, 17)
-
-
- def testResources(self):
- names = (
- "this.are.test.name",
- "will.compress.will.this.will.name.will.hopefully",
- "test.CASE.preSErVatIOn.YeAH",
- "a.s.h.o.r.t.c.a.s.e.t.o.t.e.s.t",
- "singleton"
- )
- for s in names:
- f = StringIO()
- dns.SimpleRecord(s).encode(f)
- f.seek(0, 0)
- result = dns.SimpleRecord()
- result.decode(f)
- self.assertEqual(str(result.name), s)
-
- def test_hashable(self):
- """
- Instances of all record types are hashable.
- """
- for k in RECORD_TYPES:
- k1, k2 = k(), k()
- hk1 = hash(k1)
- hk2 = hash(k2)
- self.assertEqual(hk1, hk2, "%s != %s (for %s)" % (hk1,hk2,k))
-
-
- def test_Charstr(self):
- """
- Test L{dns.Charstr} encode and decode.
- """
- for n in self.names:
- # encode the name
- f = StringIO()
- dns.Charstr(n).encode(f)
-
- # decode the name
- f.seek(0, 0)
- result = dns.Charstr()
- result.decode(f)
- self.assertEqual(result.string, n)
-
-
- def test_NAPTR(self):
- """
- Test L{dns.Record_NAPTR} encode and decode.
- """
- naptrs = [(100, 10, "u", "sip+E2U",
- "!^.*$!sip:information@domain.tld!", ""),
- (100, 50, "s", "http+I2L+I2C+I2R", "",
- "_http._tcp.gatech.edu")]
-
- for (order, preference, flags, service, regexp, replacement) in naptrs:
- rin = dns.Record_NAPTR(order, preference, flags, service, regexp,
- replacement)
- e = StringIO()
- rin.encode(e)
- e.seek(0,0)
- rout = dns.Record_NAPTR()
- rout.decode(e)
- self.assertEqual(rin.order, rout.order)
- self.assertEqual(rin.preference, rout.preference)
- self.assertEqual(rin.flags, rout.flags)
- self.assertEqual(rin.service, rout.service)
- self.assertEqual(rin.regexp, rout.regexp)
- self.assertEqual(rin.replacement.name, rout.replacement.name)
- self.assertEqual(rin.ttl, rout.ttl)
-
-
-
-class MessageTestCase(unittest.TestCase):
- """
- Tests for L{twisted.names.dns.Message}.
- """
-
- def testEmptyMessage(self):
- """
- Test that a message which has been truncated causes an EOFError to
- be raised when it is parsed.
- """
- msg = dns.Message()
- self.assertRaises(EOFError, msg.fromStr, '')
-
-
- def testEmptyQuery(self):
- """
- Test that bytes representing an empty query message can be decoded
- as such.
- """
- msg = dns.Message()
- msg.fromStr(
- '\x01\x00' # Message ID
- '\x00' # answer bit, opCode nibble, auth bit, trunc bit, recursive bit
- '\x00' # recursion bit, empty bit, empty bit, empty bit, response code nibble
- '\x00\x00' # number of queries
- '\x00\x00' # number of answers
- '\x00\x00' # number of authorities
- '\x00\x00' # number of additionals
- )
- self.assertEqual(msg.id, 256)
- self.failIf(msg.answer, "Message was not supposed to be an answer.")
- self.assertEqual(msg.opCode, dns.OP_QUERY)
- self.failIf(msg.auth, "Message was not supposed to be authoritative.")
- self.failIf(msg.trunc, "Message was not supposed to be truncated.")
- self.assertEqual(msg.queries, [])
- self.assertEqual(msg.answers, [])
- self.assertEqual(msg.authority, [])
- self.assertEqual(msg.additional, [])
-
-
- def testNULL(self):
- bytes = ''.join([chr(i) for i in range(256)])
- rec = dns.Record_NULL(bytes)
- rr = dns.RRHeader('testname', dns.NULL, payload=rec)
- msg1 = dns.Message()
- msg1.answers.append(rr)
- s = StringIO()
- msg1.encode(s)
- s.seek(0, 0)
- msg2 = dns.Message()
- msg2.decode(s)
-
- self.failUnless(isinstance(msg2.answers[0].payload, dns.Record_NULL))
- self.assertEqual(msg2.answers[0].payload.payload, bytes)
-
-
- def test_lookupRecordTypeDefault(self):
- """
- L{Message.lookupRecordType} returns C{dns.UnknownRecord} if it is
- called with an integer which doesn't correspond to any known record
- type.
- """
- # 65280 is the first value in the range reserved for private
- # use, so it shouldn't ever conflict with an officially
- # allocated value.
- self.assertIdentical(
- dns.Message().lookupRecordType(65280), dns.UnknownRecord)
-
-
- def test_nonAuthoritativeMessage(self):
- """
- The L{RRHeader} instances created by L{Message} from a non-authoritative
- message are marked as not authoritative.
- """
- buf = StringIO()
- answer = dns.RRHeader(payload=dns.Record_A('1.2.3.4', ttl=0))
- answer.encode(buf)
- message = dns.Message()
- message.fromStr(
- '\x01\x00' # Message ID
- # answer bit, opCode nibble, auth bit, trunc bit, recursive bit
- '\x00'
- # recursion bit, empty bit, empty bit, empty bit, response code
- # nibble
- '\x00'
- '\x00\x00' # number of queries
- '\x00\x01' # number of answers
- '\x00\x00' # number of authorities
- '\x00\x00' # number of additionals
- + buf.getvalue()
- )
- self.assertEqual(message.answers, [answer])
- self.assertFalse(message.answers[0].auth)
-
-
- def test_authoritativeMessage(self):
- """
- The L{RRHeader} instances created by L{Message} from an authoritative
- message are marked as authoritative.
- """
- buf = StringIO()
- answer = dns.RRHeader(payload=dns.Record_A('1.2.3.4', ttl=0))
- answer.encode(buf)
- message = dns.Message()
- message.fromStr(
- '\x01\x00' # Message ID
- # answer bit, opCode nibble, auth bit, trunc bit, recursive bit
- '\x04'
- # recursion bit, empty bit, empty bit, empty bit, response code
- # nibble
- '\x00'
- '\x00\x00' # number of queries
- '\x00\x01' # number of answers
- '\x00\x00' # number of authorities
- '\x00\x00' # number of additionals
- + buf.getvalue()
- )
- answer.auth = True
- self.assertEqual(message.answers, [answer])
- self.assertTrue(message.answers[0].auth)
-
-
-
-class TestController(object):
- """
- Pretend to be a DNS query processor for a DNSDatagramProtocol.
-
- @ivar messages: the list of received messages.
- @type messages: C{list} of (msg, protocol, address)
- """
-
- def __init__(self):
- """
- Initialize the controller: create a list of messages.
- """
- self.messages = []
-
-
- def messageReceived(self, msg, proto, addr):
- """
- Save the message so that it can be checked during the tests.
- """
- self.messages.append((msg, proto, addr))
-
-
-
-class DatagramProtocolTestCase(unittest.TestCase):
- """
- Test various aspects of L{dns.DNSDatagramProtocol}.
- """
-
- def setUp(self):
- """
- Create a L{dns.DNSDatagramProtocol} with a deterministic clock.
- """
- self.clock = task.Clock()
- self.controller = TestController()
- self.proto = dns.DNSDatagramProtocol(self.controller)
- transport = proto_helpers.FakeDatagramTransport()
- self.proto.makeConnection(transport)
- self.proto.callLater = self.clock.callLater
-
-
- def test_truncatedPacket(self):
- """
- Test that when a short datagram is received, datagramReceived does
- not raise an exception while processing it.
- """
- self.proto.datagramReceived('',
- address.IPv4Address('UDP', '127.0.0.1', 12345))
- self.assertEqual(self.controller.messages, [])
-
-
- def test_simpleQuery(self):
- """
- Test content received after a query.
- """
- d = self.proto.query(('127.0.0.1', 21345), [dns.Query('foo')])
- self.assertEqual(len(self.proto.liveMessages.keys()), 1)
- m = dns.Message()
- m.id = self.proto.liveMessages.items()[0][0]
- m.answers = [dns.RRHeader(payload=dns.Record_A(address='1.2.3.4'))]
- def cb(result):
- self.assertEqual(result.answers[0].payload.dottedQuad(), '1.2.3.4')
- d.addCallback(cb)
- self.proto.datagramReceived(m.toStr(), ('127.0.0.1', 21345))
- return d
-
-
- def test_queryTimeout(self):
- """
- Test that query timeouts after some seconds.
- """
- d = self.proto.query(('127.0.0.1', 21345), [dns.Query('foo')])
- self.assertEqual(len(self.proto.liveMessages), 1)
- self.clock.advance(10)
- self.assertFailure(d, dns.DNSQueryTimeoutError)
- self.assertEqual(len(self.proto.liveMessages), 0)
- return d
-
-
- def test_writeError(self):
- """
- Exceptions raised by the transport's write method should be turned into
- C{Failure}s passed to errbacks of the C{Deferred} returned by
- L{DNSDatagramProtocol.query}.
- """
- def writeError(message, addr):
- raise RuntimeError("bar")
- self.proto.transport.write = writeError
-
- d = self.proto.query(('127.0.0.1', 21345), [dns.Query('foo')])
- return self.assertFailure(d, RuntimeError)
-
-
- def test_listenError(self):
- """
- Exception L{CannotListenError} raised by C{listenUDP} should be turned
- into a C{Failure} passed to errback of the C{Deferred} returned by
- L{DNSDatagramProtocol.query}.
- """
- def startListeningError():
- raise CannotListenError(None, None, None)
- self.proto.startListening = startListeningError
- # Clean up transport so that the protocol calls startListening again
- self.proto.transport = None
-
- d = self.proto.query(('127.0.0.1', 21345), [dns.Query('foo')])
- return self.assertFailure(d, CannotListenError)
-
-
-
-class TestTCPController(TestController):
- """
- Pretend to be a DNS query processor for a DNSProtocol.
-
- @ivar connections: A list of L{DNSProtocol} instances which have
- notified this controller that they are connected and have not
- yet notified it that their connection has been lost.
- """
- def __init__(self):
- TestController.__init__(self)
- self.connections = []
-
-
- def connectionMade(self, proto):
- self.connections.append(proto)
-
-
- def connectionLost(self, proto):
- self.connections.remove(proto)
-
-
-
-class DNSProtocolTestCase(unittest.TestCase):
- """
- Test various aspects of L{dns.DNSProtocol}.
- """
-
- def setUp(self):
- """
- Create a L{dns.DNSProtocol} with a deterministic clock.
- """
- self.clock = task.Clock()
- self.controller = TestTCPController()
- self.proto = dns.DNSProtocol(self.controller)
- self.proto.makeConnection(proto_helpers.StringTransport())
- self.proto.callLater = self.clock.callLater
-
-
- def test_connectionTracking(self):
- """
- L{dns.DNSProtocol} calls its controller's C{connectionMade}
- method with itself when it is connected to a transport and its
- controller's C{connectionLost} method when it is disconnected.
- """
- self.assertEqual(self.controller.connections, [self.proto])
- self.proto.connectionLost(
- Failure(ConnectionDone("Fake Connection Done")))
- self.assertEqual(self.controller.connections, [])
-
-
- def test_queryTimeout(self):
- """
- Test that query timeouts after some seconds.
- """
- d = self.proto.query([dns.Query('foo')])
- self.assertEqual(len(self.proto.liveMessages), 1)
- self.clock.advance(60)
- self.assertFailure(d, dns.DNSQueryTimeoutError)
- self.assertEqual(len(self.proto.liveMessages), 0)
- return d
-
-
- def test_simpleQuery(self):
- """
- Test content received after a query.
- """
- d = self.proto.query([dns.Query('foo')])
- self.assertEqual(len(self.proto.liveMessages.keys()), 1)
- m = dns.Message()
- m.id = self.proto.liveMessages.items()[0][0]
- m.answers = [dns.RRHeader(payload=dns.Record_A(address='1.2.3.4'))]
- def cb(result):
- self.assertEqual(result.answers[0].payload.dottedQuad(), '1.2.3.4')
- d.addCallback(cb)
- s = m.toStr()
- s = struct.pack('!H', len(s)) + s
- self.proto.dataReceived(s)
- return d
-
-
- def test_writeError(self):
- """
- Exceptions raised by the transport's write method should be turned into
- C{Failure}s passed to errbacks of the C{Deferred} returned by
- L{DNSProtocol.query}.
- """
- def writeError(message):
- raise RuntimeError("bar")
- self.proto.transport.write = writeError
-
- d = self.proto.query([dns.Query('foo')])
- return self.assertFailure(d, RuntimeError)
-
-
-
-class ReprTests(unittest.TestCase):
- """
- Tests for the C{__repr__} implementation of record classes.
- """
- def test_ns(self):
- """
- The repr of a L{dns.Record_NS} instance includes the name of the
- nameserver and the TTL of the record.
- """
- self.assertEqual(
- repr(dns.Record_NS('example.com', 4321)),
- "<NS name=example.com ttl=4321>")
-
-
- def test_md(self):
- """
- The repr of a L{dns.Record_MD} instance includes the name of the
- mail destination and the TTL of the record.
- """
- self.assertEqual(
- repr(dns.Record_MD('example.com', 4321)),
- "<MD name=example.com ttl=4321>")
-
-
- def test_mf(self):
- """
- The repr of a L{dns.Record_MF} instance includes the name of the
- mail forwarder and the TTL of the record.
- """
- self.assertEqual(
- repr(dns.Record_MF('example.com', 4321)),
- "<MF name=example.com ttl=4321>")
-
-
- def test_cname(self):
- """
- The repr of a L{dns.Record_CNAME} instance includes the name of the
- mail forwarder and the TTL of the record.
- """
- self.assertEqual(
- repr(dns.Record_CNAME('example.com', 4321)),
- "<CNAME name=example.com ttl=4321>")
-
-
- def test_mb(self):
- """
- The repr of a L{dns.Record_MB} instance includes the name of the
- mailbox and the TTL of the record.
- """
- self.assertEqual(
- repr(dns.Record_MB('example.com', 4321)),
- "<MB name=example.com ttl=4321>")
-
-
- def test_mg(self):
- """
- The repr of a L{dns.Record_MG} instance includes the name of the
- mail group memeber and the TTL of the record.
- """
- self.assertEqual(
- repr(dns.Record_MG('example.com', 4321)),
- "<MG name=example.com ttl=4321>")
-
-
- def test_mr(self):
- """
- The repr of a L{dns.Record_MR} instance includes the name of the
- mail rename domain and the TTL of the record.
- """
- self.assertEqual(
- repr(dns.Record_MR('example.com', 4321)),
- "<MR name=example.com ttl=4321>")
-
-
- def test_ptr(self):
- """
- The repr of a L{dns.Record_PTR} instance includes the name of the
- pointer and the TTL of the record.
- """
- self.assertEqual(
- repr(dns.Record_PTR('example.com', 4321)),
- "<PTR name=example.com ttl=4321>")
-
-
- def test_dname(self):
- """
- The repr of a L{dns.Record_DNAME} instance includes the name of the
- non-terminal DNS name redirection and the TTL of the record.
- """
- self.assertEqual(
- repr(dns.Record_DNAME('example.com', 4321)),
- "<DNAME name=example.com ttl=4321>")
-
-
- def test_a(self):
- """
- The repr of a L{dns.Record_A} instance includes the dotted-quad
- string representation of the address it is for and the TTL of the
- record.
- """
- self.assertEqual(
- repr(dns.Record_A('1.2.3.4', 567)),
- '<A address=1.2.3.4 ttl=567>')
-
-
- def test_soa(self):
- """
- The repr of a L{dns.Record_SOA} instance includes all of the
- authority fields.
- """
- self.assertEqual(
- repr(dns.Record_SOA(mname='mName', rname='rName', serial=123,
- refresh=456, retry=789, expire=10,
- minimum=11, ttl=12)),
- "<SOA mname=mName rname=rName serial=123 refresh=456 "
- "retry=789 expire=10 minimum=11 ttl=12>")
-
-
- def test_null(self):
- """
- The repr of a L{dns.Record_NULL} instance includes the repr of its
- payload and the TTL of the record.
- """
- self.assertEqual(
- repr(dns.Record_NULL('abcd', 123)),
- "<NULL payload='abcd' ttl=123>")
-
-
- def test_wks(self):
- """
- The repr of a L{dns.Record_WKS} instance includes the dotted-quad
- string representation of the address it is for, the IP protocol
- number it is for, and the TTL of the record.
- """
- self.assertEqual(
- repr(dns.Record_WKS('2.3.4.5', 7, ttl=8)),
- "<WKS address=2.3.4.5 protocol=7 ttl=8>")
-
-
- def test_aaaa(self):
- """
- The repr of a L{dns.Record_AAAA} instance includes the colon-separated
- hex string representation of the address it is for and the TTL of the
- record.
- """
- self.assertEqual(
- repr(dns.Record_AAAA('8765::1234', ttl=10)),
- "<AAAA address=8765::1234 ttl=10>")
-
-
- def test_a6(self):
- """
- The repr of a L{dns.Record_A6} instance includes the colon-separated
- hex string representation of the address it is for and the TTL of the
- record.
- """
- self.assertEqual(
- repr(dns.Record_A6(0, '1234::5678', 'foo.bar', ttl=10)),
- "<A6 suffix=1234::5678 prefix=foo.bar ttl=10>")
-
-
- def test_srv(self):
- """
- The repr of a L{dns.Record_SRV} instance includes the name and port of
- the target and the priority, weight, and TTL of the record.
- """
- self.assertEqual(
- repr(dns.Record_SRV(1, 2, 3, 'example.org', 4)),
- "<SRV priority=1 weight=2 target=example.org port=3 ttl=4>")
-
-
- def test_naptr(self):
- """
- The repr of a L{dns.Record_NAPTR} instance includes the order,
- preference, flags, service, regular expression, replacement, and TTL of
- the record.
- """
- self.assertEqual(
- repr(dns.Record_NAPTR(5, 9, "S", "http", "/foo/bar/i", "baz", 3)),
- "<NAPTR order=5 preference=9 flags=S service=http "
- "regexp=/foo/bar/i replacement=baz ttl=3>")
-
-
- def test_afsdb(self):
- """
- The repr of a L{dns.Record_AFSDB} instance includes the subtype,
- hostname, and TTL of the record.
- """
- self.assertEqual(
- repr(dns.Record_AFSDB(3, 'example.org', 5)),
- "<AFSDB subtype=3 hostname=example.org ttl=5>")
-
-
- def test_rp(self):
- """
- The repr of a L{dns.Record_RP} instance includes the mbox, txt, and TTL
- fields of the record.
- """
- self.assertEqual(
- repr(dns.Record_RP('alice.example.com', 'admin.example.com', 3)),
- "<RP mbox=alice.example.com txt=admin.example.com ttl=3>")
-
-
- def test_hinfo(self):
- """
- The repr of a L{dns.Record_HINFO} instance includes the cpu, os, and
- TTL fields of the record.
- """
- self.assertEqual(
- repr(dns.Record_HINFO('sparc', 'minix', 12)),
- "<HINFO cpu='sparc' os='minix' ttl=12>")
-
-
- def test_minfo(self):
- """
- The repr of a L{dns.Record_MINFO} instance includes the rmailbx,
- emailbx, and TTL fields of the record.
- """
- self.assertEqual(
- repr(dns.Record_MINFO('alice.example.com', 'bob.example.com', 15)),
- "<MINFO responsibility=alice.example.com "
- "errors=bob.example.com ttl=15>")
-
-
- def test_mx(self):
- """
- The repr of a L{dns.Record_MX} instance includes the preference, name,
- and TTL fields of the record.
- """
- self.assertEqual(
- repr(dns.Record_MX(13, 'mx.example.com', 2)),
- "<MX preference=13 name=mx.example.com ttl=2>")
-
-
- def test_txt(self):
- """
- The repr of a L{dns.Record_TXT} instance includes the data and ttl
- fields of the record.
- """
- self.assertEqual(
- repr(dns.Record_TXT("foo", "bar", ttl=15)),
- "<TXT data=['foo', 'bar'] ttl=15>")
-
-
- def test_spf(self):
- """
- The repr of a L{dns.Record_SPF} instance includes the data and ttl
- fields of the record.
- """
- self.assertEqual(
- repr(dns.Record_SPF("foo", "bar", ttl=15)),
- "<SPF data=['foo', 'bar'] ttl=15>")
-
-
- def test_unknown(self):
- """
- The repr of a L{dns.UnknownRecord} instance includes the data and ttl
- fields of the record.
- """
- self.assertEqual(
- repr(dns.UnknownRecord("foo\x1fbar", 12)),
- "<UNKNOWN data='foo\\x1fbar' ttl=12>")
-
-
-
-class _Equal(object):
- """
- A class the instances of which are equal to anything and everything.
- """
- def __eq__(self, other):
- return True
-
-
- def __ne__(self, other):
- return False
-
-
-
-class _NotEqual(object):
- """
- A class the instances of which are equal to nothing.
- """
- def __eq__(self, other):
- return False
-
-
- def __ne__(self, other):
- return True
-
-
-
-class EqualityTests(unittest.TestCase):
- """
- Tests for the equality and non-equality behavior of record classes.
- """
- def _equalityTest(self, firstValueOne, secondValueOne, valueTwo):
- """
- Assert that C{firstValueOne} is equal to C{secondValueOne} but not
- equal to C{valueOne} and that it defines equality cooperatively with
- other types it doesn't know about.
- """
- # This doesn't use assertEqual and assertNotEqual because the exact
- # operator those functions use is not very well defined. The point
- # of these assertions is to check the results of the use of specific
- # operators (precisely to ensure that using different permutations
- # (eg "x == y" or "not (x != y)") which should yield the same results
- # actually does yield the same result). -exarkun
- self.assertTrue(firstValueOne == firstValueOne)
- self.assertTrue(firstValueOne == secondValueOne)
- self.assertFalse(firstValueOne == valueTwo)
- self.assertFalse(firstValueOne != firstValueOne)
- self.assertFalse(firstValueOne != secondValueOne)
- self.assertTrue(firstValueOne != valueTwo)
- self.assertTrue(firstValueOne == _Equal())
- self.assertFalse(firstValueOne != _Equal())
- self.assertFalse(firstValueOne == _NotEqual())
- self.assertTrue(firstValueOne != _NotEqual())
-
-
- def _simpleEqualityTest(self, cls):
- # Vary the TTL
- self._equalityTest(
- cls('example.com', 123),
- cls('example.com', 123),
- cls('example.com', 321))
- # Vary the name
- self._equalityTest(
- cls('example.com', 123),
- cls('example.com', 123),
- cls('example.org', 123))
-
-
- def test_rrheader(self):
- """
- Two L{dns.RRHeader} instances compare equal if and only if they have
- the same name, type, class, time to live, payload, and authoritative
- bit.
- """
- # Vary the name
- self._equalityTest(
- dns.RRHeader('example.com', payload=dns.Record_A('1.2.3.4')),
- dns.RRHeader('example.com', payload=dns.Record_A('1.2.3.4')),
- dns.RRHeader('example.org', payload=dns.Record_A('1.2.3.4')))
-
- # Vary the payload
- self._equalityTest(
- dns.RRHeader('example.com', payload=dns.Record_A('1.2.3.4')),
- dns.RRHeader('example.com', payload=dns.Record_A('1.2.3.4')),
- dns.RRHeader('example.com', payload=dns.Record_A('1.2.3.5')))
-
- # Vary the type. Leave the payload as None so that we don't have to
- # provide non-equal values.
- self._equalityTest(
- dns.RRHeader('example.com', dns.A),
- dns.RRHeader('example.com', dns.A),
- dns.RRHeader('example.com', dns.MX))
-
- # Probably not likely to come up. Most people use the internet.
- self._equalityTest(
- dns.RRHeader('example.com', cls=dns.IN, payload=dns.Record_A('1.2.3.4')),
- dns.RRHeader('example.com', cls=dns.IN, payload=dns.Record_A('1.2.3.4')),
- dns.RRHeader('example.com', cls=dns.CS, payload=dns.Record_A('1.2.3.4')))
-
- # Vary the ttl
- self._equalityTest(
- dns.RRHeader('example.com', ttl=60, payload=dns.Record_A('1.2.3.4')),
- dns.RRHeader('example.com', ttl=60, payload=dns.Record_A('1.2.3.4')),
- dns.RRHeader('example.com', ttl=120, payload=dns.Record_A('1.2.3.4')))
-
- # Vary the auth bit
- self._equalityTest(
- dns.RRHeader('example.com', auth=1, payload=dns.Record_A('1.2.3.4')),
- dns.RRHeader('example.com', auth=1, payload=dns.Record_A('1.2.3.4')),
- dns.RRHeader('example.com', auth=0, payload=dns.Record_A('1.2.3.4')))
-
-
- def test_ns(self):
- """
- Two L{dns.Record_NS} instances compare equal if and only if they have
- the same name and TTL.
- """
- self._simpleEqualityTest(dns.Record_NS)
-
-
- def test_md(self):
- """
- Two L{dns.Record_MD} instances compare equal if and only if they have
- the same name and TTL.
- """
- self._simpleEqualityTest(dns.Record_MD)
-
-
- def test_mf(self):
- """
- Two L{dns.Record_MF} instances compare equal if and only if they have
- the same name and TTL.
- """
- self._simpleEqualityTest(dns.Record_MF)
-
-
- def test_cname(self):
- """
- Two L{dns.Record_CNAME} instances compare equal if and only if they
- have the same name and TTL.
- """
- self._simpleEqualityTest(dns.Record_CNAME)
-
-
- def test_mb(self):
- """
- Two L{dns.Record_MB} instances compare equal if and only if they have
- the same name and TTL.
- """
- self._simpleEqualityTest(dns.Record_MB)
-
-
- def test_mg(self):
- """
- Two L{dns.Record_MG} instances compare equal if and only if they have
- the same name and TTL.
- """
- self._simpleEqualityTest(dns.Record_MG)
-
-
- def test_mr(self):
- """
- Two L{dns.Record_MR} instances compare equal if and only if they have
- the same name and TTL.
- """
- self._simpleEqualityTest(dns.Record_MR)
-
-
- def test_ptr(self):
- """
- Two L{dns.Record_PTR} instances compare equal if and only if they have
- the same name and TTL.
- """
- self._simpleEqualityTest(dns.Record_PTR)
-
-
- def test_dname(self):
- """
- Two L{dns.Record_MD} instances compare equal if and only if they have
- the same name and TTL.
- """
- self._simpleEqualityTest(dns.Record_DNAME)
-
-
- def test_a(self):
- """
- Two L{dns.Record_A} instances compare equal if and only if they have
- the same address and TTL.
- """
- # Vary the TTL
- self._equalityTest(
- dns.Record_A('1.2.3.4', 5),
- dns.Record_A('1.2.3.4', 5),
- dns.Record_A('1.2.3.4', 6))
- # Vary the address
- self._equalityTest(
- dns.Record_A('1.2.3.4', 5),
- dns.Record_A('1.2.3.4', 5),
- dns.Record_A('1.2.3.5', 5))
-
-
- def test_soa(self):
- """
- Two L{dns.Record_SOA} instances compare equal if and only if they have
- the same mname, rname, serial, refresh, minimum, expire, retry, and
- ttl.
- """
- # Vary the mname
- self._equalityTest(
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('xname', 'rname', 123, 456, 789, 10, 20, 30))
- # Vary the rname
- self._equalityTest(
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('mname', 'xname', 123, 456, 789, 10, 20, 30))
- # Vary the serial
- self._equalityTest(
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('mname', 'rname', 1, 456, 789, 10, 20, 30))
- # Vary the refresh
- self._equalityTest(
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('mname', 'rname', 123, 1, 789, 10, 20, 30))
- # Vary the minimum
- self._equalityTest(
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('mname', 'rname', 123, 456, 1, 10, 20, 30))
- # Vary the expire
- self._equalityTest(
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 1, 20, 30))
- # Vary the retry
- self._equalityTest(
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 1, 30))
- # Vary the ttl
- self._equalityTest(
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('mname', 'rname', 123, 456, 789, 10, 20, 30),
- dns.Record_SOA('mname', 'xname', 123, 456, 789, 10, 20, 1))
-
-
- def test_null(self):
- """
- Two L{dns.Record_NULL} instances compare equal if and only if they have
- the same payload and ttl.
- """
- # Vary the payload
- self._equalityTest(
- dns.Record_NULL('foo bar', 10),
- dns.Record_NULL('foo bar', 10),
- dns.Record_NULL('bar foo', 10))
- # Vary the ttl
- self._equalityTest(
- dns.Record_NULL('foo bar', 10),
- dns.Record_NULL('foo bar', 10),
- dns.Record_NULL('foo bar', 100))
-
-
- def test_wks(self):
- """
- Two L{dns.Record_WKS} instances compare equal if and only if they have
- the same address, protocol, map, and ttl.
- """
- # Vary the address
- self._equalityTest(
- dns.Record_WKS('1.2.3.4', 1, 'foo', 2),
- dns.Record_WKS('1.2.3.4', 1, 'foo', 2),
- dns.Record_WKS('4.3.2.1', 1, 'foo', 2))
- # Vary the protocol
- self._equalityTest(
- dns.Record_WKS('1.2.3.4', 1, 'foo', 2),
- dns.Record_WKS('1.2.3.4', 1, 'foo', 2),
- dns.Record_WKS('1.2.3.4', 100, 'foo', 2))
- # Vary the map
- self._equalityTest(
- dns.Record_WKS('1.2.3.4', 1, 'foo', 2),
- dns.Record_WKS('1.2.3.4', 1, 'foo', 2),
- dns.Record_WKS('1.2.3.4', 1, 'bar', 2))
- # Vary the ttl
- self._equalityTest(
- dns.Record_WKS('1.2.3.4', 1, 'foo', 2),
- dns.Record_WKS('1.2.3.4', 1, 'foo', 2),
- dns.Record_WKS('1.2.3.4', 1, 'foo', 200))
-
-
- def test_aaaa(self):
- """
- Two L{dns.Record_AAAA} instances compare equal if and only if they have
- the same address and ttl.
- """
- # Vary the address
- self._equalityTest(
- dns.Record_AAAA('1::2', 1),
- dns.Record_AAAA('1::2', 1),
- dns.Record_AAAA('2::1', 1))
- # Vary the ttl
- self._equalityTest(
- dns.Record_AAAA('1::2', 1),
- dns.Record_AAAA('1::2', 1),
- dns.Record_AAAA('1::2', 10))
-
-
- def test_a6(self):
- """
- Two L{dns.Record_A6} instances compare equal if and only if they have
- the same prefix, prefix length, suffix, and ttl.
- """
- # Note, A6 is crazy, I'm not sure these values are actually legal.
- # Hopefully that doesn't matter for this test. -exarkun
-
- # Vary the prefix length
- self._equalityTest(
- dns.Record_A6(16, '::abcd', 'example.com', 10),
- dns.Record_A6(16, '::abcd', 'example.com', 10),
- dns.Record_A6(32, '::abcd', 'example.com', 10))
- # Vary the suffix
- self._equalityTest(
- dns.Record_A6(16, '::abcd', 'example.com', 10),
- dns.Record_A6(16, '::abcd', 'example.com', 10),
- dns.Record_A6(16, '::abcd:0', 'example.com', 10))
- # Vary the prefix
- self._equalityTest(
- dns.Record_A6(16, '::abcd', 'example.com', 10),
- dns.Record_A6(16, '::abcd', 'example.com', 10),
- dns.Record_A6(16, '::abcd', 'example.org', 10))
- # Vary the ttl
- self._equalityTest(
- dns.Record_A6(16, '::abcd', 'example.com', 10),
- dns.Record_A6(16, '::abcd', 'example.com', 10),
- dns.Record_A6(16, '::abcd', 'example.com', 100))
-
-
- def test_srv(self):
- """
- Two L{dns.Record_SRV} instances compare equal if and only if they have
- the same priority, weight, port, target, and ttl.
- """
- # Vary the priority
- self._equalityTest(
- dns.Record_SRV(10, 20, 30, 'example.com', 40),
- dns.Record_SRV(10, 20, 30, 'example.com', 40),
- dns.Record_SRV(100, 20, 30, 'example.com', 40))
- # Vary the weight
- self._equalityTest(
- dns.Record_SRV(10, 20, 30, 'example.com', 40),
- dns.Record_SRV(10, 20, 30, 'example.com', 40),
- dns.Record_SRV(10, 200, 30, 'example.com', 40))
- # Vary the port
- self._equalityTest(
- dns.Record_SRV(10, 20, 30, 'example.com', 40),
- dns.Record_SRV(10, 20, 30, 'example.com', 40),
- dns.Record_SRV(10, 20, 300, 'example.com', 40))
- # Vary the target
- self._equalityTest(
- dns.Record_SRV(10, 20, 30, 'example.com', 40),
- dns.Record_SRV(10, 20, 30, 'example.com', 40),
- dns.Record_SRV(10, 20, 30, 'example.org', 40))
- # Vary the ttl
- self._equalityTest(
- dns.Record_SRV(10, 20, 30, 'example.com', 40),
- dns.Record_SRV(10, 20, 30, 'example.com', 40),
- dns.Record_SRV(10, 20, 30, 'example.com', 400))
-
-
- def test_naptr(self):
- """
- Two L{dns.Record_NAPTR} instances compare equal if and only if they
- have the same order, preference, flags, service, regexp, replacement,
- and ttl.
- """
- # Vary the order
- self._equalityTest(
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/foo/bar/", "baz", 12),
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/foo/bar/", "baz", 12),
- dns.Record_NAPTR(2, 2, "u", "sip+E2U", "/foo/bar/", "baz", 12))
- # Vary the preference
- self._equalityTest(
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/foo/bar/", "baz", 12),
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/foo/bar/", "baz", 12),
- dns.Record_NAPTR(1, 3, "u", "sip+E2U", "/foo/bar/", "baz", 12))
- # Vary the flags
- self._equalityTest(
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/foo/bar/", "baz", 12),
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/foo/bar/", "baz", 12),
- dns.Record_NAPTR(1, 2, "p", "sip+E2U", "/foo/bar/", "baz", 12))
- # Vary the service
- self._equalityTest(
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/foo/bar/", "baz", 12),
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/foo/bar/", "baz", 12),
- dns.Record_NAPTR(1, 2, "u", "http", "/foo/bar/", "baz", 12))
- # Vary the regexp
- self._equalityTest(
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/foo/bar/", "baz", 12),
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/foo/bar/", "baz", 12),
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/bar/foo/", "baz", 12))
- # Vary the replacement
- self._equalityTest(
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/foo/bar/", "baz", 12),
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/foo/bar/", "baz", 12),
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/bar/foo/", "quux", 12))
- # Vary the ttl
- self._equalityTest(
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/foo/bar/", "baz", 12),
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/foo/bar/", "baz", 12),
- dns.Record_NAPTR(1, 2, "u", "sip+E2U", "/bar/foo/", "baz", 5))
-
-
- def test_afsdb(self):
- """
- Two L{dns.Record_AFSDB} instances compare equal if and only if they
- have the same subtype, hostname, and ttl.
- """
- # Vary the subtype
- self._equalityTest(
- dns.Record_AFSDB(1, 'example.com', 2),
- dns.Record_AFSDB(1, 'example.com', 2),
- dns.Record_AFSDB(2, 'example.com', 2))
- # Vary the hostname
- self._equalityTest(
- dns.Record_AFSDB(1, 'example.com', 2),
- dns.Record_AFSDB(1, 'example.com', 2),
- dns.Record_AFSDB(1, 'example.org', 2))
- # Vary the ttl
- self._equalityTest(
- dns.Record_AFSDB(1, 'example.com', 2),
- dns.Record_AFSDB(1, 'example.com', 2),
- dns.Record_AFSDB(1, 'example.com', 3))
-
-
- def test_rp(self):
- """
- Two L{Record_RP} instances compare equal if and only if they have the
- same mbox, txt, and ttl.
- """
- # Vary the mbox
- self._equalityTest(
- dns.Record_RP('alice.example.com', 'alice is nice', 10),
- dns.Record_RP('alice.example.com', 'alice is nice', 10),
- dns.Record_RP('bob.example.com', 'alice is nice', 10))
- # Vary the txt
- self._equalityTest(
- dns.Record_RP('alice.example.com', 'alice is nice', 10),
- dns.Record_RP('alice.example.com', 'alice is nice', 10),
- dns.Record_RP('alice.example.com', 'alice is not nice', 10))
- # Vary the ttl
- self._equalityTest(
- dns.Record_RP('alice.example.com', 'alice is nice', 10),
- dns.Record_RP('alice.example.com', 'alice is nice', 10),
- dns.Record_RP('alice.example.com', 'alice is nice', 100))
-
-
- def test_hinfo(self):
- """
- Two L{dns.Record_HINFO} instances compare equal if and only if they
- have the same cpu, os, and ttl.
- """
- # Vary the cpu
- self._equalityTest(
- dns.Record_HINFO('x86-64', 'plan9', 10),
- dns.Record_HINFO('x86-64', 'plan9', 10),
- dns.Record_HINFO('i386', 'plan9', 10))
- # Vary the os
- self._equalityTest(
- dns.Record_HINFO('x86-64', 'plan9', 10),
- dns.Record_HINFO('x86-64', 'plan9', 10),
- dns.Record_HINFO('x86-64', 'plan11', 10))
- # Vary the ttl
- self._equalityTest(
- dns.Record_HINFO('x86-64', 'plan9', 10),
- dns.Record_HINFO('x86-64', 'plan9', 10),
- dns.Record_HINFO('x86-64', 'plan9', 100))
-
-
- def test_minfo(self):
- """
- Two L{dns.Record_MINFO} instances compare equal if and only if they
- have the same rmailbx, emailbx, and ttl.
- """
- # Vary the rmailbx
- self._equalityTest(
- dns.Record_MINFO('rmailbox', 'emailbox', 10),
- dns.Record_MINFO('rmailbox', 'emailbox', 10),
- dns.Record_MINFO('someplace', 'emailbox', 10))
- # Vary the emailbx
- self._equalityTest(
- dns.Record_MINFO('rmailbox', 'emailbox', 10),
- dns.Record_MINFO('rmailbox', 'emailbox', 10),
- dns.Record_MINFO('rmailbox', 'something', 10))
- # Vary the ttl
- self._equalityTest(
- dns.Record_MINFO('rmailbox', 'emailbox', 10),
- dns.Record_MINFO('rmailbox', 'emailbox', 10),
- dns.Record_MINFO('rmailbox', 'emailbox', 100))
-
-
- def test_mx(self):
- """
- Two L{dns.Record_MX} instances compare equal if and only if they have
- the same preference, name, and ttl.
- """
- # Vary the preference
- self._equalityTest(
- dns.Record_MX(10, 'example.org', 20),
- dns.Record_MX(10, 'example.org', 20),
- dns.Record_MX(100, 'example.org', 20))
- # Vary the name
- self._equalityTest(
- dns.Record_MX(10, 'example.org', 20),
- dns.Record_MX(10, 'example.org', 20),
- dns.Record_MX(10, 'example.net', 20))
- # Vary the ttl
- self._equalityTest(
- dns.Record_MX(10, 'example.org', 20),
- dns.Record_MX(10, 'example.org', 20),
- dns.Record_MX(10, 'example.org', 200))
-
-
- def test_txt(self):
- """
- Two L{dns.Record_TXT} instances compare equal if and only if they have
- the same data and ttl.
- """
- # Vary the length of the data
- self._equalityTest(
- dns.Record_TXT('foo', 'bar', ttl=10),
- dns.Record_TXT('foo', 'bar', ttl=10),
- dns.Record_TXT('foo', 'bar', 'baz', ttl=10))
- # Vary the value of the data
- self._equalityTest(
- dns.Record_TXT('foo', 'bar', ttl=10),
- dns.Record_TXT('foo', 'bar', ttl=10),
- dns.Record_TXT('bar', 'foo', ttl=10))
- # Vary the ttl
- self._equalityTest(
- dns.Record_TXT('foo', 'bar', ttl=10),
- dns.Record_TXT('foo', 'bar', ttl=10),
- dns.Record_TXT('foo', 'bar', ttl=100))
-
-
- def test_spf(self):
- """
- L{dns.Record_SPF} instances compare equal if and only if they have the
- same data and ttl.
- """
- # Vary the length of the data
- self._equalityTest(
- dns.Record_SPF('foo', 'bar', ttl=10),
- dns.Record_SPF('foo', 'bar', ttl=10),
- dns.Record_SPF('foo', 'bar', 'baz', ttl=10))
- # Vary the value of the data
- self._equalityTest(
- dns.Record_SPF('foo', 'bar', ttl=10),
- dns.Record_SPF('foo', 'bar', ttl=10),
- dns.Record_SPF('bar', 'foo', ttl=10))
- # Vary the ttl
- self._equalityTest(
- dns.Record_SPF('foo', 'bar', ttl=10),
- dns.Record_SPF('foo', 'bar', ttl=10),
- dns.Record_SPF('foo', 'bar', ttl=100))
-
-
- def test_unknown(self):
- """
- L{dns.UnknownRecord} instances compare equal if and only if they have
- the same data and ttl.
- """
- # Vary the length of the data
- self._equalityTest(
- dns.UnknownRecord('foo', ttl=10),
- dns.UnknownRecord('foo', ttl=10),
- dns.UnknownRecord('foobar', ttl=10))
- # Vary the value of the data
- self._equalityTest(
- dns.UnknownRecord('foo', ttl=10),
- dns.UnknownRecord('foo', ttl=10),
- dns.UnknownRecord('bar', ttl=10))
- # Vary the ttl
- self._equalityTest(
- dns.UnknownRecord('foo', ttl=10),
- dns.UnknownRecord('foo', ttl=10),
- dns.UnknownRecord('foo', ttl=100))
-
-
-
-class RRHeaderTests(unittest.TestCase):
- """
- Tests for L{twisted.names.dns.RRHeader}.
- """
-
- def test_negativeTTL(self):
- """
- Attempting to create a L{dns.RRHeader} instance with a negative TTL
- causes L{ValueError} to be raised.
- """
- self.assertRaises(
- ValueError, dns.RRHeader, "example.com", dns.A,
- dns.IN, -1, dns.Record_A("127.0.0.1"))