Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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/'
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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!'
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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}
Ejemplo n.º 7
0
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'
Ejemplo n.º 8
0
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'
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
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}