Beispiel #1
0
 def test_mark_retry(self):
     original_packet = packets.AcknowledgementPacket(3)
     conversation = TFTPConversation(self.client_host, self.client_port,
                                     StubResponseRouterTwo())
     conversation.cached_packet = original_packet
     retry_packet = conversation.mark_retry()
     self.assertEqual(conversation.retries_made, 1)
     self.assertEqual(retry_packet, original_packet)
Beispiel #2
0
 def test_illegal_acknowledgement_packet_during_uninitialized_state(self):
     packet = packets.AcknowledgementPacket(3)
     conversation = TFTPConversation(self.client_host, self.client_port,
                                     StubResponseRouterTwo())
     response_packet = conversation.handle_packet(packet)
     self.assertEqual(conversation.state, tftp_conversation.COMPLETED)
     self.assertEqual(response_packet.__class__, packets.ErrorPacket)
     self.assertEqual(response_packet.error_code, 5)
Beispiel #3
0
    def test_no_action_for_writing(self):
        packet = packets.WriteRequestPacket("example_filename", "netascii")
        conversation = TFTPConversation(self.client_host, self.client_port,
                                        NoActionAvailableResponseRouterStub())
        response_packet = conversation.handle_packet(packet)

        self.assertEqual(conversation.state, tftp_conversation.COMPLETED)
        self.assertEqual(response_packet.__class__, packets.ErrorPacket)
        self.assertEqual(response_packet.error_code, 2)
Beispiel #4
0
    def test_begin_reading(self):
        packet = packets.ReadRequestPacket("example_filename", "netascii")
        conversation = TFTPConversation(self.client_host, self.client_port, StubResponseRouter())
        response_packet = conversation.handle_packet(packet)

        self.assertEqual(conversation.state, tftp_conversation.READING)
        self.assertEqual(conversation.filename, "example_filename")
        self.assertEqual(conversation.mode, "netascii")
        self.assertEqual(conversation.current_block_num, 1)
        self.assertEqual(conversation.read_buffer.__class__, StubReadBuffer)
        self.assertEqual(response_packet.__class__, packets.DataPacket)
        self.assertEqual(conversation.cached_packet, response_packet)
Beispiel #5
0
    def test_begin_writing(self):
        packet = packets.WriteRequestPacket("example_filename", "netascii")
        conversation = TFTPConversation(self.client_host, self.client_port,
                                        StubResponseRouter())
        response_packet = conversation.handle_packet(packet)

        self.assertEqual(conversation.state, tftp_conversation.WRITING)
        self.assertEqual(conversation.filename, "example_filename")
        self.assertEqual(conversation.mode, "netascii")
        self.assertEqual(conversation.current_block_num, 0)
        self.assertEqual(conversation.write_buffer.__class__, WriteBuffer)
        self.assertEqual(conversation.cached_packet, response_packet)
        self.assertEqual(response_packet.__class__, packets.AcknowledgementPacket)
        self.assertEqual(response_packet.block_num, 0)
Beispiel #6
0
    def get_conversation(self, client_host, client_port, packet):
        """Given a packet and client address information, retrieves the
        corresponding conversation. Read and Write request packets initiate new
        conversations, adding them to the conversation manager. Everything else
        retrieves preexisting conversations.

        Args:
            client_host: A hostname or ip address of the client.
            client_port: The port from which the client is connecting.
            packet: The packet that the client sent unpacked.

        Returns:
            A conversation.
        """
        if (isinstance(
                packet,
            (packets.WriteRequestPacket, packets.ReadRequestPacket))):
            conversation = TFTPConversation(client_host, client_port,
                                            self.response_router)
            self.conversation_table.add_conversation(client_host, client_port,
                                                     conversation)
        else:
            conversation = (self.conversation_table.get_conversation(
                client_host, client_port))
        return conversation
Beispiel #7
0
 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)
Beispiel #8
0
 def test_reset_retry_and_time_data(self):
     conversation = TFTPConversation(self.client_host, self.client_port,
                                     StubResponseRouterTwo())
     conversation.retries_made = 39
     conversation.time_of_last_interaction = 42
     conversation._reset_retry_and_time_data(9001)
     self.assertEqual(conversation.retries_made, 0)
     self.assertEqual(conversation.time_of_last_interaction, 9001)
Beispiel #9
0
    def test_finish_reading(self):
        packet = packets.AcknowledgementPacket(3)
        conversation = TFTPConversation(self.client_host, self.client_port,
                                        StubResponseRouterTwo())
        conversation.filename = "example_filename"
        conversation.state = tftp_conversation.READING
        conversation.current_block_num = 3
        conversation.read_buffer = StubReadBufferTwo()
        response_packet = conversation.handle_packet(packet)

        self.assertEqual(conversation.state, tftp_conversation.COMPLETED)
        self.assertEqual(response_packet.__class__, packets.NoOpPacket)
        self.assertEqual(conversation.cached_packet, response_packet)
Beispiel #10
0
    def test_out_of_lock_step_block_num(self):
        packet = packets.DataPacket(2, "")
        conversation = TFTPConversation(self.client_host, self.client_port,
                                        StubResponseRouterTwo())
        conversation.cached_packet = "stub packet"
        conversation.state = tftp_conversation.WRITING
        conversation.current_block_num = 3
        response_packet = conversation.handle_packet(packet)

        self.assertEqual(conversation.state, tftp_conversation.WRITING)
        self.assertEqual(response_packet.__class__, packets.NoOpPacket)
Beispiel #11
0
    def test_illegal_packet_type_during_writing_state(self):
        packet = packets.AcknowledgementPacket(2)
        conversation = TFTPConversation(self.client_host, self.client_port,
                                        StubResponseRouterTwo())
        conversation.cached_packet = "stub packet"
        conversation.state = tftp_conversation.WRITING
        conversation.read_buffer = StubReadBufferTwo()
        response_packet = conversation.handle_packet(packet)

        self.assertEqual(conversation.state, tftp_conversation.WRITING)
        self.assertEqual(response_packet.__class__, packets.ErrorPacket)
        self.assertEqual(response_packet.error_code, 0)
        self.assertEqual(conversation.cached_packet, "stub packet")
Beispiel #12
0
    def test_finish_writing(self):
        packet = packets.DataPacket(3, "O" * 511)
        conversation = TFTPConversation(self.client_host, self.client_port,
                                        StubResponseRouterTwo())
        conversation.state = tftp_conversation.WRITING
        conversation.write_buffer = WriteBuffer()
        conversation.write_buffer.data = "X" * 512
        conversation.filename = "stub_filename"
        conversation.current_block_num = 2
        write_action_wrapper = StubWriteActionWrapper()
        conversation.write_action = write_action_wrapper.stub_action
        response_packet = conversation.handle_packet(packet)

        self.assertEqual(conversation.state, tftp_conversation.COMPLETED)
        self.assertEqual(conversation.current_block_num, 3)
        self.assertEqual(conversation.cached_packet, response_packet)
        self.assertEqual(response_packet.__class__, packets.AcknowledgementPacket)
        self.assertEqual(response_packet.block_num, 3)
        # action should get invoked, saving this state in the wrapper class
        self.assertEqual(write_action_wrapper.received_state,
            ("10.26.0.3", 12345, "stub_filename", "X" * 512 + "O" * 511))
Beispiel #13
0
    def test_continue_reading(self):
        packet = packets.AcknowledgementPacket(1)
        conversation = TFTPConversation(self.client_host, self.client_port,
                                        StubResponseRouterTwo())
        conversation.state = tftp_conversation.READING
        conversation.read_buffer = StubReadBufferTwo()
        conversation.current_block_num = 1
        response_packet = conversation.handle_packet(packet)

        self.assertEqual(conversation.state, tftp_conversation.READING)
        self.assertEqual(conversation.current_block_num, 2)
        self.assertEqual(response_packet.data, "X" * 512)
        self.assertEqual(response_packet.__class__, packets.DataPacket)
        self.assertEqual(conversation.cached_packet, response_packet)
Beispiel #14
0
 def test_init(self):
     conversation = TFTPConversation(self.client_host, self.client_port, StubResponseRouter())
     self.assertEqual(conversation.client_host, "10.26.0.3")
     self.assertEqual(conversation.client_port, 12345)