def test_terminate(self): # Create upload upload = UploadFactory(filename='test_data.txt', upload_metadata=json.dumps( {'filename': 'test_data.txt'}), upload_length=100, state=states.DONE) # Prepare headers headers = { 'Tus-Resumable': tus_api_version, } # Perform request result = self.client.delete(reverse( 'rest_framework_tus:api:upload-detail', kwargs={'guid': upload.guid}), headers=headers) # Check result assert result.status_code == status.HTTP_204_NO_CONTENT # Verify existence assert get_upload_model().objects.filter( guid=upload.guid).exists() is False
def test_head_incorrect_header(self): # Create upload upload = UploadFactory() # Perform request result = self.client.head(reverse('rest_framework_tus:api:upload-detail', kwargs={'guid': upload.guid})) assert result.status_code == status.HTTP_400_BAD_REQUEST # Validate response headers assert 'Tus-Resumable' in result
def test_head(self): # Create upload upload = UploadFactory(upload_metadata=json.dumps({'filename': 'test_file.jpg'}), expires=timezone.now() + timedelta(hours=1)) # Perform request result = self.client.head( reverse('rest_framework_tus:api:upload-detail', kwargs={'guid': upload.guid}), headers={'Tus-Resumable': tus_api_version}) # Check status assert result.status_code == status.HTTP_200_OK # Validate response headers assert 'Tus-Resumable' in result assert int(result['Upload-Offset']) >= 0 assert result['Upload-Metadata'] == 'filename {}'.format(encode_base64_to_string('test_file.jpg')) assert result['Upload-Expires'] is not None
def _test_upload_with_checksum(self, checksum_algorithm, checksum=None, expected_failure=None): # Define blob blob = 'Şởოè śấოρļể ẮŞĈİĪ-ŧểхŧ'.encode( 'utf-8') # Make sure the data are **BYTES**!!!! # Create test data test_data = ('test_data.txt', blob) # Create upload upload = UploadFactory(filename=test_data[0], upload_metadata=json.dumps( {'filename': test_data[0]}), upload_length=len(test_data[1])) # Define chunk size chunk_size = 4 # 4 bytes # Write upload_offset = 0 data = copy.copy(test_data[1]) while True: # Take chunk chunk = data[:chunk_size] # Prepare headers headers = { 'Tus-Resumable': tus_api_version, 'Upload-Offset': upload_offset, } # Prepare checksum if checksum_algorithm is not None: headers[ 'Upload-Checksum'] = checksum or create_checksum_header( chunk, checksum_algorithm) # Perform request result = self.client.patch( reverse('rest_framework_tus:api:upload-detail', kwargs={'guid': upload.guid}), data=chunk, headers=headers, content_type='application/offset+octet-stream') # Maybe we expect a failure if expected_failure: assert result.status_code == expected_failure # Cleanup file upload.delete() # The test is over here! return # Check result assert result.status_code == status.HTTP_204_NO_CONTENT # Update data data = data[chunk_size:] # Update iterator upload_offset += len(chunk) # Check final piece if upload_offset == len(test_data[1]): break # Reload upload upload = get_upload_model().objects.get(guid=upload.guid) # Assert file is ready assert upload.state == states.DONE # Compare data uploaded_data = read_bytes_from_field_file(upload.uploaded_file.file) assert uploaded_data == blob # Cleanup file upload.delete()