Exemplo n.º 1
0
    def test_confirm_and_receive(self):
        self.action = ftplib.ACTIONS.RECEIVE
        with open(os.path.join(ftplib.CONTENT_DIR, self.filename), 'rb') as f:
            f.seek(0)  # beginning of file
            file_data = f.read(ftplib.BUFFER_SIZE - ftplib.PROTO_HEADER_LENGTH)
            file_offset = f.tell()

        ftp_receive = ftplib.create_packet(file_data, self.action)
        self.packet_testing(ftp_receive)

        self.packet.checksum = ftplib.packet_md5sum(file_data)
        self.assertEqual(file_offset,
                         ftplib.BUFFER_SIZE - ftplib.PROTO_HEADER_LENGTH)
        self.assertEqual(file_data, self.packet.content)

        packet_md5sum = ftplib.packet_md5sum(self.packet.content)
        data_md5sum = ftplib.packet_md5sum(file_data)
        self.assertEqual(packet_md5sum, data_md5sum)
        self.assertEqual(packet_md5sum, self.packet.checksum)

        self.setUp()
        self.action = ftplib.ACTIONS.CONFIRM
        ftp_confirm = ftplib.create_packet(packet_md5sum, self.action)
        self.packet_testing(ftp_confirm)

        self.assertEqual(data_md5sum, ftplib.decode(self.packet.content))
        self.assertEqual(packet_md5sum, ftplib.decode(self.packet.content))
Exemplo n.º 2
0
    def test_start_packet(self):
        self.action = ftplib.ACTIONS.START_REQUEST
        ftp_start_request = ftplib.create_packet(self.filename, self.action)
        self.packet_testing(ftp_start_request)

        # Test Decoding
        self.assertEqual(self.filename, ftplib.decode(self.packet.content))
        self.assertEqual('test.png', ftplib.decode(self.packet.content))
Exemplo n.º 3
0
    def test_end_packet(self):
        self.action = ftplib.ACTIONS.END_REQUEST
        file_md5sum = ftplib.file_md5sum(self.filename)
        ftp_end_request = ftplib.create_packet(file_md5sum, self.action)
        self.packet_testing(ftp_end_request)

        self.assertEqual(file_md5sum, ftplib.decode(self.packet.content))
Exemplo n.º 4
0
 def do_END_REQUEST(self):
     file_checksum = ftplib.file_md5sum(self.file_request)
     if file_checksum == ftplib.decode(self.packet.content):
         print(
             f"Success! '{self.file_request}' has been transferred without incident . . ."
         )
     else:
         raise ValueError(
             'corrupted file: transfer failed: mismatched checksum detected'
         )
Exemplo n.º 5
0
 def do_CONFIRM(self):
     if self._awaiting_confirmation:
         if self.packet.checksum != ftplib.decode(self.packet.content):
             raise ValueError(
                 'corrupted packet: mismatched checksum detected')
         self._awaiting_confirmation = False  # send next packet w/file data . . .
         self.packet.reset()
     else:
         raise ValueError(
             'invalid packet: no verification has been requested')
Exemplo n.º 6
0
 def do_START_REQUEST(self):
     if self._requested_file is None:
         self._requested_file = ftplib.decode(self.packet.content)
         file_path = os.path.join(ftplib.CONTENT_DIR, self._requested_file)
         if not os.path.exists(file_path) or not os.path.isfile(file_path):
             raise ValueError(
                 f"invalid request: '{self._requested_file}' does not exist or is not a valid file."
             )
         self.packet.reset()
     else:
         raise ValueError('invalid packet: file has already been requested')