コード例 #1
0
ファイル: test_package.py プロジェクト: TrulyxForsaken/pearl
def test_install_local_package(tmp_path):
    home_dir = create_pearl_home(tmp_path)
    hooks_sh_script = """
    post_install() {{
        echo $PWD > hotexamples_com/result
        echo $PEARL_HOME >> hotexamples_com/result
        echo $PEARL_PKGDIR >> hotexamples_com/result
        echo $PEARL_PKGVARDIR >> hotexamples_com/result
        echo $PEARL_PKGNAME >> hotexamples_com/result
        echo $PEARL_PKGREPONAME >> hotexamples_com/result
        return 0
    }}
    """.format(homedir=home_dir)

    builder = PackageTestBuilder(home_dir)
    builder.add_local_package(tmp_path, hooks_sh_script, is_installed=False)
    packages = builder.build()
    package = packages['repo-test']['pkg-test']

    pearl_env = create_pearl_env(home_dir, packages)

    install_package(pearl_env, package, PackageArgs(verbose=2))

    assert (home_dir / 'packages/repo-test/pkg-test/pearl-config/hooks.sh').is_file()
    assert (home_dir / 'var/repo-test/pkg-test').is_dir()

    expected_result = """{}\n{}\n{}\n{}\n{}\n{}\n""".format(
        package.dir, home_dir, package.dir, package.vardir,
        package.name, package.repo_name
    )
    assert (home_dir / 'result').read_text() == expected_result
コード例 #2
0
ファイル: test_package.py プロジェクト: TrulyxForsaken/pearl
def test_install_local_package_no_confirm(tmp_path):
    home_dir = create_pearl_home(tmp_path)
    hooks_sh_script = """
    post_install() {{
        if ask "Are you sure?" "Y"
        then
            echo "YES" > hotexamples_com/result
        else
            echo "NO" > hotexamples_com/result
        fi
        local choice=$(choose "What?" "banana" "apple" "banana" "orange")
        echo "$choice" >> hotexamples_com/result
        return 0
    }}
    """.format(homedir=home_dir)

    builder = PackageTestBuilder(home_dir)
    builder.add_local_package(tmp_path, hooks_sh_script, is_installed=False)
    packages = builder.build()
    package = packages['repo-test']['pkg-test']

    pearl_env = create_pearl_env(home_dir, packages)

    install_package(pearl_env, package, PackageArgs(no_confirm=True, verbose=False))

    assert (home_dir / 'result').read_text() == "YES\nbanana\n"
コード例 #3
0
ファイル: test_package.py プロジェクト: TrulyxForsaken/pearl
def test_install_package_already_installed(tmp_path):
    home_dir = create_pearl_home(tmp_path)

    builder = PackageTestBuilder(home_dir)
    builder.add_local_package(tmp_path, "", is_installed=True)
    packages = builder.build()
    package = packages['repo-test']['pkg-test']
    pearl_env = create_pearl_env(home_dir, packages)

    with pytest.raises(PackageAlreadyInstalledError):
        install_package(pearl_env, package, PackageArgs())
コード例 #4
0
ファイル: test_package.py プロジェクト: TrulyxForsaken/pearl
def test_install_package_git(tmp_path):
    home_dir = create_pearl_home(tmp_path)

    builder = PackageTestBuilder(home_dir)
    builder.add_git_package("", is_installed=False)
    packages = builder.build()
    package = packages['repo-test']['pkg-test']
    pearl_env = create_pearl_env(home_dir, packages)

    with mock.patch(_MODULE_UNDER_TEST + ".run_pearl_bash") as run_mock:
        install_package(pearl_env, package, PackageArgs())

        assert run_mock.call_count == 2
        assert (home_dir / 'var/repo-test/pkg-test').is_dir()
コード例 #5
0
ファイル: test_package.py プロジェクト: tabulon-ext/pearl
def test_install_package_git(tmp_path):
    home_dir = create_pearl_home(tmp_path)

    builder = PackageTestBuilder(home_dir)
    builder.add_git_package("", is_installed=False)
    packages = builder.build()
    package = packages['repo-test']['pkg-test']
    pearl_env = create_pearl_env(home_dir, packages)

    with mock.patch(_MODULE_UNDER_TEST + ".run_pearl_bash") as run_mock:
        install_package(pearl_env, package, PackageArgs())

        expected_calls = [
            mock.call(f'\ninstall_git_repo https://github.com/pkg {tmp_path}/home/packages/repo-test/pkg-test "" true\n', pearl_env, input=None),
            mock.call(mock.ANY, pearl_env, enable_errexit=True, enable_xtrace=False, input=None)
        ]
        run_mock.assert_has_calls(expected_calls)
        assert run_mock.call_count == 2
        assert (home_dir / 'var/repo-test/pkg-test').is_dir()
コード例 #6
0
ファイル: test_package.py プロジェクト: TrulyxForsaken/pearl
def test_install_local_package_forced(tmp_path):
    home_dir = create_pearl_home(tmp_path)
    hooks_sh_script = """
    post_install() {{
        return 11
    }}
    """.format(homedir=home_dir)

    builder = PackageTestBuilder(home_dir)
    builder.add_local_package(tmp_path, hooks_sh_script, is_installed=False)
    packages = builder.build()
    package = packages['repo-test']['pkg-test']

    pearl_env = create_pearl_env(home_dir, packages)

    install_package(pearl_env, package, args=PackageArgs(force=True))

    # Because rollback did not occur:
    assert (home_dir / 'packages/repo-test/pkg-test/').exists()
    assert (home_dir / 'var/repo-test/pkg-test').is_dir()
コード例 #7
0
ファイル: test_package.py プロジェクト: TrulyxForsaken/pearl
def test_install_package_raise_hook(tmp_path):
    home_dir = create_pearl_home(tmp_path)
    hooks_sh_script = """
    post_install() {
        command-notfound
        return 0
    }
    """

    builder = PackageTestBuilder(home_dir)
    builder.add_local_package(tmp_path, hooks_sh_script, is_installed=False)
    packages = builder.build()
    package = packages['repo-test']['pkg-test']
    pearl_env = create_pearl_env(home_dir, packages)

    with pytest.raises(HookFunctionError):
        install_package(pearl_env, package, PackageArgs())

    # Because of rollback:
    assert not (home_dir / 'packages/repo-test/pkg-test').exists()
    assert (home_dir / 'var/repo-test/pkg-test').is_dir()