def test_delete_without_add(self): # Seems uninteresting, but this test is useful to defend against # exceptions table = ConversationTable() self.assertEqual(table.delete_conversation("127.0.0.1", "3942"), False) self.assertIsNone(table.get_conversation("127.0.0.1", "3942")) self.assertTrue(table.lock._RLock__count == 0)
def test_get_conversation_new_with_reading_packet(self): conversation_table = ConversationTable() packet = packets.ReadRequestPacket('stub filename', 'stub mode') reactor = Reactor('stub_socket', 'stub_router', conversation_table) conversation = reactor.get_conversation('10.26.0.1', 3942, packet) self.assertEqual(len(conversation_table), 1) self.assertTrue(isinstance(conversation, TFTPConversation))
def test_add_delete(self): table = ConversationTable() conversation = StubConversation() table.add_conversation("127.0.0.1", "3942", conversation) self.assertTrue(table.delete_conversation("127.0.0.1", "3942")) self.assertIsNone(table.get_conversation("127.0.0.1", "3942")) self.assertTrue(table.lock._RLock__count == 0)
def test_add_get(self): table = ConversationTable() conversation = StubConversation() table.add_conversation("127.0.0.1", "3942", conversation) self.assertEqual(table.get_conversation("127.0.0.1", "3942"), conversation) self.assertTrue(table.lock._RLock__count == 0)
def test_find_and_handle_stale_conversations(self): conversation = StubConversation(12344) conversation.retries_made = 6 table = ConversationTable() table.add_conversation("stub_host", "stub_port", conversation) performer = Performer(self.sock, table, 10, 6) performer.find_and_handle_stale_conversations() self.assertEqual(len(table), 0)
def test_handle_stale_conversation_retry(self): conversation = StubConversation(12344) conversation.retries_made = 0 table = ConversationTable() performer = Performer(self.sock, table, 10, 6) performer._handle_stale_conversation(conversation) self.assertEqual(self.sock.sent_data, "stub_packet_data") self.assertEqual(self.sock.sent_addr, ("stub_host", "stub_port"))
def test_conversations(self): table = ConversationTable() conversation_one = StubConversation() table.add_conversation("10.0.0.1", "3942", conversation_one) conversation_two = StubConversation() table.add_conversation("10.0.0.2", "3942", conversation_two) # Either order of returned results is fine self.assertTrue( table.conversations == [conversation_one, conversation_two] or table.conversations == [conversation_two, conversation_one], "conversations retrieved don't match")
def __init__(self): self.host = config.HOST self.port = config.PORT self.response_router = ResponseRouter() self.conversation_table = ConversationTable() self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.reactor = Reactor(self.sock, self.response_router, self.conversation_table) self.performer = Performer(self.sock, self.conversation_table, config.RESEND_TIMEOUT, config.RETRIES_BEFORE_GIVEUP)
def test_get_conversation_old_with_data_packet(self): conversation_table = ConversationTable() packet = packets.DataPacket('stub block number', 'stub data') old_conversation = TFTPConversation('10.26.0.1', 3942, 'stub_router') conversation_table.add_conversation('10.26.0.1', 3942, old_conversation) reactor = Reactor('stub_socket', 'stub_router', conversation_table) conversation = reactor.get_conversation('10.26.0.1', 3942, packet) self.assertEqual(len(conversation_table), 1) self.assertTrue(isinstance(conversation, TFTPConversation)) self.assertEqual(conversation, old_conversation)
def test_handle_stale_conversation_giveup(self): conversation = StubConversation(12344) conversation.retries_made = 6 table = ConversationTable() table.add_conversation("stub_host", "stub_port", conversation) performer = Performer(self.sock, table, 10, 6) performer._handle_stale_conversation(conversation) self.assertEqual(self.sock.sent_data, '\x00\x05\x00\x00Conversation Timed Out\x00') self.assertEqual(self.sock.sent_addr, ("stub_host", "stub_port")) self.assertIsNone(table.get_conversation("stub_host", "stub_port"), None)
def test_get_stale_conversations(self): table = ConversationTable() conversation_one = StubConversation(12344) conversation_two = StubConversation(12345) conversation_three = StubConversation(12346) table.conversation_table = { ("10.26.0.1", "3942"): conversation_one, ("10.26.0.2", "3942"): conversation_two, ("10.26.0.3", "3942"): conversation_three } performer = Performer(self.sock, table, 10, 6) # Either order of returned results is fine self.assertTrue( performer._get_stale_conversations( 5, 12350) == [conversation_one, conversation_two] or performer.get_stale_conversations( 5, 12350) == [conversation_two, conversation_one], "stale conversations found don't match")
def test_sweep_completed_conversations(self): conversation_one = StubConversation(12344) conversation_one.state = tftp_conversation.COMPLETED conversation_two = StubConversation(12345) conversation_two.state = tftp_conversation.READING conversation_three = StubConversation(12346) conversation_three.state = tftp_conversation.COMPLETED table = ConversationTable() table.conversation_table = { ("10.26.0.1", "3942"): conversation_one, ("10.26.0.2", "3942"): conversation_two, ("10.26.0.3", "3942"): conversation_three } performer = Performer(self.sock, table, 10, 6) performer.sweep_completed_conversations() self.assertEqual(table.conversation_table, { ("10.26.0.2", "3942"): conversation_two, })
def test_get_without_add(self): table = ConversationTable() self.assertIsNone(table.get_conversation("127.0.0.1", "3942")) self.assertTrue(table.lock._RLock__count == 0)