| #!/usr/bin/env bash | |
| set -e -u | |
| if [ -x /bin/echo ]; then | |
| ECHO='/bin/echo' | |
| else | |
| ECHO='echo' | |
| fi | |
| # Prints the absolute path of a directory to stdout | |
| abs_path() { | |
| local path="$1" | |
| # Unset CDPATH because it causes havok: it makes the destination unpredictable | |
| # and triggers 'cd' to print the path to stdout. Route `cd`'s output to /dev/null | |
| # for good measure. | |
| (unset CDPATH && cd "$path" > /dev/null && pwd) | |
| } | |
| S="$(abs_path $(dirname $0))" | |
| TEST_DIR="$S/test" | |
| WORK_DIR="$TMP_DIR/workdir" | |
| OUT_DIR="$TMP_DIR/outdir" | |
| PREFIX_DIR="$TMP_DIR/prefix" | |
| case $(uname -s) in | |
| MINGW* | MSYS*) | |
| WINDOWS=1 | |
| ;; | |
| esac | |
| say() { | |
| echo "test: $1" | |
| } | |
| pre() { | |
| echo "test: $1" | |
| rm -Rf "$WORK_DIR" | |
| rm -Rf "$OUT_DIR" | |
| rm -Rf "$PREFIX_DIR" | |
| mkdir -p "$WORK_DIR" | |
| mkdir -p "$OUT_DIR" | |
| mkdir -p "$PREFIX_DIR" | |
| } | |
| need_ok() { | |
| if [ $? -ne 0 ] | |
| then | |
| echo | |
| echo "TEST FAILED!" | |
| echo | |
| exit 1 | |
| fi | |
| } | |
| fail() { | |
| echo | |
| echo "$1" | |
| echo | |
| echo "TEST FAILED!" | |
| echo | |
| exit 1 | |
| } | |
| try() { | |
| set +e | |
| _cmd="$@" | |
| _output=`$@ 2>&1` | |
| if [ $? -ne 0 ]; then | |
| echo \$ "$_cmd" | |
| # Using /bin/echo to avoid escaping | |
| $ECHO "$_output" | |
| echo | |
| echo "TEST FAILED!" | |
| echo | |
| exit 1 | |
| else | |
| if [ -n "${VERBOSE-}" -o -n "${VERBOSE_CMD-}" ]; then | |
| echo \$ "$_cmd" | |
| fi | |
| if [ -n "${VERBOSE-}" -o -n "${VERBOSE_OUTPUT-}" ]; then | |
| $ECHO "$_output" | |
| fi | |
| fi | |
| set -e | |
| } | |
| expect_fail() { | |
| set +e | |
| _cmd="$@" | |
| _output=`$@ 2>&1` | |
| if [ $? -eq 0 ]; then | |
| echo \$ "$_cmd" | |
| # Using /bin/echo to avoid escaping | |
| $ECHO "$_output" | |
| echo | |
| echo "TEST FAILED!" | |
| echo | |
| exit 1 | |
| else | |
| if [ -n "${VERBOSE-}" -o -n "${VERBOSE_CMD-}" ]; then | |
| echo \$ "$_cmd" | |
| fi | |
| if [ -n "${VERBOSE-}" -o -n "${VERBOSE_OUTPUT-}" ]; then | |
| $ECHO "$_output" | |
| fi | |
| fi | |
| set -e | |
| } | |
| expect_output_ok() { | |
| set +e | |
| local _expected="$1" | |
| shift 1 | |
| _cmd="$@" | |
| _output=`$@ 2>&1` | |
| if [ $? -ne 0 ]; then | |
| echo \$ "$_cmd" | |
| # Using /bin/echo to avoid escaping | |
| $ECHO "$_output" | |
| echo | |
| echo "TEST FAILED!" | |
| echo | |
| exit 1 | |
| elif ! echo "$_output" | grep -q "$_expected"; then | |
| echo \$ "$_cmd" | |
| $ECHO "$_output" | |
| echo | |
| echo "missing expected output '$_expected'" | |
| echo | |
| echo | |
| echo "TEST FAILED!" | |
| echo | |
| exit 1 | |
| else | |
| if [ -n "${VERBOSE-}" -o -n "${VERBOSE_CMD-}" ]; then | |
| echo \$ "$_cmd" | |
| fi | |
| if [ -n "${VERBOSE-}" -o -n "${VERBOSE_OUTPUT-}" ]; then | |
| $ECHO "$_output" | |
| fi | |
| fi | |
| set -e | |
| } | |
| expect_output_fail() { | |
| set +e | |
| local _expected="$1" | |
| shift 1 | |
| _cmd="$@" | |
| _output=`$@ 2>&1` | |
| if [ $? -eq 0 ]; then | |
| echo \$ "$_cmd" | |
| # Using /bin/echo to avoid escaping | |
| $ECHO "$_output" | |
| echo | |
| echo "TEST FAILED!" | |
| echo | |
| exit 1 | |
| elif ! echo "$_output" | grep -q "$_expected"; then | |
| echo \$ "$_cmd" | |
| $ECHO "$_output" | |
| echo | |
| echo "missing expected output '$_expected'" | |
| echo | |
| echo | |
| echo "TEST FAILED!" | |
| echo | |
| exit 1 | |
| else | |
| if [ -n "${VERBOSE-}" -o -n "${VERBOSE_CMD-}" ]; then | |
| echo \$ "$_cmd" | |
| fi | |
| if [ -n "${VERBOSE-}" -o -n "${VERBOSE_OUTPUT-}" ]; then | |
| $ECHO "$_output" | |
| fi | |
| fi | |
| set -e | |
| } | |
| expect_not_output_ok() { | |
| set +e | |
| local _expected="$1" | |
| shift 1 | |
| _cmd="$@" | |
| _output=`$@ 2>&1` | |
| if [ $? -ne 0 ]; then | |
| echo \$ "$_cmd" | |
| # Using /bin/echo to avoid escaping | |
| $ECHO "$_output" | |
| echo | |
| echo "TEST FAILED!" | |
| echo | |
| exit 1 | |
| elif echo "$_output" | grep -q "$_expected"; then | |
| echo \$ "$_cmd" | |
| $ECHO "$_output" | |
| echo | |
| echo "unexpected output '$_expected'" | |
| echo | |
| echo | |
| echo "TEST FAILED!" | |
| echo | |
| exit 1 | |
| else | |
| if [ -n "${VERBOSE-}" -o -n "${VERBOSE_CMD-}" ]; then | |
| echo \$ "$_cmd" | |
| fi | |
| if [ -n "${VERBOSE-}" -o -n "${VERBOSE_OUTPUT-}" ]; then | |
| $ECHO "$_output" | |
| fi | |
| fi | |
| set -e | |
| } | |
| runtest() { | |
| local _testname="$1" | |
| if [ -n "${TESTNAME-}" ]; then | |
| if ! echo "$_testname" | grep -q "$TESTNAME"; then | |
| return 0 | |
| fi | |
| fi | |
| pre "$_testname" | |
| "$_testname" | |
| } | |
| # Installation tests | |
| basic_install() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| try test -e "$PREFIX_DIR/something-to-install" | |
| try test -e "$PREFIX_DIR/dir-to-install/foo" | |
| try test -e "$PREFIX_DIR/bin/program" | |
| try test -e "$PREFIX_DIR/bin/program2" | |
| try test -e "$PREFIX_DIR/bin/bad-bin" | |
| } | |
| runtest basic_install | |
| basic_uninstall() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/package/install.sh --uninstall" --prefix="$PREFIX_DIR" | |
| try test ! -e "$PREFIX_DIR/something-to-install" | |
| try test ! -e "$PREFIX_DIR/dir-to-install/foo" | |
| try test ! -e "$PREFIX_DIR/bin/program" | |
| try test ! -e "$PREFIX_DIR/bin/program2" | |
| try test ! -e "$PREFIX_DIR/bin/bad-bin" | |
| try test ! -e "$PREFIX_DIR/lib/packagelib" | |
| } | |
| runtest basic_uninstall | |
| not_installed_files() { | |
| mkdir -p "$WORK_DIR/overlay" | |
| touch "$WORK_DIR/overlay/not-installed" | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --non-installed-overlay="$WORK_DIR/overlay" | |
| try test -e "$WORK_DIR/package/not-installed" | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| try test ! -e "$PREFIX_DIR/not-installed" | |
| } | |
| runtest not_installed_files | |
| tarball_with_package_name() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc-nightly | |
| try "$WORK_DIR/rustc-nightly/install.sh" --prefix="$PREFIX_DIR" | |
| try test -e "$OUT_DIR/rustc-nightly.tar.gz" | |
| try test -e "$OUT_DIR/rustc-nightly.tar.xz" | |
| } | |
| runtest tarball_with_package_name | |
| install_overwrite_backup() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" | |
| try mkdir -p "$PREFIX_DIR/bin" | |
| touch "$PREFIX_DIR/bin/program" | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| # The existing program was backed up by 'install' | |
| try test -e "$PREFIX_DIR/bin/program.old" | |
| } | |
| runtest install_overwrite_backup | |
| bulk_directory() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --bulk-dirs=dir-to-install | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| try test -e "$PREFIX_DIR/something-to-install" | |
| try test -e "$PREFIX_DIR/dir-to-install/foo" | |
| try test -e "$PREFIX_DIR/bin/program" | |
| try test -e "$PREFIX_DIR/bin/program2" | |
| try test -e "$PREFIX_DIR/bin/bad-bin" | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" --uninstall | |
| try test ! -e "$PREFIX_DIR/dir-to-install" | |
| } | |
| runtest bulk_directory | |
| bulk_directory_overwrite() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --bulk-dirs=dir-to-install | |
| try mkdir -p "$PREFIX_DIR/dir-to-install" | |
| try touch "$PREFIX_DIR/dir-to-install/overwrite" | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| # The file that used to exist in the directory no longer does | |
| try test ! -e "$PREFIX_DIR/dir-to-install/overwrite" | |
| # It was backed up | |
| try test -e "$PREFIX_DIR/dir-to-install.old/overwrite" | |
| } | |
| runtest bulk_directory_overwrite | |
| bulk_directory_overwrite_existing_backup() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --bulk-dirs=dir-to-install | |
| try mkdir -p "$PREFIX_DIR/dir-to-install" | |
| try touch "$PREFIX_DIR/dir-to-install/overwrite" | |
| # This time we've already got an existing backup of the overwritten directory. | |
| # The install should still succeed. | |
| try mkdir -p "$PREFIX_DIR/dir-to-install~" | |
| try touch "$PREFIX_DIR/dir-to-install~/overwrite" | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| try test ! -e "$PREFIX_DIR/dir-to-install/overwrite" | |
| try test -e "$PREFIX_DIR/dir-to-install~/overwrite" | |
| } | |
| runtest bulk_directory_overwrite_existing_backup | |
| nested_bulk_directory() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image4" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --bulk-dirs=dir-to-install/qux | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| try test -e "$PREFIX_DIR/dir-to-install/qux/bar" | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" --uninstall | |
| try test ! -e "$PREFIX_DIR/dir-to-install/qux" | |
| } | |
| runtest nested_bulk_directory | |
| only_bulk_directory_no_files() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image5" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --bulk-dirs=dir-to-install | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| try test -e "$PREFIX_DIR/dir-to-install/foo" | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" --uninstall | |
| try test ! -e "$PREFIX_DIR/dir-to-install/foo" | |
| } | |
| runtest only_bulk_directory_no_files | |
| nested_not_installed_files() { | |
| mkdir -p "$WORK_DIR/overlay" | |
| touch "$WORK_DIR/overlay/not-installed" | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image4" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --non-installed-overlay="$WORK_DIR/overlay" | |
| try test -e "$WORK_DIR/package/not-installed" | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| try test ! -e "$PREFIX_DIR/not-installed" | |
| } | |
| runtest nested_not_installed_files | |
| multiple_components() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR/c1" \ | |
| --output-dir="$OUT_DIR/c1" \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR/c2" \ | |
| --output-dir="$OUT_DIR/c2" \ | |
| --component-name=cargo | |
| try "$WORK_DIR/c1/package/install.sh" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/c2/package/install.sh" --prefix="$PREFIX_DIR" | |
| try test -e "$PREFIX_DIR/something-to-install" | |
| try test -e "$PREFIX_DIR/dir-to-install/foo" | |
| try test -e "$PREFIX_DIR/bin/program" | |
| try test -e "$PREFIX_DIR/bin/program2" | |
| try test -e "$PREFIX_DIR/bin/bad-bin" | |
| try test -e "$PREFIX_DIR/bin/cargo" | |
| try "$WORK_DIR/c1/package/install.sh" --prefix="$PREFIX_DIR" --uninstall | |
| try test ! -e "$PREFIX_DIR/something-to-install" | |
| try test ! -e "$PREFIX_DIR/dir-to-install/foo" | |
| try test ! -e "$PREFIX_DIR/bin/program" | |
| try test ! -e "$PREFIX_DIR/bin/program2" | |
| try test ! -e "$PREFIX_DIR/bin/bad-bin" | |
| try "$WORK_DIR/c2/package/install.sh" --prefix="$PREFIX_DIR" --uninstall | |
| try test ! -e "$PREFIX_DIR/bin/cargo" | |
| try test ! -e "$PREFIX_DIR/lib/packagelib" | |
| } | |
| runtest multiple_components | |
| uninstall_from_installed_script() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR/c1" \ | |
| --output-dir="$OUT_DIR/c1" \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR/c2" \ | |
| --output-dir="$OUT_DIR/c2" \ | |
| --component-name=cargo | |
| try "$WORK_DIR/c1/package/install.sh" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/c2/package/install.sh" --prefix="$PREFIX_DIR" | |
| try test -e "$PREFIX_DIR/something-to-install" | |
| try test -e "$PREFIX_DIR/dir-to-install/foo" | |
| try test -e "$PREFIX_DIR/bin/program" | |
| try test -e "$PREFIX_DIR/bin/program2" | |
| try test -e "$PREFIX_DIR/bin/bad-bin" | |
| try test -e "$PREFIX_DIR/bin/cargo" | |
| # All components should be uninstalled by this script | |
| try sh "$PREFIX_DIR/lib/packagelib/uninstall.sh" | |
| try test ! -e "$PREFIX_DIR/something-to-install" | |
| try test ! -e "$PREFIX_DIR/dir-to-install/foo" | |
| try test ! -e "$PREFIX_DIR/bin/program" | |
| try test ! -e "$PREFIX_DIR/bin/program2" | |
| try test ! -e "$PREFIX_DIR/bin/bad-bin" | |
| try test ! -e "$PREFIX_DIR/bin/cargo" | |
| try test ! -e "$PREFIX_DIR/lib/packagelib" | |
| } | |
| runtest uninstall_from_installed_script | |
| uninstall_from_installed_script_with_args_fails() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR/c1" \ | |
| --output-dir="$OUT_DIR/c1" \ | |
| --component-name=rustc | |
| try "$WORK_DIR/c1/package/install.sh" --prefix="$PREFIX_DIR" | |
| expect_output_fail "uninstall.sh does not take any arguments" \ | |
| sh "$PREFIX_DIR/lib/packagelib/uninstall.sh" --prefix=foo | |
| } | |
| runtest uninstall_from_installed_script_with_args_fails | |
| # Combined installer tests | |
| combine_installers() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" | |
| try test -e "$PREFIX_DIR/something-to-install" | |
| try test -e "$PREFIX_DIR/dir-to-install/foo" | |
| try test -e "$PREFIX_DIR/bin/program" | |
| try test -e "$PREFIX_DIR/bin/program2" | |
| try test -e "$PREFIX_DIR/bin/bad-bin" | |
| try test -e "$PREFIX_DIR/bin/cargo" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" | |
| try test ! -e "$PREFIX_DIR/something-to-install" | |
| try test ! -e "$PREFIX_DIR/dir-to-install/foo" | |
| try test ! -e "$PREFIX_DIR/bin/program" | |
| try test ! -e "$PREFIX_DIR/bin/program2" | |
| try test ! -e "$PREFIX_DIR/bin/bad-bin" | |
| try test ! -e "$PREFIX_DIR/bin/cargo" | |
| try test ! -e "$PREFIX_DIR/lib/packagelib" | |
| } | |
| runtest combine_installers | |
| combine_three_installers() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image4" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust-docs \ | |
| --component-name=rust-docs | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz,$OUT_DIR/rust-docs.tar.gz" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" | |
| try test -e "$PREFIX_DIR/something-to-install" | |
| try test -e "$PREFIX_DIR/dir-to-install/foo" | |
| try test -e "$PREFIX_DIR/bin/program" | |
| try test -e "$PREFIX_DIR/bin/program2" | |
| try test -e "$PREFIX_DIR/bin/bad-bin" | |
| try test -e "$PREFIX_DIR/bin/cargo" | |
| try test -e "$PREFIX_DIR/dir-to-install/qux/bar" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" | |
| try test ! -e "$PREFIX_DIR/something-to-install" | |
| try test ! -e "$PREFIX_DIR/dir-to-install/foo" | |
| try test ! -e "$PREFIX_DIR/bin/program" | |
| try test ! -e "$PREFIX_DIR/bin/program2" | |
| try test ! -e "$PREFIX_DIR/bin/bad-bin" | |
| try test ! -e "$PREFIX_DIR/bin/cargo" | |
| try test ! -e "$PREFIX_DIR/lib/packagelib" | |
| try test ! -e "$PREFIX_DIR/dir-to-install/qux/bar" | |
| } | |
| runtest combine_three_installers | |
| combine_installers_with_overlay() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| mkdir -p "$WORK_DIR/overlay" | |
| touch "$WORK_DIR/overlay/README" | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz" \ | |
| --non-installed-overlay="$WORK_DIR/overlay" | |
| try test -e "$WORK_DIR/rust/README" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" | |
| try test ! -e "$PREFIX_DIR/README" | |
| } | |
| runtest combine_installers_with_overlay | |
| combined_with_bulk_dirs() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc \ | |
| --bulk-dirs=dir-to-install | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" | |
| try test -e "$PREFIX_DIR/dir-to-install/foo" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" | |
| try test ! -e "$PREFIX_DIR/dir-to-install" | |
| } | |
| runtest combined_with_bulk_dirs | |
| combine_install_with_separate_uninstall() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc \ | |
| --rel-manifest-dir=rustlib | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo \ | |
| --rel-manifest-dir=rustlib | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz" \ | |
| --rel-manifest-dir=rustlib | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" | |
| try test -e "$PREFIX_DIR/something-to-install" | |
| try test -e "$PREFIX_DIR/dir-to-install/foo" | |
| try test -e "$PREFIX_DIR/bin/program" | |
| try test -e "$PREFIX_DIR/bin/program2" | |
| try test -e "$PREFIX_DIR/bin/bad-bin" | |
| try test -e "$PREFIX_DIR/bin/cargo" | |
| try "$WORK_DIR/rustc/install.sh --uninstall" --prefix="$PREFIX_DIR" | |
| try test ! -e "$PREFIX_DIR/something-to-install" | |
| try test ! -e "$PREFIX_DIR/dir-to-install/foo" | |
| try test ! -e "$PREFIX_DIR/bin/program" | |
| try test ! -e "$PREFIX_DIR/bin/program2" | |
| try test ! -e "$PREFIX_DIR/bin/bad-bin" | |
| try "$WORK_DIR/cargo/install.sh --uninstall" --prefix="$PREFIX_DIR" | |
| try test ! -e "$PREFIX_DIR/bin/cargo" | |
| try test ! -e "$PREFIX_DIR/lib/packagelib" | |
| } | |
| runtest combine_install_with_separate_uninstall | |
| select_components_to_install() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image4" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust-docs \ | |
| --component-name=rust-docs | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz,$OUT_DIR/rust-docs.tar.gz" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" --components=rustc | |
| try test -e "$PREFIX_DIR/bin/program" | |
| try test ! -e "$PREFIX_DIR/bin/cargo" | |
| try test ! -e "$PREFIX_DIR/baz" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" --components=cargo | |
| try test ! -e "$PREFIX_DIR/bin/program" | |
| try test -e "$PREFIX_DIR/bin/cargo" | |
| try test ! -e "$PREFIX_DIR/baz" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" --components=rust-docs | |
| try test ! -e "$PREFIX_DIR/bin/program" | |
| try test ! -e "$PREFIX_DIR/bin/cargo" | |
| try test -e "$PREFIX_DIR/baz" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" --components=rustc,cargo | |
| try test -e "$PREFIX_DIR/bin/program" | |
| try test -e "$PREFIX_DIR/bin/cargo" | |
| try test ! -e "$PREFIX_DIR/baz" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" \ | |
| --components=rustc,cargo,rust-docs | |
| try test ! -e "$PREFIX_DIR/bin/program" | |
| try test ! -e "$PREFIX_DIR/bin/cargo" | |
| try test ! -e "$PREFIX_DIR/baz" | |
| try test ! -e "$PREFIX_DIR/lib/packagelib" | |
| } | |
| runtest select_components_to_install | |
| select_components_to_uninstall() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image4" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust-docs \ | |
| --component-name=rust-docs | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz,$OUT_DIR/rust-docs.tar.gz" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" --components=rustc | |
| try test ! -e "$PREFIX_DIR/bin/program" | |
| try test -e "$PREFIX_DIR/bin/cargo" | |
| try test -e "$PREFIX_DIR/baz" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" --components=cargo | |
| try test -e "$PREFIX_DIR/bin/program" | |
| try test ! -e "$PREFIX_DIR/bin/cargo" | |
| try test -e "$PREFIX_DIR/baz" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" --components=rust-docs | |
| try test -e "$PREFIX_DIR/bin/program" | |
| try test -e "$PREFIX_DIR/bin/cargo" | |
| try test ! -e "$PREFIX_DIR/baz" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" --components=rustc,cargo | |
| try test ! -e "$PREFIX_DIR/bin/program" | |
| try test ! -e "$PREFIX_DIR/bin/cargo" | |
| try test -e "$PREFIX_DIR/baz" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" \ | |
| --components=rustc,cargo,rust-docs | |
| try test ! -e "$PREFIX_DIR/bin/program" | |
| try test ! -e "$PREFIX_DIR/bin/cargo" | |
| try test ! -e "$PREFIX_DIR/baz" | |
| try test ! -e "$PREFIX_DIR/lib/packagelib" | |
| } | |
| runtest select_components_to_uninstall | |
| invalid_component() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image4" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust-docs \ | |
| --component-name=rust-docs | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz,$OUT_DIR/rust-docs.tar.gz" | |
| expect_output_fail "unknown component" "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" \ | |
| --components=foo | |
| } | |
| runtest invalid_component | |
| without_components() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image4" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust-docs \ | |
| --component-name=rust-docs | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz,$OUT_DIR/rust-docs.tar.gz" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" --without=rust-docs | |
| try test -e "$PREFIX_DIR/bin/program" | |
| try test -e "$PREFIX_DIR/bin/cargo" | |
| try test ! -e "$PREFIX_DIR/baz" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" --without=rust-docs,cargo | |
| try test -e "$PREFIX_DIR/bin/program" | |
| try test ! -e "$PREFIX_DIR/bin/cargo" | |
| try test ! -e "$PREFIX_DIR/baz" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" --without=rust-docs,rustc | |
| try test ! -e "$PREFIX_DIR/bin/program" | |
| try test -e "$PREFIX_DIR/bin/cargo" | |
| try test ! -e "$PREFIX_DIR/baz" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" | |
| } | |
| runtest without_components | |
| # --uninstall --without is kind of weird, | |
| # --without causes components to remain installed | |
| uninstall_without_components() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image4" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust-docs \ | |
| --component-name=rust-docs | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz,$OUT_DIR/rust-docs.tar.gz" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" --without=rust-docs | |
| try test ! -e "$PREFIX_DIR/bin/program" | |
| try test ! -e "$PREFIX_DIR/bin/cargo" | |
| try test -e "$PREFIX_DIR/baz" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" --without=rust-docs,cargo | |
| try test ! -e "$PREFIX_DIR/bin/program" | |
| try test -e "$PREFIX_DIR/bin/cargo" | |
| try test -e "$PREFIX_DIR/baz" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" | |
| try "$WORK_DIR/rust/install.sh --uninstall" --prefix="$PREFIX_DIR" --without=rust-docs,rustc | |
| try test -e "$PREFIX_DIR/bin/program" | |
| try test ! -e "$PREFIX_DIR/bin/cargo" | |
| try test -e "$PREFIX_DIR/baz" | |
| } | |
| runtest uninstall_without_components | |
| without_any_components() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image4" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust-docs \ | |
| --component-name=rust-docs | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz,$OUT_DIR/rust-docs.tar.gz" | |
| expect_output_fail "no components selected for installation" \ | |
| "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" --without=rust-docs,rustc,cargo | |
| } | |
| runtest without_any_components | |
| uninstall_without_any_components() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image4" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust-docs \ | |
| --component-name=rust-docs | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz,$OUT_DIR/rust-docs.tar.gz" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" | |
| expect_output_fail "no components selected for uninstallation" \ | |
| "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" \ | |
| --uninstall --without=rust-docs,rustc,cargo | |
| } | |
| runtest uninstall_without_any_components | |
| list_components() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image4" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust-docs \ | |
| --component-name=rust-docs | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz,$OUT_DIR/rust-docs.tar.gz" | |
| expect_output_ok "rustc" "$WORK_DIR/rust/install.sh" --list-components | |
| expect_output_ok "cargo" "$WORK_DIR/rust/install.sh" --list-components | |
| expect_output_ok "rust-docs" "$WORK_DIR/rust/install.sh" --list-components | |
| } | |
| runtest list_components | |
| combined_remains() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image4" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust-docs \ | |
| --component-name=rust-docs | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz,$OUT_DIR/rust-docs.tar.gz" | |
| for component in rustc cargo rust-docs; do | |
| # bootstrap wants the original extracted package intact too | |
| try test -d "$WORK_DIR/$component/$component" | |
| try test -d "$WORK_DIR/rust/$component" | |
| done | |
| } | |
| runtest combined_remains | |
| # Smoke tests | |
| cannot_write_error() { | |
| # chmod doesn't work on windows | |
| if [ ! -n "${WINDOWS-}" ]; then | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" | |
| chmod u-w "$PREFIX_DIR" | |
| expect_fail "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| chmod u+w "$PREFIX_DIR" | |
| fi | |
| } | |
| runtest cannot_write_error | |
| cannot_install_to_installer() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=my-package | |
| expect_output_fail "cannot install to same directory as installer" \ | |
| "$WORK_DIR/my-package/install.sh" --prefix="$WORK_DIR/my-package" | |
| } | |
| runtest cannot_install_to_installer | |
| upgrade_from_future_installer_error() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --rel-manifest-dir=rustlib | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| echo 100 > "$PREFIX_DIR/lib/rustlib/rust-installer-version" | |
| expect_fail "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| } | |
| runtest upgrade_from_future_installer_error | |
| destdir() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" | |
| try "$WORK_DIR/package/install.sh" --destdir="$PREFIX_DIR/" --prefix=prefix | |
| try test -e "$PREFIX_DIR/prefix/bin/program" | |
| } | |
| runtest destdir | |
| destdir_no_trailing_slash() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" | |
| try "$WORK_DIR/package/install.sh" --destdir="$PREFIX_DIR" --prefix=prefix | |
| try test -e "$PREFIX_DIR/prefix/bin/program" | |
| } | |
| runtest destdir_no_trailing_slash | |
| disable_verify_noop() { | |
| # Obsolete --disable-verify flag doesn't generate error | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" --disable-verify | |
| } | |
| runtest disable_verify_noop | |
| create_log() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| try test -e "$PREFIX_DIR/lib/packagelib/install.log" | |
| local _log="$(cat "$PREFIX_DIR/lib/packagelib/install.log")" | |
| if [ -z "$_log" ]; then | |
| fail "log is empty" | |
| fi | |
| } | |
| runtest create_log | |
| leave_log_after_failure() { | |
| # chmod doesn't work on windows | |
| if [ ! -n "${WINDOWS-}" ]; then | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" | |
| mkdir -p "$PREFIX_DIR/lib/packagelib" | |
| touch "$PREFIX_DIR/lib/packagelib/components" | |
| chmod u-w "$PREFIX_DIR/lib/packagelib/components" | |
| expect_fail "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| chmod u+w "$PREFIX_DIR/lib/packagelib/components" | |
| try test -e "$PREFIX_DIR/lib/packagelib/install.log" | |
| local _log="$(cat "$PREFIX_DIR/lib/packagelib/install.log")" | |
| if [ -z "$_log" ]; then | |
| fail "log is empty" | |
| fi | |
| # script should tell user where the logs are | |
| if ! grep -q "see logs at" "$PREFIX_DIR/lib/packagelib/install.log"; then | |
| fail "missing log message" | |
| fi | |
| fi | |
| } | |
| runtest leave_log_after_failure | |
| # https://github.com/rust-lang/rust-installer/issues/22 | |
| help() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" | |
| try "$WORK_DIR/package/install.sh" --help | |
| } | |
| runtest help | |
| # https://github.com/rust-lang/rust-installer/issues/31 | |
| CDPATH_does_not_destroy_things() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" | |
| cd "$WORK_DIR" || exit 1 | |
| export CDPATH="../$(basename $WORK_DIR)/foo" | |
| try sh "package/install.sh" --prefix="$PREFIX_DIR" | |
| cd "$S" || exit 1 | |
| cd "$PREFIX_DIR" || exit 1 | |
| export CDPATH="../$(basename $PREFIX_DIR)" | |
| try sh "lib/packagelib/uninstall.sh" | |
| cd "$S" || exit 1 | |
| unset CDPATH | |
| } | |
| runtest CDPATH_does_not_destroy_things | |
| docdir_default() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image-docdir1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" | |
| try test -e "$PREFIX_DIR/share/doc/rust/README" | |
| try test -e "$PREFIX_DIR/share/doc/rust/rustdocs.txt" | |
| } | |
| runtest docdir_default | |
| docdir() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image-docdir1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" | |
| try mkdir "$WORK_DIR/docdir" | |
| try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR" --docdir="$WORK_DIR/docdir" | |
| try test -e "$WORK_DIR/docdir/README" | |
| try test -e "$WORK_DIR/docdir/rustdocs.txt" | |
| } | |
| runtest docdir | |
| docdir_combined() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image-docdir1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name="rustc" \ | |
| --component-name="rustc" | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image-docdir2" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name="cargo" \ | |
| --component-name="cargo" | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz" | |
| try mkdir "$WORK_DIR/docdir" | |
| try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR" --docdir="$WORK_DIR/docdir" | |
| try test -e "$WORK_DIR/docdir/README" | |
| try test -e "$WORK_DIR/docdir/rustdocs.txt" | |
| try test -e "$WORK_DIR/docdir/README" | |
| try test -e "$WORK_DIR/docdir/cargodocs.txt" | |
| } | |
| runtest docdir_combined | |
| combine_installers_different_input_compression_formats() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc \ | |
| --compression-formats=xz | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo \ | |
| --compression-formats=gz | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.xz,$OUT_DIR/cargo.tar.gz" | |
| try test -e "${OUT_DIR}/rust.tar.gz" | |
| try test -e "${OUT_DIR}/rust.tar.xz" | |
| } | |
| runtest combine_installers_different_input_compression_formats | |
| generate_compression_formats_one() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name="rustc" \ | |
| --component-name="rustc" \ | |
| --compression-formats="xz" | |
| try test ! -e "${OUT_DIR}/rustc.tar.gz" | |
| try test -e "${OUT_DIR}/rustc.tar.xz" | |
| } | |
| runtest generate_compression_formats_one | |
| generate_compression_formats_multiple() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name="rustc" \ | |
| --component-name="rustc" \ | |
| --compression-formats="gz,xz" | |
| try test -e "${OUT_DIR}/rustc.tar.gz" | |
| try test -e "${OUT_DIR}/rustc.tar.xz" | |
| } | |
| runtest generate_compression_formats_multiple | |
| generate_compression_formats_error() { | |
| expect_fail sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name="rustc" \ | |
| --component-name="rustc" \ | |
| --compression-formats="xz,foobar" | |
| } | |
| runtest generate_compression_formats_error | |
| combine_compression_formats_one() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz" \ | |
| --compression-formats=xz | |
| try test ! -e "${OUT_DIR}/rust.tar.gz" | |
| try test -e "${OUT_DIR}/rust.tar.xz" | |
| } | |
| runtest combine_compression_formats_one | |
| combine_compression_formats_multiple() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| try sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz" \ | |
| --compression-formats=xz,gz | |
| try test -e "${OUT_DIR}/rust.tar.gz" | |
| try test -e "${OUT_DIR}/rust.tar.xz" | |
| } | |
| runtest combine_compression_formats_multiple | |
| combine_compression_formats_error() { | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image1" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rustc \ | |
| --component-name=rustc | |
| try sh "$S/gen-installer.sh" \ | |
| --image-dir="$TEST_DIR/image3" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=cargo \ | |
| --component-name=cargo | |
| expect_fail sh "$S/combine-installers.sh" \ | |
| --work-dir="$WORK_DIR" \ | |
| --output-dir="$OUT_DIR" \ | |
| --package-name=rust \ | |
| --input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz" \ | |
| --compression-formats=xz,foobar | |
| } | |
| runtest combine_compression_formats_error | |
| tarball_compression_formats_one() { | |
| try cp -r "${TEST_DIR}/image1" "${WORK_DIR}/image" | |
| try sh "$S/make-tarballs.sh" \ | |
| --input="${WORK_DIR}/image" \ | |
| --work-dir="${WORK_DIR}" \ | |
| --output="${OUT_DIR}/rustc" \ | |
| --compression-formats="xz" | |
| try test ! -e "${OUT_DIR}/rustc.tar.gz" | |
| try test -e "${OUT_DIR}/rustc.tar.xz" | |
| } | |
| runtest tarball_compression_formats_one | |
| tarball_compression_formats_multiple() { | |
| try cp -r "${TEST_DIR}/image1" "${WORK_DIR}/image" | |
| try sh "$S/make-tarballs.sh" \ | |
| --input="${WORK_DIR}/image" \ | |
| --work-dir="${WORK_DIR}" \ | |
| --output="${OUT_DIR}/rustc" \ | |
| --compression-formats="xz,gz" | |
| try test -e "${OUT_DIR}/rustc.tar.gz" | |
| try test -e "${OUT_DIR}/rustc.tar.xz" | |
| } | |
| runtest tarball_compression_formats_multiple | |
| tarball_compression_formats_error() { | |
| try cp -r "${TEST_DIR}/image1" "${WORK_DIR}/image" | |
| expect_fail sh "$S/make-tarballs.sh" \ | |
| --input="${WORK_DIR}/image" \ | |
| --work-dir="${WORK_DIR}" \ | |
| --output="${OUT_DIR}/rustc" \ | |
| --compression-formats="xz,foobar" | |
| } | |
| runtest tarball_compression_formats_error | |
| echo | |
| echo "TOTAL SUCCESS!" | |
| echo |