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
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"
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())
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()
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()
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()
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()