def test_receive_bad_message(self): multicast_socket = MockSocket(AF_INET6, IPPROTO_UDP, All_DHCP_Relay_Agents_and_Servers, SERVER_PORT, 42, 1608) link_local_socket = MockSocket(AF_INET6, IPPROTO_UDP, 'fe80::1%eth0', SERVER_PORT, 42, 1608) # noinspection PyTypeChecker listening_socket = ListeningSocket('eth0', multicast_socket, link_local_socket, global_address=IPv6Address('2001:db8::1')) multicast_socket.add_to_incoming_queue(b'\x01ThisIsNotAValidDHCPv6Message', ('2001:db8::babe', 546, 0, 42)) with self.assertRaisesRegex(InvalidPacketError, r"Invalid packet from \('2001:db8::babe', 546, 0, 42\)"): listening_socket.recv_request()
def test_receive_relayed_with_unprintable_interface_id(self): global_unicast_socket = MockSocket(AF_INET6, IPPROTO_UDP, '2001:db8::1', SERVER_PORT, 42, 1608) # noinspection PyTypeChecker listening_socket = ListeningSocket('eth0', global_unicast_socket) # Start with a clean parse and then change interface-id new_message = Message.parse(relayed_solicit_packet)[1] new_message.inner_relay_message.get_option_of_type(InterfaceIdOption).interface_id = b'\x80\x81\x82' global_unicast_socket.add_to_incoming_queue(bytes(new_message.save()), ('2001:db8::babe', 546, 0, 42)) with self.assertLogs(level=logging.DEBUG) as logged: listening_socket.recv_request() log_output = '\n'.join(logged.output) self.assertRegex(log_output, r'Received SolicitMessage') self.assertRegex(log_output, r'from fe80::3631:c4ff:fe3c:b2f1') self.assertRegex(log_output, r"via b'\\x80\\x81\\x82' of relay 2001:db8::babe")
def test_receive_unknown_message_type(self): multicast_socket = MockSocket(AF_INET6, IPPROTO_UDP, All_DHCP_Relay_Agents_and_Servers, SERVER_PORT, 42, 1608) link_local_socket = MockSocket(AF_INET6, IPPROTO_UDP, 'fe80::1%eth0', SERVER_PORT, 42, 1608) # noinspection PyTypeChecker listening_socket = ListeningSocket('eth0', multicast_socket, link_local_socket, global_address=IPv6Address('2001:db8::1')) multicast_socket.add_to_incoming_queue(b'\xffThisIsNotAValidDHCPv6Message', ('2001:db8::babe', 546, 0, 42)) received_message = listening_socket.recv_request() self.assertIsInstance(received_message, RelayForwardMessage) self.assertEqual(received_message.hop_count, 0) self.assertEqual(received_message.link_address, IPv6Address('2001:db8::1')) self.assertEqual(received_message.peer_address, IPv6Address('2001:db8::babe')) self.assertEqual(received_message.get_option_of_type(InterfaceIdOption).interface_id, b'eth0') self.assertIsInstance(received_message.relayed_message, UnknownMessage) self.assertEqual(received_message.relayed_message.message_type, 255)
def test_receive_relayed(self): global_unicast_socket = MockSocket(AF_INET6, IPPROTO_UDP, '2001:db8::1', SERVER_PORT, 42, 1608) # noinspection PyTypeChecker listening_socket = ListeningSocket('eth0', global_unicast_socket) global_unicast_socket.add_to_incoming_queue(relayed_solicit_packet, ('2001:db8::babe', 546, 0, 42)) with self.assertLogs(level=logging.DEBUG) as logged: received_message = listening_socket.recv_request() self.assertIsInstance(received_message, RelayForwardMessage) self.assertEqual(received_message.hop_count, 2) self.assertEqual(received_message.link_address, IPv6Address('2001:db8::1')) self.assertEqual(received_message.peer_address, IPv6Address('2001:db8::babe')) self.assertEqual(received_message.get_option_of_type(InterfaceIdOption).interface_id, b'eth0') self.assertEqual(received_message.relayed_message, relayed_solicit_message) log_output = '\n'.join(logged.output) self.assertRegex(log_output, r'Received SolicitMessage') self.assertRegex(log_output, r'from fe80::3631:c4ff:fe3c:b2f1') self.assertRegex(log_output, r'via Fa2/3 of relay 2001:db8::babe')
def test_receive_direct(self): multicast_socket = MockSocket(AF_INET6, IPPROTO_UDP, All_DHCP_Relay_Agents_and_Servers, SERVER_PORT, 42, 1608) link_local_socket = MockSocket(AF_INET6, IPPROTO_UDP, 'fe80::1%eth0', SERVER_PORT, 42, 1608) # noinspection PyTypeChecker listening_socket = ListeningSocket('eth0', multicast_socket, link_local_socket, global_address=IPv6Address('2001:db8::1')) multicast_socket.add_to_incoming_queue(solicit_packet, ('2001:db8::babe', 546, 0, 42)) with self.assertLogs(level=logging.DEBUG) as logged: received_message = listening_socket.recv_request() self.assertIsInstance(received_message, RelayForwardMessage) self.assertEqual(received_message.hop_count, 0) self.assertEqual(received_message.link_address, IPv6Address('2001:db8::1')) self.assertEqual(received_message.peer_address, IPv6Address('2001:db8::babe')) self.assertEqual(received_message.get_option_of_type(InterfaceIdOption).interface_id, b'eth0') self.assertEqual(received_message.relayed_message, solicit_message) log_output = '\n'.join(logged.output) self.assertRegex(log_output, r'Received SolicitMessage') self.assertRegex(log_output, r'from 2001:db8::babe')