def test_failed_build_with_debug(self): def call_effect(*args, **kwargs): if "snapcraft snap --output snap.snap" in " ".join(args[0]): raise CalledProcessError(returncode=255, cmd=args[0]) return self.fake_lxd.check_output_side_effect()(*args, **kwargs) self.fake_lxd.check_call_mock.side_effect = call_effect self.project = Project( snapcraft_yaml_file_path=self.snapcraft_yaml. snapcraft_yaml_file_path, debug=True, ) self.make_containerbuild().execute() self.fake_lxd.check_call_mock.assert_has_calls( [call(["lxc", "exec", self.fake_lxd.name, "--", "bash", "-i"])])
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent("""\ name: crystal-snap base: unsupported-base """)) self.project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path) class Options: source = "dir" crystal_channel = "latest/stable" crystal_build_options = [] self.options = Options()
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent( """\ name: gradle-snap base: {base} """.format( base=self.base ) ) ) self.options.gradle_openjdk_version = self.version self.project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path)
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent("""\ name: scons-snap base: core18 """)) self.project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path) class Options: """Internal Options Class matching the Scons plugin""" scons_options = ["--debug=explain"] self.options = Options()
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent("""\ name: maven-snap base: unsupported-base """)) self.project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path) class Options: source = "dir" maven_version = "3.3" maven_version_checksum = "sha1/1234567890" maven_openjdk_version = "10" self.options = Options()
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent( """\ name: plainbox-snap base: unsupported-base """ ) ) self.project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path) class Options: source = "dir" self.options = Options()
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent("""\ name: meson-snap base: core18 """)) self.project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path) class Options: """Internal Options Class matching the Meson plugin""" meson_parameters = [] meson_version = [] self.options = Options()
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent("""\ name: waf-snap base: core18 """)) self.project = Project(target_deb_arch=self.deb_arch, snapcraft_yaml_file_path=snapcraft_yaml_path) class Options: """Internal Options Class matching the Waf plugin""" configflags = [] self.options = Options()
def test_non_prime_and_no_version(self): snapcraft_yaml = fixture_setup.SnapcraftYaml(self.path, version=None) snapcraft_yaml.data["adopt-info"] = "test-part" snapcraft_yaml.update_part( "test-part", { "plugin": "nil", "override-build": "snapcraftctl set-version 1.0" }, ) self.useFixture(snapcraft_yaml) project = Project( snapcraft_yaml_file_path=snapcraft_yaml.snapcraft_yaml_file_path) project_config = project_loader.load_config(project) # This should not fail lifecycle.execute(steps.PULL, project_config)
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent( """\ name: conda-snap base: unsupported-base """ ) ) self.project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path) class Options: pass self.options = Options()
def setUp(self): super().setUp() self.project = Project(target_deb_arch=self.deb_arch) self.project._snap_meta = meta.snap.Snap(name="test-snap", base="core18") patcher = mock.patch("snapcraft.internal.common.run") self.run_mock = patcher.start() self.addCleanup(patcher.stop) patcher = mock.patch("snapcraft.ProjectOptions.is_cross_compiling") patcher.start() self.addCleanup(patcher.stop) patcher = mock.patch.dict(os.environ, {}) self.env_mock = patcher.start() self.addCleanup(patcher.stop)
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent( """\ name: go-snap base: core18 """ ) ) self.project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path) class Options: source = "." nodejs_version = nodejs._NODEJS_VERSION nodejs_package_manager = "npm" nodejs_yarn_version = "" source = "." self.options = Options() # always have a package.json stub under source open("package.json", "w").close() patcher = mock.patch("snapcraft.internal.common.run") self.run_mock = patcher.start() self.addCleanup(patcher.stop) patcher = mock.patch("snapcraft.internal.common.run_output") self.run_output_mock = patcher.start() self.addCleanup(patcher.stop) self.run_output_mock.return_value = '{"dependencies": []}' patcher = mock.patch("snapcraft.sources.Tar") self.tar_mock = patcher.start() self.addCleanup(patcher.stop) self.nodejs_url = nodejs.get_nodejs_release( nodejs._NODEJS_VERSION, self.project.deb_arch ) self.useFixture(fixture_setup.CleanEnvironment())
def get_project(*, skip_snapcraft_yaml: bool = False, **kwargs): if skip_snapcraft_yaml: snapcraft_yaml_file_path = None else: snapcraft_yaml_file_path = get_snapcraft_yaml() ctx = click.get_current_context() for key, value in ctx.parent.params.items(): if not kwargs.get(key): kwargs[key] = value project = Project( debug=kwargs.pop("debug"), use_geoip=kwargs.pop("enable_geoip"), parallel_builds=not kwargs.pop("no_parallel_builds"), target_deb_arch=kwargs.pop("target_arch"), snapcraft_yaml_file_path=snapcraft_yaml_file_path, ) return project
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent("""\ name: maven-snap base: {base} """.format(base=self.base))) self.project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path) class Options: maven_options = [] maven_targets = [""] maven_version = maven._DEFAULT_MAVEN_VERSION maven_version_checksum = maven._DEFAULT_MAVEN_CHECKSUM maven_openjdk_version = self.version self.options = Options()
def test_project_with_snapcraft_yaml_file_path_carries_info(self): snapcraft_yaml_file_path = self.make_snapcraft_yaml( """\ name: foo version: "1" summary: bar description: baz confinement: strict parts: part1: plugin: go """ ) project = Project(snapcraft_yaml_file_path=snapcraft_yaml_file_path) # Only 1 value is enough self.assertThat(project.info.name, Equals("foo"))
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent("""\ name: go-snap base: core18 """)) self.project = Project(target_deb_arch=self.deb_arch, snapcraft_yaml_file_path=snapcraft_yaml_path) patcher = mock.patch("snapcraft.internal.common.run") self.run_mock = patcher.start() self.addCleanup(patcher.stop) patcher = mock.patch("snapcraft.internal.common.run_output") self.run_output_mock = patcher.start() self.addCleanup(patcher.stop)
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent("""\ name: ant-snap base: {base} """.format(base=self.base))) self.project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path) class Options: ant_properties = {} ant_build_targets = None ant_version = ant._DEFAULT_ANT_VERSION ant_version_checksum = ant._DEFAULT_ANT_CHECKSUM ant_openjdk_version = self.version self.options = Options()
def get_project(*, is_managed_host: bool = False, **kwargs): # We need to do this here until we can get_snapcraft_yaml as part of Project. if is_managed_host: os.chdir(os.path.expanduser(os.path.join("~", "project"))) snapcraft_yaml_file_path = get_snapcraft_yaml() ctx = click.get_current_context() for key, value in ctx.parent.params.items(): if not kwargs.get(key): kwargs[key] = value project = Project( debug=kwargs.pop("debug"), target_deb_arch=kwargs.pop("target_arch"), snapcraft_yaml_file_path=snapcraft_yaml_file_path, is_managed_host=is_managed_host, ) return project
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent("""\ name: gradle-snap base: {base} """.format(base=self.base))) self.project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path) class Options: gradle_options = [] gradle_output_dir = "build/libs" gradle_version = gradle._DEFAULT_GRADLE_VERSION gradle_version_checksum = gradle._DEFAULT_GRADLE_CHECKSUM gradle_openjdk_version = self.version self.options = Options()
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent("""\ name: plainbox-snap base: core18 """)) self.project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path) class Options: source = "." self.options = Options() patcher = mock.patch.object(plainbox_provider.PlainboxProviderPlugin, "run") self.mock_run = patcher.start() self.addCleanup(patcher.stop)
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent("""\ name: gradle-snap base: core18 """)) self.project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path) class Options: gradle_options = [] gradle_build_jar = False gradle_output_dir = "build/libs" gradle_version = gradle._DEFAULT_GRADLE_VERSION gradle_version_checksum = gradle._DEFAULT_GRADLE_CHECKSUM gradle_openjdk_version = "11" self.options = Options()
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent("""\ name: ant-snap base: {base} """.format(base=self.base))) self.project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path) class Options: ant_properties = {} ant_build_targets = None ant_channel = None ant_version = "1.10.5" ant_version_checksum = "sha512/a7f1e0cec9d5ed1b3ab6cddbb9364f127305a997bbc88ecd734f9ef142ec0332375e01ace3592759bb5c3307cd9c1ac0a78a30053f304c7030ea459498e4ce4e" ant_openjdk_version = self.version self.options = Options()
def setUp(self): super().setUp() snapcraft_yaml_path = self.make_snapcraft_yaml( dedent( """\ name: conda-snap base: core18 """ ) ) self.project = Project( target_deb_arch=self.deb_arch, snapcraft_yaml_file_path=snapcraft_yaml_path ) if self.project.deb_arch != "amd64": self.skipTest("architecture is not supported by conda plugin") self.fake_check_call = fixtures.MockPatch("subprocess.check_call") self.useFixture(self.fake_check_call)
def setUp(self): super().setUp() self.instance_name = "ridicoulus-hours" patcher = mock.patch("petname.Generate", return_value=self.instance_name) patcher.start() self.addCleanup(patcher.stop) snapcraft_yaml_file_path = self.make_snapcraft_yaml( dedent("""\ name: project-name """)) self.project = Project( snapcraft_yaml_file_path=snapcraft_yaml_file_path) self.echoer_mock = mock.Mock() patcher = mock.patch("snapcraft.internal.repo.snaps.get_assertion") self.get_assertion_mock = patcher.start() self.addCleanup(patcher.stop)
def setUp(self): super().setUp() self.useFixture(fixtures.EnvironmentVariable(*self.env_var)) snapcraft_yaml_path = self.make_snapcraft_yaml( dedent("""\ name: gradle-snap base: core18 """)) self.project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path) class Options: gradle_options = [] gradle_output_dir = "build/libs" gradle_version = gradle._DEFAULT_GRADLE_VERSION gradle_version_checksum = gradle._DEFAULT_GRADLE_CHECKSUM gradle_openjdk_version = "11" self.options = Options()
def test_project_local_plugin_location(self): snapcraft_yaml_file_path = self.make_snapcraft_yaml( """\ name: foo version: "1" summary: bar description: baz confinement: strict parts: part1: plugin: nil """, location=self.location, ) project = Project(snapcraft_yaml_file_path=snapcraft_yaml_file_path) self.assertThat( project.local_plugins_dir, Equals(os.path.join(os.getcwd(), self.location, "snap", "plugins")), )
def conduct_project_sanity_check(project: Project) -> None: """Sanity check the project itself before continuing. The checks done here are meant to be light, and not rely on the build environment. """ # The snapcraft.yaml should be valid even without extensions applied # This here check is mostly for backwards compatibility with the # rest of the code base. if project.info is not None: project.info.validate_raw_snapcraft() snap_dir_path = os.path.join(project._get_snapcraft_assets_dir()) if os.path.isdir(snap_dir_path): # TODO: move this check to the ProjectInfo class. _check_snap_dir(snap_dir_path) if project._snap_meta.package_repositories and not os.getenv( "SNAPCRAFT_ENABLE_EXPERIMENTAL_PACKAGE_REPOSITORIES"): raise SnapcraftEnvironmentError( "*EXPERIMENTAL* 'package-repositories' configured, but not enabled. " "Enable with '--enable-experimental-package-repositories' flag.")
def setUp(self): super().setUp() self.fake_lxd = fixture_setup.FakeLXD() self.useFixture(self.fake_lxd) self.fake_lxd.kernel_arch = self.server self.fake_logger = fixtures.FakeLogger(level=logging.INFO) self.useFixture(self.fake_logger) patcher = patch("snapcraft.internal.lxd._containerbuild.SnapInjector") self.snap_injector_mock = patcher.start() self.addCleanup(patcher.stop) self.snapcraft_yaml = fixture_setup.SnapcraftYaml(self.path) self.useFixture(self.snapcraft_yaml) self.project = Project( snapcraft_yaml_file_path=self.snapcraft_yaml. snapcraft_yaml_file_path, target_deb_arch=self.target_arch, ) self.useFixture(fixtures.EnvironmentVariable("SUDO_UID", "1000"))
def test_project_with_snapcraft_yaml_file_path_carries_info(tmp_work_path): snapcraft_yaml_path = pathlib.Path("snapcraft.yaml") with snapcraft_yaml_path.open("w") as snapcraft_yaml_file: print( dedent("""\ name: foo version: "1" summary: bar description: baz confinement: strict parts: part1: plugin: go """), file=snapcraft_yaml_file, ) project = Project(snapcraft_yaml_file_path=snapcraft_yaml_path.as_posix()) # Only 1 value is enough assert project.info.name == "foo"
def test_icon(tmp_work_path): snapcraft_yaml_path = tmp_work_path / "snap/snapcraft.yaml" snapcraft_yaml_path.parent.mkdir(parents=True) with snapcraft_yaml_path.open("w") as snapcraft_file: print( dedent("""\ name: project-name base: core18 version: "1.0" summary: sanity checks description: sanity checks grade: stable confinement: strict icon: foo.png parts: nil: plugin: nil """), file=snapcraft_file, ) project = Project( is_managed_host=False, snapcraft_yaml_file_path=snapcraft_yaml_path.as_posix(), ) # Test without icon raises error with pytest.raises( snapcraft.internal.errors.SnapcraftEnvironmentError) as exc_info: conduct_project_sanity_check(project) assert exc_info.value.get_brief( ) == "Specified icon 'foo.png' does not exist." # Test with icon passes. (tmp_work_path / "foo.png").touch() conduct_project_sanity_check(project)