def test_dns_hinfo(self):
        generated = r.DNSOutgoing(0)
        generated.add_additional_answer(
            DNSHinfo('irrelevant', r._TYPE_HINFO, 0, 0, 'cpu', 'os'))
        parsed = r.DNSIncoming(generated.packet())
        self.assertEqual(parsed.answers[0].cpu, u'cpu')
        self.assertEqual(parsed.answers[0].os, u'os')

        generated = r.DNSOutgoing(0)
        generated.add_additional_answer(
            DNSHinfo('irrelevant', r._TYPE_HINFO, 0, 0, 'cpu', 'x' * 257))
        self.assertRaises(r.NamePartTooLongException, generated.packet)
 def test_same_name(self):
     name = "paired.local."
     generated = r.DNSOutgoing(r._FLAGS_QR_RESPONSE)
     question = r.DNSQuestion(name, r._TYPE_SRV, r._CLASS_IN)
     generated.add_question(question)
     generated.add_question(question)
     r.DNSIncoming(generated.packet())
 def test_incoming_exception_handling(self):
     generated = r.DNSOutgoing(0)
     packet = generated.packet()
     packet = packet[:8] + b'deadbeef' + packet[8:]
     parsed = r.DNSIncoming(packet)
     parsed = r.DNSIncoming(packet)
     assert parsed.valid is False
 def test_long_name(self):
     generated = r.DNSOutgoing(r._FLAGS_QR_RESPONSE)
     question = r.DNSQuestion(
         "this.is.a.very.long.name.with.lots.of.parts.in.it.local.",
         r._TYPE_SRV, r._CLASS_IN)
     generated.add_question(question)
     r.DNSIncoming(generated.packet())
 def test_match_question(self):
     generated = r.DNSOutgoing(r._FLAGS_QR_QUERY)
     question = r.DNSQuestion("testname.local.", r._TYPE_SRV, r._CLASS_IN)
     generated.add_question(question)
     parsed = r.DNSIncoming(generated.packet())
     self.assertEqual(len(generated.questions), 1)
     self.assertEqual(len(generated.questions), len(parsed.questions))
     self.assertEqual(question, parsed.questions[0])
 def test_incoming_unknown_type(self):
     generated = r.DNSOutgoing(0)
     answer = r.DNSAddress('a', r._TYPE_SOA, r._CLASS_IN, 1, b'a')
     generated.add_additional_answer(answer)
     packet = generated.packet()
     parsed = r.DNSIncoming(packet)
     assert len(parsed.answers) == 0
     assert parsed.is_query() != parsed.is_response()
 def test_numbers(self):
     generated = r.DNSOutgoing(r._FLAGS_QR_RESPONSE)
     bytes = generated.packet()
     (num_questions, num_answers, num_authorities,
      num_additionals) = struct.unpack('!4H', bytes[4:12])
     self.assertEqual(num_questions, 0)
     self.assertEqual(num_answers, 0)
     self.assertEqual(num_authorities, 0)
     self.assertEqual(num_additionals, 0)
 def generate_host(zc, host_name, type_):
     name = '.'.join((host_name, type_))
     out = r.DNSOutgoing(r._FLAGS_QR_RESPONSE | r._FLAGS_AA)
     out.add_answer_at_time(
         r.DNSPointer(type_, r._TYPE_PTR, r._CLASS_IN, r._DNS_TTL, name), 0)
     out.add_answer_at_time(
         r.DNSService(type_, r._TYPE_SRV, r._CLASS_IN, r._DNS_TTL, 0, 0, 80,
                      name), 0)
     zc.send(out)
 def test_numbers_questions(self):
     generated = r.DNSOutgoing(r._FLAGS_QR_RESPONSE)
     question = r.DNSQuestion("testname.local.", r._TYPE_SRV, r._CLASS_IN)
     for i in range(10):
         generated.add_question(question)
     bytes = generated.packet()
     (num_questions, num_answers, num_authorities,
      num_additionals) = struct.unpack('!4H', bytes[4:12])
     self.assertEqual(num_questions, 10)
     self.assertEqual(num_answers, 0)
     self.assertEqual(num_authorities, 0)
     self.assertEqual(num_additionals, 0)
 def test_dns_outgoing_repr(self):
     dns_outgoing = r.DNSOutgoing(r._FLAGS_QR_QUERY)
     repr(dns_outgoing)
 def test_parse_own_packet_flags(self):
     generated = r.DNSOutgoing(r._FLAGS_QR_QUERY)
     r.DNSIncoming(generated.packet())
 def test_parse_own_packet_question(self):
     generated = r.DNSOutgoing(r._FLAGS_QR_QUERY)
     generated.add_question(
         r.DNSQuestion("testname.local.", r._TYPE_SRV, r._CLASS_IN))
     r.DNSIncoming(generated.packet())
 def test_exceedingly_long_name_part(self):
     name = "%s.local." % ("a" * 1000)
     generated = r.DNSOutgoing(r._FLAGS_QR_RESPONSE)
     question = r.DNSQuestion(name, r._TYPE_SRV, r._CLASS_IN)
     generated.add_question(question)
     self.assertRaises(r.NamePartTooLongException, generated.packet)
 def test_exceedingly_long_name(self):
     generated = r.DNSOutgoing(r._FLAGS_QR_RESPONSE)
     name = "%slocal." % ("part." * 1000)
     question = r.DNSQuestion(name, r._TYPE_SRV, r._CLASS_IN)
     generated.add_question(question)
     r.DNSIncoming(generated.packet())
 def test_transaction_id(self):
     """ID must be zero in a DNS-SD packet"""
     generated = r.DNSOutgoing(r._FLAGS_QR_QUERY)
     bytes = generated.packet()
     id = indexbytes(bytes, 0) << 8 | indexbytes(bytes, 1)
     self.assertEqual(id, 0)
 def test_parse_own_packet_simple_unicast(self):
     generated = r.DNSOutgoing(0, 0)
     r.DNSIncoming(generated.packet())
 def test_response_header_bits(self):
     generated = r.DNSOutgoing(r._FLAGS_QR_RESPONSE)
     bytes = generated.packet()
     flags = indexbytes(bytes, 2) << 8 | indexbytes(bytes, 3)
     self.assertEqual(flags, 0x8000)
 def test_query_header_bits(self):
     generated = r.DNSOutgoing(r._FLAGS_QR_QUERY)
     bytes = generated.packet()
     flags = indexbytes(bytes, 2) << 8 | indexbytes(bytes, 3)
     self.assertEqual(flags, 0x0)