def test_download_pypi_release_when_isolated_is_on(requests_mock, rf, settings): file_data = 'Hello from PyPI' md5_digest = md5(file_data).hexdigest() settings.LOCALSHOP_ISOLATED = True CIDR.objects.create(cidr='0.0.0.0/0', require_credentials=False) release_file = ReleaseFileFactory(distribution=None, md5_digest=md5_digest) args = (release_file.release.package.name, release_file.pk, release_file.filename) requests_mock.return_value = Mock( **{ 'headers': { 'content-length': len(file_data), 'content-type': 'application/octet-stream', }, 'content': file_data, }) request = rf.get(reverse('packages:download', args=args)) response = download_file(request, *args) assert response.status_code == 200 assert response.content == file_data requests_mock.assert_called_with( u'http://www.example.org/download/test-1.0.0-sdist.zip', proxies=None, stream=True)
def test_wrong_package_name_case(client, admin_user, pypi_stub): CIDR.objects.create(cidr='0.0.0.0/0', require_credentials=False) ReleaseFileFactory(release__package__name='minibar') response = client.get( reverse('packages-simple:simple_detail', kwargs={'slug': 'Minibar'})) assert response.status_code == 302 assert response.url == 'http://testserver/simple/minibar/'
def test_success(client, admin_user, pypi_stub): CIDR.objects.create(cidr='0.0.0.0/0', require_credentials=False) release_file = ReleaseFileFactory() response = client.get( reverse('packages-simple:simple_detail', kwargs={'slug': release_file.release.package.name})) assert response.status_code == 200 assert 'Links for test-package' in response.content assert ('<a href="/packages/test-package/download/1/test-1.0.0-sdist.zip' '#md5=62ecd3ee980023db87945470aa2b347b" rel="package">' 'test-1.0.0-sdist.zip</a>') in response.content
def test_upload_should_not_overwrite_pypi_package(live_server, admin_user): CIDR.objects.create(cidr='0.0.0.0/0', require_credentials=False) ReleaseFileFactory(release__package__name='localshop') headers = { 'Content-type': 'multipart/form-data; boundary=--------------GHSKFJDLGDS7543FJKLFHRE75642756743254', 'Authorization': 'Basic ' + standard_b64encode('admin:password') } response = requests.post(live_server + '/simple/', REGISTER_POST, headers=headers) assert response.status_code == 400 assert response.content == 'localshop is a pypi package!'
def test_download_file_incorrect_md5_sum(requests_mock): file_data = 'My cool package' release_file = ReleaseFileFactory(distribution=None, md5_digest='arcoiro') requests_mock.return_value = mock.Mock( **{ 'headers': { 'content-length': len(file_data), 'content-type': 'application/octet-stream', }, 'content': file_data, }) tasks.download_file.run(release_file.pk) release_file = models.ReleaseFile.objects.get(pk=release_file.pk) assert not release_file.distribution
def test_download_pypi_release(download_file_mock, rf): CIDR.objects.create(cidr='0.0.0.0/0', require_credentials=False) release_file = ReleaseFileFactory(distribution=None) args = (release_file.release.package.name, release_file.pk, release_file.filename) request = rf.get(reverse('packages:download', args=args)) response = download_file(request, *args) # The request is redirected to PyPI assert response.status_code == 302 assert response.url == release_file.url # The download file task must the queued assert download_file_mock.delay.call_count == 1 assert download_file_mock.delay.call_args[1] == {'pk': release_file.pk}
def test_download_local_release(rf, isolated, settings): settings.LOCALSHOP_ISOLATED = isolated CIDR.objects.create(cidr='0.0.0.0/0', require_credentials=False) release_file = ReleaseFileFactory() args = (release_file.release.package.name, release_file.pk, release_file.filename) request = rf.get(reverse('packages:download', args=args)) response = download_file(request, *args) # Localshop must return the release file assert response.status_code == 200 assert response.content == 'the file data' assert response.get('Content-Length') == '13' assert response.get( 'Content-Disposition') == 'attachment; filename=test-1.0.0-sdist.zip'
def test_download_file_missing_content_length(requests_mock): file_data = 'My cool package' release_file = ReleaseFileFactory(distribution=None, md5_digest=md5(file_data).hexdigest()) requests_mock.return_value = mock.Mock( **{ 'headers': { 'content-type': 'application/octet-stream', }, 'content': file_data, }) tasks.download_file.run(release_file.pk) release_file = models.ReleaseFile.objects.get(pk=release_file.pk) assert release_file.distribution.read() == file_data assert release_file.distribution.size == len(file_data) assert release_file.distribution.name == '2.7/t/test-package/test-1.0.0-sdist.zip'
def test_download_file_with_proxy_enabled(requests_mock, settings): settings.LOCALSHOP_HTTP_PROXY = { "http": "http://10.10.1.10:3128/", } file_data = 'My cool package' release_file = ReleaseFileFactory(distribution=None, md5_digest=md5(file_data).hexdigest()) requests_mock.return_value = mock.Mock( **{ 'headers': { 'content-length': len(file_data), 'content-type': 'application/octet-stream', }, 'content': file_data, }) tasks.download_file.run(release_file.pk) requests_mock.assert_called_once_with( 'http://www.example.org/download/test-1.0.0-sdist.zip', proxies=settings.LOCALSHOP_HTTP_PROXY, stream=True)
def test_release_with_a_missing_file(download_file_mock, rf): """ If a local ReleaseFile had a missing file we must set local as False, redirect to the PyPI, requeue the download_file task. """ CIDR.objects.create(cidr='0.0.0.0/0', require_credentials=False) release_file = ReleaseFileFactory() os.remove(release_file.distribution.path) args = (release_file.release.package.name, release_file.pk, release_file.filename) request = rf.get(reverse('packages:download', args=args)) response = download_file(request, *args) # The request is redirected to PyPI assert response.status_code == 302 assert response.url == release_file.url # The download file task must the queued assert download_file_mock.delay.call_count == 1 assert download_file_mock.delay.call_args[1] == {'pk': release_file.pk}