def test_does_handle_missing_dependency_error(tmpdir, capsys): appdir = _create_app_structure(tmpdir) builder = mock.Mock(spec=DependencyBuilder) fake_package = mock.Mock(spec=Package) fake_package.identifier = 'foo==1.2' builder.build_site_packages.side_effect = MissingDependencyError( set([fake_package])) packager = LambdaDeploymentPackager(dependency_builder=builder) packager.create_deployment_package(str(appdir), 'python2.7') out, _ = capsys.readouterr() assert 'Could not install dependencies:\nfoo==1.2' in out
def test_empty_layer_package_raises_error(tmpdir, layer_packager): packager, deps_builder = layer_packager appdir = _create_app_structure(tmpdir) appdir.mkdir('chalicelib') appdir.join('requirements.txt').write('') appdir.join('chalicelib', '__init__.py').write('# Test package') filename = packager.deployment_package_filename(str(appdir), 'python2.7') with pytest.raises(EmptyPackageError): packager.create_deployment_package(str(appdir), 'python2.7') # We should also verify that the file does not exist so it doesn't # get reused in subsequent caches. This shouldn't affect anything, # we're just trying to cleanup properly. assert not os.path.isfile(filename)
def test_does_handle_missing_dependency_error(tmpdir): appdir = _create_app_structure(tmpdir) builder = mock.Mock(spec=DependencyBuilder) fake_package = mock.Mock(spec=Package) fake_package.identifier = 'foo==1.2' builder.build_site_packages.side_effect = MissingDependencyError( set([fake_package])) ui = mock.Mock(spec=chalice.utils.UI) osutils = chalice.utils.OSUtils() packager = LambdaDeploymentPackager( osutils=osutils, dependency_builder=builder, ui=ui, ) packager.create_deployment_package(str(appdir), 'python2.7') output = ''.join([call[0][0] for call in ui.write.call_args_list]) assert 'Could not install dependencies:\nfoo==1.2' in output
def test_no_vendor_in_app_only_packager(tmpdir, app_only_packager): packager, deps_builder = app_only_packager appdir = _create_app_structure(tmpdir) appdir.mkdir('chalicelib') appdir.join('requirements.txt').write('boto3') appdir.join('chalicelib', '__init__.py').write('# Test package') vendor = appdir.mkdir('vendor') extra_package = vendor.mkdir('mypackage') extra_package.join('__init__.py').write('# Test package') name = packager.create_deployment_package(str(appdir), 'python2.7') with zipfile.ZipFile(name) as f: _assert_not_in_zip('mypackage/__init__.py', f) _assert_in_zip('chalicelib/__init__.py', b'# Test package', f) _assert_in_zip('app.py', b'# Test app', f) assert not deps_builder.build_site_packages.called
def test_py_deps_in_layer_package(tmpdir, layer_packager): packager, deps_builder = layer_packager appdir = _create_app_structure(tmpdir) appdir.mkdir('chalicelib') appdir.join('requirements.txt').write('boto3') appdir.join('chalicelib', '__init__.py').write('# Test package') vendor = appdir.mkdir('vendor') extra_package = vendor.mkdir('mypackage') extra_package.join('__init__.py').write('# Test package') name = packager.create_deployment_package(str(appdir), 'python2.7') assert os.path.basename(name).startswith('managed-layer-') with zipfile.ZipFile(name) as f: prefix = 'python/lib/python2.7/site-packages' _assert_in_zip('%s/mypackage/__init__.py' % prefix, b'# Test package', f) _assert_not_in_zip('%s/chalicelib/__init__.py' % prefix, f) _assert_not_in_zip('%s/app.py' % prefix, f) deps_builder.build_site_packages.assert_called_with( 'cp27mu', str(appdir.join('requirements.txt')), mock.ANY)