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))
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))
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))
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' )
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')
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')