Пример #1
0
def test_feed_filter_compatible_requirements():
    "Install#feed() Should skip requirements that already have compatible matches in the mapping"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})

    # And I mock the finder service end-point
    install.finder.queue = Mock()
    install.pipeline()

    # When I feed the installer with a requirement *without dependencies*
    install.feed('tests', requirement='package (1.0)')

    # And I feed the installer with another requirement for the same
    # package above, requested by `something-else`
    install.feed('tests',
                 requirement='package (3.0)',
                 dependency_of='something-else')

    # Then I see that the requirement without any dependencies
    # (primary requirement) is the chosen one
    install.finder.queue.assert_called_once_with('tests',
                                                 requirement='package (1.0)')
    install.mapping.requirements.should.equal(set(['package (1.0)']))
Пример #2
0
def test_pipeline_downloader_tarzip_curdler():
    "Install#pipeline() should route all the tar/zip files to the curdler"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})

    # And I mock the curdler service end-point and start all the services
    install.curdler.queue = Mock(__name__=str('queue'))
    install.pipeline()

    # Feed the installer with the requirement
    install.finder.queue = Mock()
    install.feed('tests', requirement='curdling')

    # When I fire the download.finished() signal with proper data
    install.downloader.emit('finished',
        'downloader',
        requirement='curdling',
        tarball='curdling-0.1.tar.gz')

    # Than I see that the curdler received a request
    install.curdler.queue.assert_called_once_with(
        'downloader',
        requirement='curdling',
        tarball='curdling-0.1.tar.gz')
Пример #3
0
def test_pipeline_curdler_wheel_dependencer():
    "Install#pipeline() should route all the wheel files from the curdler to the dependencer"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})

    # And I mock the curdler service end-point and start all the services
    install.dependencer.queue = Mock(__name__=str('queue'))
    install.pipeline()

    # Feed the installer with the requirement
    install.finder.queue = Mock()
    install.feed('tests', requirement='curdling')

    # When I fire the curdler.finished() signal with proper data
    install.curdler.emit('finished',
        'curdler',
        requirement='curdling',
        wheel='curdling-0.1.0-py27-none-any.whl')

    # Than I see that the dependencer received a request
    install.dependencer.queue.assert_called_once_with(
        'curdler',
        requirement='curdling',
        wheel='curdling-0.1.0-py27-none-any.whl')
Пример #4
0
def test_pipeline_downloader_tarzip_curdler():
    "Install#pipeline() should route all the tar/zip files to the curdler"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})

    # And I mock the curdler service end-point and start all the services
    install.curdler.queue = Mock(__name__=str('queue'))
    install.pipeline()

    # Feed the installer with the requirement
    install.finder.queue = Mock()
    install.feed('tests', requirement='curdling')

    # When I fire the download.finished() signal with proper data
    install.downloader.emit('finished',
                            'downloader',
                            requirement='curdling',
                            tarball='curdling-0.1.tar.gz')

    # Than I see that the curdler received a request
    install.curdler.queue.assert_called_once_with(
        'downloader', requirement='curdling', tarball='curdling-0.1.tar.gz')
Пример #5
0
def test_pipeline_curdler_wheel_dependencer():
    "Install#pipeline() should route all the wheel files from the curdler to the dependencer"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})

    # And I mock the curdler service end-point and start all the services
    install.dependencer.queue = Mock(__name__=str('queue'))
    install.pipeline()

    # Feed the installer with the requirement
    install.finder.queue = Mock()
    install.feed('tests', requirement='curdling')

    # When I fire the curdler.finished() signal with proper data
    install.curdler.emit('finished',
                         'curdler',
                         requirement='curdling',
                         wheel='curdling-0.1.0-py27-none-any.whl')

    # Than I see that the dependencer received a request
    install.dependencer.queue.assert_called_once_with(
        'curdler',
        requirement='curdling',
        wheel='curdling-0.1.0-py27-none-any.whl')
Пример #6
0
def test_feed_filter_dups():
    "Install#feed() Should skip duplicated requirements"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})

    # And I mock the finder service end-point
    install.finder.queue = Mock()
    install.pipeline()

    # Feed the installer with the requirement
    install.feed('tests', requirement='package')
    install.finder.queue.assert_called_once_with('tests',
                                                 requirement='package')
    install.mapping.requirements.should.equal(set(['package']))

    # When I fire the finder.finished() signal with proper data
    install.feed('tests', requirement='package')

    # Then I see the feed function just skipped this repeated requirement
    install.finder.queue.assert_called_once_with('tests',
                                                 requirement='package')
    install.mapping.requirements.should.equal(set(['package']))
Пример #7
0
def test_pipeline_finder_found_downloader():
    "Install#pipeline() should route the finder output to the downloader"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})

    # And I mock the downloader service end-point
    install.finder.queue = Mock(__name__=str('queue'))
    install.downloader.queue = Mock(__name__=str('queue'))
    install.pipeline()

    # Feed the installer with the requirement
    install.finder.queue = Mock()
    install.feed('tests', requirement='package')
    install.feed('tests', requirement='package (0.0.1)')

    # When I fire the finder.finished() signal with proper data
    install.finder.emit(
        'finished',
        'finder',
        requirement='package',
        url='http://srv.com/package.tar.gz',
        locator_url='http://*****:*****@srv.com/simple',
    )

    # And manually add the first package to the `processing_packages` set,
    # because we mock `queue`, the component that actually does that for us.
    install.downloader.processing_packages.add('package.tar.gz')

    # And When I fire another finished signal with a different requirement but
    # the same url
    install.finder.emit(
        'finished',
        'finder',
        requirement='package (0.0.1)',
        url='http://another.srv.com/package.tar.gz',
        locator_url='http://srv.com/simple',
    )

    # Then I see that the downloader received a single request. The second one
    # was duplicated
    install.downloader.queue.assert_called_once_with(
        'finder',
        requirement='package',
        url='http://srv.com/package.tar.gz',
        locator_url='http://*****:*****@srv.com/simple',
    )
Пример #8
0
def test_pipeline_finder_found_downloader():
    "Install#pipeline() should route the finder output to the downloader"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})

    # And I mock the downloader service end-point
    install.finder.queue = Mock(__name__=str('queue'))
    install.downloader.queue = Mock(__name__=str('queue'))
    install.pipeline()

    # Feed the installer with the requirement
    install.finder.queue = Mock()
    install.feed('tests', requirement='package')
    install.feed('tests', requirement='package (0.0.1)')

    # When I fire the finder.finished() signal with proper data
    install.finder.emit('finished',
        'finder',
        requirement='package',
        url='http://srv.com/package.tar.gz',
        locator_url='http://*****:*****@srv.com/simple',
    )

    # And manually add the first package to the `processing_packages` set,
    # because we mock `queue`, the component that actually does that for us.
    install.downloader.processing_packages.add('package.tar.gz')

    # And When I fire another finished signal with a different requirement but
    # the same url
    install.finder.emit('finished',
        'finder',
        requirement='package (0.0.1)',
        url='http://another.srv.com/package.tar.gz',
        locator_url='http://srv.com/simple',
    )

    # Then I see that the downloader received a single request. The second one
    # was duplicated
    install.downloader.queue.assert_called_once_with(
        'finder',
        requirement='package',
        url='http://srv.com/package.tar.gz',
        locator_url='http://*****:*****@srv.com/simple',
    )
Пример #9
0
def test_feed_filter_blacklisted_packages():
    "Install#feed() Should skip blacklisted package names"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})

    # And I mock the finder service end-point
    install.finder.queue = Mock()
    install.pipeline()

    # When I feed the installer with the requirement
    install.feed('tests', requirement='setuptools')

    # Then I see it was just skipped
    install.finder.queue.called.should.be.false
Пример #10
0
def test_feed_filter_blacklisted_packages():
    "Install#feed() Should skip blacklisted package names"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})

    # And I mock the finder service end-point
    install.finder.queue = Mock()
    install.pipeline()

    # When I feed the installer with the requirement
    install.feed('tests', requirement='setuptools')

    # Then I see it was just skipped
    install.finder.queue.called.should.be.false
Пример #11
0
def test_feed_requirement_finder():
    "Install#feed() should route all queued requirements to the finder"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})
    install.pipeline()

    # And I mock some service end-points
    install.finder.queue = Mock()

    # When I request the installation of a new requirement
    install.feed('tests', requirement='curdling')

    # Then I see the finder received a request
    install.finder.queue.assert_called_once_with('tests',
                                                 requirement='curdling')
Пример #12
0
def test_pipeline_update_mapping_errors():
    "Install#pipeline() Should update Install#mapping#errors whenever an error occurs"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})
    install.pipeline()

    install.finder.handle = Mock(side_effect=Exception('P0wned!'))

    # When I feed the installer with a requirement
    install.feed('tests', requirement='pkg (0.1)')
    install.finder.queue(None)
    install.finder._worker()

    install.mapping.errors.should.have.length_of(1)
    str(install.mapping.errors['pkg'][0]['exception']).should.equal('P0wned!')
Пример #13
0
def test_pipeline_update_mapping_errors():
    "Install#pipeline() Should update Install#mapping#errors whenever an error occurs"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})
    install.pipeline()

    install.finder.handle = Mock(side_effect=Exception('P0wned!'))

    # When I feed the installer with a requirement
    install.feed('tests', requirement='pkg (0.1)')
    install.finder.queue(None)
    install.finder._worker()

    install.mapping.errors.should.have.length_of(1)
    str(install.mapping.errors['pkg'][0]['exception']).should.equal('P0wned!')
Пример #14
0
def test_feed_requirement_finder():
    "Install#feed() should route all queued requirements to the finder"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})
    install.pipeline()

    # And I mock some service end-points
    install.finder.queue = Mock()

    # When I request the installation of a new requirement
    install.feed('tests', requirement='curdling')

    # Then I see the finder received a request
    install.finder.queue.assert_called_once_with(
        'tests', requirement='curdling')
Пример #15
0
def test_pipeline_update_mapping_stats():
    "Install#pipeline() Should update the Install#mapping#stats"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})
    install.pipeline()

    install.finder.handle = Mock(return_value={
        'requirement': 'pkg',
        'url': 'pkg.tar.gz',
    })

    # When I feed the installer with a requirement
    install.feed('tests', requirement='pkg')
    install.finder.queue(None)
    install.finder._worker()

    install.mapping.count('finder').should.equal(1)
Пример #16
0
def test_pipeline_update_mapping_stats():
    "Install#pipeline() Should update the Install#mapping#stats"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})
    install.pipeline()

    install.finder.handle = Mock(return_value={
        'requirement': 'pkg',
        'url': 'pkg.tar.gz',
    })

    # When I feed the installer with a requirement
    install.feed('tests', requirement='pkg')
    install.finder.queue(None)
    install.finder._worker()

    install.mapping.count('finder').should.equal(1)
Пример #17
0
def test_feed_link_download():
    "Install#feed() should route all queued links to the downloader"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})
    install.pipeline()

    # And I mock some service end-points
    install.downloader.queue = Mock()

    # When I request the installation of a new requirement
    install.feed('tests', requirement='http://srv/pkgs/curdling-0.1.tar.gz')

    # I see that the downloader received a request
    install.downloader.queue.assert_called_once_with(
        'tests',
        requirement='http://srv/pkgs/curdling-0.1.tar.gz',
        url='http://srv/pkgs/curdling-0.1.tar.gz')
Пример #18
0
def test_feed_link_download():
    "Install#feed() should route all queued links to the downloader"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})
    install.pipeline()

    # And I mock some service end-points
    install.downloader.queue = Mock()

    # When I request the installation of a new requirement
    install.feed('tests', requirement='http://srv/pkgs/curdling-0.1.tar.gz')

    # I see that the downloader received a request
    install.downloader.queue.assert_called_once_with(
        'tests',
        requirement='http://srv/pkgs/curdling-0.1.tar.gz',
        url='http://srv/pkgs/curdling-0.1.tar.gz')
Пример #19
0
def test_feed_filter_compatible_requirements():
    "Install#feed() Should skip requirements that already have compatible matches in the mapping"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})

    # And I mock the finder service end-point
    install.finder.queue = Mock()
    install.pipeline()

    # When I feed the installer with a requirement *without dependencies*
    install.feed('tests', requirement='package (1.0)')

    # And I feed the installer with another requirement for the same
    # package above, requested by `something-else`
    install.feed('tests', requirement='package (3.0)', dependency_of='something-else')

    # Then I see that the requirement without any dependencies
    # (primary requirement) is the chosen one
    install.finder.queue.assert_called_once_with('tests', requirement='package (1.0)')
    install.mapping.requirements.should.equal(set(['package (1.0)']))
Пример #20
0
def test_feed_filter_dups():
    "Install#feed() Should skip duplicated requirements"

    # Given that I have the install command
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})

    # And I mock the finder service end-point
    install.finder.queue = Mock()
    install.pipeline()

    # Feed the installer with the requirement
    install.feed('tests', requirement='package')
    install.finder.queue.assert_called_once_with('tests', requirement='package')
    install.mapping.requirements.should.equal(set(['package']))

    # When I fire the finder.finished() signal with proper data
    install.feed('tests', requirement='package')

    # Then I see the feed function just skipped this repeated requirement
    install.finder.queue.assert_called_once_with('tests', requirement='package')
    install.mapping.requirements.should.equal(set(['package']))
Пример #21
0
def test_load_installer_forward_errors():
    "Install#load_installer() Should forward errors from other services when `installable_packages` != `initial_requirements`"

    # Given that I have the install command with an empty index
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})
    install.pipeline()

    # And I feed the installer with a requirement
    install.feed('tests', requirement='package')

    # And I cause an error in the download worker
    install.downloader.handle = Mock(side_effect=Exception('Beep-Bop'))

    # And I mock the installer queue
    install.installer.queue = Mock(__name__=str('queue'))

    # When I try to retrieve and build all the requirements
    install.start()
    install.retrieve_and_build()

    # And When I load the installer
    names, errors = install.load_installer()

    # Then I see the list of all successfully processed packages
    names.should.be.empty

    # And Then I see that the error list was filled properly
    errors.should.have.length_of(1)
    errors.should.have.key('package').with_value.being.a(list)
    errors['package'].should.have.length_of(1)

    errors['package'][0]['dependency_of'].should.equal([None])
    errors['package'][0]['exception'].should.be.a(ReportableError)
    str(errors['package'][0]['exception']).should.equal(
        'Requirement `package\' not found')
Пример #22
0
def test_load_installer_forward_errors():
    "Install#load_installer() Should forward errors from other services when `installable_packages` != `initial_requirements`"

    # Given that I have the install command with an empty index
    index = Index('')
    index.storage = {}
    install = Install(conf={'index': index})
    install.pipeline()

    # And I feed the installer with a requirement
    install.feed('tests', requirement='package')

    # And I cause an error in the download worker
    install.downloader.handle = Mock(side_effect=Exception('Beep-Bop'))

    # And I mock the installer queue
    install.installer.queue = Mock(__name__=str('queue'))

    # When I try to retrieve and build all the requirements
    install.start()
    install.retrieve_and_build()

    # And When I load the installer
    names, errors = install.load_installer()

    # Then I see the list of all successfully processed packages
    names.should.be.empty

    # And Then I see that the error list was filled properly
    errors.should.have.length_of(1)
    errors.should.have.key('package').with_value.being.a(list)
    errors['package'].should.have.length_of(1)

    errors['package'][0]['dependency_of'].should.equal([None])
    errors['package'][0]['exception'].should.be.a(ReportableError)
    str(errors['package'][0]['exception']).should.equal(
        'Requirement `package\' not found')