def test_get_zone_dump(mock_find_name_servers, mock_get_answer): mock_find_name_servers.return_value = ['ns1.vk.ru', 'ns4.vk.ru'] f_header = _Header(2932, MessageType.RESPONSE, 1, response_type=ResponseType.REFUSED) s_header = _Header(2928, MessageType.RESPONSE, 1, answer_count=1) questions = [_Question('vk.com', RRType.AXFR)] mock_get_answer.side_effect = [ Answer(f_header, questions, [], [], []), Answer(s_header, questions, [], [], []) ] assert not resolver.get_zone_dump('vk.com', port=53, timeout=10).answers
def test_resolve_ip4_recursive(mock_get_answer): args = Namespace(hostname='vk.com', protocol='udp', server='8.8.8.8', port=53, timeout=10, inverse=False, dump=False, debug=False, ipv6=False) header = _Header(1823, MessageType.RESPONSE, question_count=1, answer_count=1) questions = [_Question('vk.com')] answers = [ _ResourceRecord('vk.com', type_=RRType.A, length=4, data=_AResourceData(b'\x57\xf0\xb6\xe0')) ] mock_get_answer.return_value = Answer(header, questions, answers, [], []) assert resolver.resolve(args).answers[0].data.ip == '87.240.182.224'
def test_get_primary_name_server_1(mock_find_name_servers, mock_get_answer): mock_find_name_servers.return_value = [ 'ns4.vkontakte.ru', 'ns2.vkontakte.ru' ] header = _Header(9633, MessageType.RESPONSE, question_count=1, answer_count=4) questions = [_Question('vk.com', type_=RRType.NS)] answers = [ _ResourceRecord( 'vk.com', type_=RRType.NS, length=18, data=_SOAResourceData( b'\xc0\x0c\x00\x06\x00\x01\x00\x00\x02\x0b\x00\x44' b'\x03ns1\x09vkontakte\x02ru\x00' b'\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00' b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', offset=0)) ] mock_get_answer.return_value = Answer(header, questions, answers, [], []) assert resolver.get_primary_name_server('vk.com', protocol='udp', port=53, timeout=10) == 'ns1.vkontakte.ru'
def test_one_A(self): header = _Header(0, MessageType.RESPONSE, 1) question = [_Question('google.com')] a_resource_data = _AResourceData(b'\xac\xd9\x0en') answers = [ _ResourceRecord('google.com', type_=RRType.A, length=4, data=a_resource_data, ttl=0) ] authorities = [] additions = [] actual = Answer(header, question, answers, authorities, additions) self.assertEqual(0, actual.header.identifier) self.assertEqual(MessageType.RESPONSE, actual.header.message_type) self.assertEqual(QueryType.STANDARD, actual.header.query_type) self.assertEqual(False, actual.header.is_authority_answer) self.assertEqual(False, actual.header.is_truncated) self.assertEqual(False, actual.header.is_recursion_desired) self.assertEqual(False, actual.header.is_recursion_available) self.assertEqual(ResponseType.NO_ERROR, actual.header.response_type) self.assertEqual('google.com', actual.questions[0].name) self.assertEqual(RRType.A, actual.questions[0].type_) self.assertEqual(RRClass.IN, actual.questions[0].class_) self.assertEqual('google.com', actual.answers[0].name) self.assertEqual(RRType.A, actual.answers[0].type_) self.assertEqual(RRClass.IN, actual.answers[0].class_) self.assertEqual(0, actual.answers[0].ttl) self.assertEqual(4, actual.answers[0].length) self.assertEqual(a_resource_data.ip, actual.answers[0].data.ip)
def test_standard_query(self): header = _Header(1337, MessageType.QUERY, 0) expected = b'\x00\x00' actual = header._encode_flags() self.assertEqual(expected, actual)
def test_query_with_several_questions(self): header = _Header(256, MessageType.QUERY, 5) expected = b'\x01\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00' actual = header.to_bytes() self.assertEqual(expected, actual)
def test_standard_query(self): header = _Header(256, MessageType.QUERY, 1) expected = b'\x01\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00' actual = header.to_bytes() self.assertEqual(expected, actual)
def test_simple_answer(self): header = _Header(1337, MessageType.RESPONSE, 0) expected = b'\x80\x00' actual = header._encode_flags() self.assertEqual(expected, actual)
def test_recursive_standard_query(self): header = _Header(1337, MessageType.QUERY, 0, is_recursion_desired=True) expected = b'\x01\x00' actual = header._encode_flags() self.assertEqual(expected, actual)
def test_no_error_answer(self): in_bytes = b'\x01\x00\x80\x00\x00\x01\x00\x01\x00\x00\x00\x00' expected = _Header(256, MessageType.RESPONSE, 1, answer_count=1) actual = _Header.from_bytes(in_bytes, 0).header self.equal_headers(expected, actual)
def test_inverse_query(self): header = _Header(1337, MessageType.QUERY, 0, query_type=QueryType.INVERSE) expected = b'\x08\x00' actual = header._encode_flags() self.assertEqual(expected, actual)
def test_resolve_reverse_lookup(mock_get_answer): args = Namespace(hostname='87.240.182.224', protocol='udp', server='8.8.8.8', port=53, timeout=10, inverse=True, dump=False, debug=False, ipv6=False) f_header = _Header(1823, MessageType.RESPONSE, question_count=1, answer_count=0, authority_count=1) s_header = _Header(2938, MessageType.RESPONSE, question_count=1, answer_count=1) questions = [_Question('vk.com')] authorities = [ _ResourceRecord('vk.com', type_=RRType.NS, length=18, data=_NSResourceData( b'\xc0\x0c\x00\x02\x00\x01\x00\x00\x02\x0b\x00\x12' b'\x03ns4\x09vkontakte\x02ru\x00', offset=0)) ] answers = [ _ResourceRecord('vk.com', type_=RRType.PTR, length=8, data=_PTRResourceData(b'\x02vk\x03com\x00')) ] first = Answer(f_header, questions, [], authorities, []) second = Answer(s_header, questions, answers, [], []) mock_get_answer.side_effect = [first, second] assert ( resolver.resolve_reverse_lookup(args).answers[0].data.name == 'vk.com')
def test_recursive_inverse_query(self): header = _Header(1337, MessageType.QUERY, 0, query_type=QueryType.INVERSE, is_recursion_desired=True) expected = b'\t\x00' actual = header._encode_flags() self.assertEqual(expected, actual)
def test_no_error_rd_answer(self): in_bytes = b'\x01\x00\x81\x80\x00\x01\x00\x01\x00\x00\x00\x00' expected = _Header(256, MessageType.RESPONSE, 1, answer_count=1, is_recursion_desired=True, is_recursion_available=True) actual = _Header.from_bytes(in_bytes, 0).header self.equal_headers(expected, actual)
def test_get_primary_name_server_2(mock_find_name_servers, mock_get_answer): mock_find_name_servers.return_value = [ 'ns4.vkontakte.ru', 'ns2.vkontakte.ru' ] header = _Header(9633, MessageType.RESPONSE, question_count=1, answer_count=0) questions = [_Question('vk.com', type_=RRType.NS)] mock_get_answer.return_value = Answer(header, questions, [], [], []) assert resolver.get_primary_name_server( 'vk.com', protocol='udp', port=53, timeout=10) is None
def test_recursion_desired_query(self): header = _Header(1337, MessageType.QUERY, 1, is_recursion_desired=True) self.assertEqual(header.identifier, 1337) self.assertEqual(header.message_type, MessageType.QUERY) self.assertEqual(header.question_count, 1) self.assertEqual(header.query_type, QueryType.STANDARD) self.assertEqual(header.is_authority_answer, False) self.assertEqual(header.is_truncated, False) self.assertEqual(header.is_recursion_desired, True) self.assertEqual(header.is_recursion_available, False) self.assertEqual(header.response_type, ResponseType.NO_ERROR) self.assertEqual(header.answer_count, 0) self.assertEqual(header.authority_count, 0) self.assertEqual(header.additional_count, 0)
def test_find_name_servers(mock_get_answer, mock_get_root_servers): mock_get_root_servers.return_value = {'198.41.0.4'} header = _Header(9633, MessageType.RESPONSE, question_count=1, answer_count=4) questions = [_Question('vk.com', type_=RRType.NS)] answers = [ _ResourceRecord('vk.com', type_=RRType.NS, length=18, data=_NSResourceData( b'\xc0\x0c\x00\x02\x00\x01\x00\x00\x02\x0b\x00\x12' b'\x03ns4\x09vkontakte\x02ru\x00', offset=0)) ] mock_get_answer.return_value = Answer(header, questions, answers, [], []) assert resolver.find_name_servers('vk.com', protocol='udp', port=53, timeout=10) == ['ns4.vkontakte.ru']