示例#1
0
    def test_snapcraftctl_errors_on_exception(self):
        os.mkdir("primedir")

        class _TestException(errors.ScriptletBaseError):
            fmt = "I'm an error"

        def _raise():
            raise _TestException()

        runner = _runner.Runner(
            part_properties={"override-prime": "snapcraftctl prime"},
            partdir=self.partdir,
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={"prime": _raise},
            build_env_generator=lambda: "export FOO=BAR",
        )

        silent_popen = functools.partial(subprocess.Popen,
                                         stdout=subprocess.DEVNULL,
                                         stderr=subprocess.DEVNULL)

        with mock.patch("subprocess.Popen", wraps=silent_popen):
            self.assertRaises(errors.ScriptletRunError, runner.prime)
示例#2
0
    def test_snapcraft_utils_in_path_if_snap(self):
        self.useFixture(fixture_setup.FakeSnapcraftIsASnap())

        os.mkdir("builddir")

        runner = _runner.Runner(
            part_properties={"override-build": "echo $PATH > path"},
            partdir=self.partdir,
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={},
            build_env_generator=lambda: "export FOO=BAR",
        )

        runner.build()

        expected_path_segment = "/snap/snapcraft/current/bin/scriptlet-bin"

        self.assertThat(os.path.join("builddir", "path"), FileExists())
        self.assertThat(
            os.path.join("builddir", "path"),
            FileContains(matcher=Contains(expected_path_segment)),
        )
示例#3
0
    def test_snapcraftctl_no_alias_if_not_snap(self):
        os.mkdir('builddir')

        runner = _runner.Runner(
            part_properties={'build': 'alias snapcraftctl 2> /dev/null'},
            sourcedir='sourcedir',
            builddir='builddir',
            stagedir='stagedir',
            primedir='primedir',
            builtin_functions={})

        self.assertRaises(errors.ScriptletRunError, runner.build)
示例#4
0
    def test_prepare(self):
        os.mkdir('builddir')

        runner = _runner.Runner(part_properties={'prepare': 'touch prepare'},
                                sourcedir='sourcedir',
                                builddir='builddir',
                                stagedir='stagedir',
                                primedir='primedir',
                                builtin_functions={})

        runner.prepare()

        self.assertThat(os.path.join('builddir', 'prepare'), FileExists())
示例#5
0
    def test_snapcraftctl_no_alias_if_not_snap(self):
        os.mkdir("builddir")

        runner = _runner.Runner(
            part_properties={"build": "alias snapcraftctl 2> /dev/null"},
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={},
        )

        self.assertRaises(errors.ScriptletRunError, runner.build)
示例#6
0
    def test_builtin_function_from_pull(self):
        os.mkdir('sourcedir')

        runner = _runner.Runner(
            part_properties={'override-pull': 'snapcraftctl pull'},
            sourcedir='sourcedir',
            builddir='builddir',
            stagedir='stagedir',
            primedir='primedir',
            builtin_functions={'pull': _fake_pull})

        runner.pull()

        self.assertThat(os.path.join('sourcedir', 'fake-pull'), FileExists())
示例#7
0
    def test_build(self):
        os.mkdir('builddir')

        runner = _runner.Runner(
            part_properties={'override-build': 'touch build'},
            sourcedir='sourcedir',
            builddir='builddir',
            stagedir='stagedir',
            primedir='primedir',
            builtin_functions={})

        runner.build()

        self.assertThat(os.path.join('builddir', 'build'), FileExists())
示例#8
0
    def test_builtin_function_from_prepare(self):
        os.mkdir('builddir')

        runner = _runner.Runner(
            part_properties={'prepare': 'snapcraftctl build'},
            sourcedir='sourcedir',
            builddir='builddir',
            stagedir='stagedir',
            primedir='primedir',
            builtin_functions={'build': _fake_build})

        runner.prepare()

        self.assertThat(os.path.join('builddir', 'fake-build'), FileExists())
示例#9
0
    def test_builtin_function_from_prepare(self):
        os.mkdir("builddir")

        runner = _runner.Runner(
            part_properties={"prepare": "snapcraftctl build"},
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={"build": _fake_build},
        )

        runner.prepare()

        self.assertThat(os.path.join("builddir", "fake-build"), FileExists())
示例#10
0
    def test_old_build(self):
        os.mkdir("builddir")

        runner = _runner.Runner(
            part_properties={"build": "touch build"},
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={},
        )

        runner.build()

        self.assertThat(os.path.join("builddir", "build"), FileExists())
示例#11
0
    def test_install_deprecation(self):
        self.fake_logger = fixtures.FakeLogger(level=logging.INFO)
        self.useFixture(self.fake_logger)

        _runner.Runner(part_properties={'install': 'foo'},
                       sourcedir='sourcedir',
                       builddir='builddir',
                       stagedir='stagedir',
                       primedir='primedir',
                       builtin_functions={})

        self.assertThat(
            self.fake_logger.output,
            Contains("DEPRECATED: The 'install' keyword has been replaced by "
                     "'override-build'"))
示例#12
0
    def test_builtin_function_from_pull(self):
        os.mkdir("sourcedir")

        runner = _runner.Runner(
            part_properties={"override-pull": "snapcraftctl pull"},
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={"pull": _fake_pull},
        )

        runner.pull()

        self.assertThat(os.path.join("sourcedir", "fake-pull"), FileExists())
示例#13
0
    def test_pull(self):
        os.mkdir("sourcedir")

        runner = _runner.Runner(
            part_properties={"override-pull": "touch pull"},
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={},
        )

        runner.pull()

        self.assertThat(os.path.join("sourcedir", "pull"), FileExists())
示例#14
0
    def test_stage(self):
        os.mkdir("stagedir")

        runner = _runner.Runner(
            part_properties={"override-stage": "touch stage"},
            partdir=self.partdir,
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={},
        )

        runner.stage()

        self.assertThat(os.path.join("stagedir", "stage"), FileExists())
示例#15
0
    def test_failure_to_execute_mid_script_results_in_failure(self):
        os.mkdir('builddir')

        script = dedent("""\
            false  # this should trigger an error
            touch success
        """)

        runner = _runner.Runner(part_properties={'build': script},
                                sourcedir='sourcedir',
                                builddir='builddir',
                                stagedir='stagedir',
                                primedir='primedir',
                                builtin_functions={})

        self.assertRaises(errors.ScriptletRunError, runner.build)
示例#16
0
    def test_builtin_function_from_stage(self):
        os.mkdir("stagedir")

        runner = _runner.Runner(
            part_properties={"override-stage": "snapcraftctl stage"},
            partdir=self.partdir,
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={"stage": _fake_stage},
        )

        runner.stage()

        self.assertThat(os.path.join("stagedir", "fake-stage"), FileExists())
示例#17
0
    def test_pull(self):
        os.mkdir("sourcedir")

        runner = _runner.Runner(
            part_properties={"override-pull": "touch pull"},
            partdir=self.partdir,
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={},
            build_env_generator=lambda: "export FOO=BAR",
        )

        runner.pull()

        self.assertThat(os.path.join("sourcedir", "pull"), FileExists())
示例#18
0
    def test_snapcraftctl_no_alias_if_not_snap(self):
        os.mkdir("builddir")

        runner = _runner.Runner(
            part_properties={
                "override-build": "alias snapcraftctl 2> /dev/null"
            },
            partdir=self.partdir,
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={},
            build_env_generator=lambda: "export FOO=BAR",
        )

        self.assertRaises(errors.ScriptletRunError, runner.build)
示例#19
0
    def test_builtin_function_from_prime(self):
        os.mkdir("primedir")

        runner = _runner.Runner(
            part_properties={"override-prime": "snapcraftctl prime"},
            partdir=self.partdir,
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={"prime": _fake_prime},
            build_env_generator=lambda: "export FOO=BAR",
        )

        runner.prime()

        self.assertThat(os.path.join("primedir", "fake-prime"), FileExists())
示例#20
0
    def test_failure_to_execute_mid_script_results_in_failure(self):
        os.mkdir("builddir")

        script = dedent("""\
            false  # this should trigger an error
            touch success
        """)

        runner = _runner.Runner(
            part_properties={"override-build": script},
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={},
        )

        self.assertRaises(errors.ScriptletRunError, runner.build)
示例#21
0
    def test_build_deprecation(self):
        self.fake_logger = fixtures.FakeLogger(level=logging.INFO)
        self.useFixture(self.fake_logger)

        _runner.Runner(
            part_properties={"build": "foo"},
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={},
        )

        self.assertThat(
            self.fake_logger.output,
            Contains("DEPRECATED: The 'build' keyword has been replaced by "
                     "'override-build'"),
        )
示例#22
0
    def test_failure_on_last_script_command_results_in_failure(self):
        os.mkdir("builddir")

        script = dedent("""\
            touch success
            false  # this should trigger an error
        """)

        runner = _runner.Runner(
            part_properties={"override-build": script},
            partdir=self.partdir,
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={},
            build_env_generator=lambda: "export FOO=BAR",
        )

        self.assertRaises(errors.ScriptletRunError, runner.build)
示例#23
0
    def test_snapcraftctl_alias_if_snap(self):
        self.useFixture(fixture_setup.FakeSnapcraftIsASnap())

        os.mkdir('builddir')

        runner = _runner.Runner(
            part_properties={'prepare': 'alias snapcraftctl > definition'},
            sourcedir='sourcedir',
            builddir='builddir',
            stagedir='stagedir',
            primedir='primedir',
            builtin_functions={})

        with mock.patch('os.path.exists', return_value=True):
            runner.prepare()

        expected_snapcrafctl = '/snap/snapcraft/current/bin/snapcraftctl'

        self.assertThat(os.path.join('builddir', 'definition'), FileExists())
        self.assertThat(
            os.path.join('builddir', 'definition'),
            FileContains('snapcraftctl={!r}\n'.format(expected_snapcrafctl)))
示例#24
0
    def test_snapcraftctl_errors_on_exception(self):
        os.mkdir('primedir')

        class _TestException(errors.ScriptletBaseError):
            fmt = "I'm an error"

        def _raise():
            raise _TestException()

        runner = _runner.Runner(
            part_properties={'override-prime': 'snapcraftctl prime'},
            sourcedir='sourcedir',
            builddir='builddir',
            stagedir='stagedir',
            primedir='primedir',
            builtin_functions={'prime': _raise})

        silent_popen = functools.partial(subprocess.Popen,
                                         stdout=subprocess.DEVNULL,
                                         stderr=subprocess.DEVNULL)

        with mock.patch('subprocess.Popen', wraps=silent_popen):
            self.assertRaises(errors.ScriptletRunError, runner.prime)
示例#25
0
    def test_snapcraftctl_alias_if_snap(self):
        self.useFixture(fixture_setup.FakeSnapcraftIsASnap())

        os.mkdir("builddir")

        runner = _runner.Runner(
            part_properties={"prepare": "alias snapcraftctl > definition"},
            sourcedir="sourcedir",
            builddir="builddir",
            stagedir="stagedir",
            primedir="primedir",
            builtin_functions={},
        )

        with mock.patch("os.path.exists", return_value=True):
            runner.prepare()

        expected_snapcrafctl = "/snap/snapcraft/current/bin/snapcraftctl"

        self.assertThat(os.path.join("builddir", "definition"), FileExists())
        self.assertThat(
            os.path.join("builddir", "definition"),
            FileContains("snapcraftctl={!r}\n".format(expected_snapcrafctl)),
        )