summaryrefslogtreecommitdiffstats
path: root/src/tools/rust-installer/test.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/rust-installer/test.sh')
-rwxr-xr-xsrc/tools/rust-installer/test.sh1342
1 files changed, 1342 insertions, 0 deletions
diff --git a/src/tools/rust-installer/test.sh b/src/tools/rust-installer/test.sh
new file mode 100755
index 000000000..bf6de4cb1
--- /dev/null
+++ b/src/tools/rust-installer/test.sh
@@ -0,0 +1,1342 @@
+#!/bin/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"
+TMP_DIR="$S/tmp"
+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
+ # rustbuild 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