blob: 2843c1b04b4d38d7f448f48b6544fce62fed94c9 [file] [log] [blame] [edit]
#!/bin/sh
set -e -u
S="$(cd $(dirname $0) && pwd)"
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
/bin/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
/bin/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
/bin/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
/bin/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
/bin/echo "$_output"
echo
echo "TEST FAILED!"
echo
exit 1
elif ! echo "$_output" | grep -q "$_expected"; then
echo \$ "$_cmd"
/bin/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
/bin/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
/bin/echo "$_output"
echo
echo "TEST FAILED!"
echo
exit 1
elif ! echo "$_output" | grep -q "$_expected"; then
echo \$ "$_cmd"
/bin/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
/bin/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
/bin/echo "$_output"
echo
echo "TEST FAILED!"
echo
exit 1
elif echo "$_output" | grep -q "$_expected"; then
echo \$ "$_cmd"
/bin/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
/bin/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"
}
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
# Upgrade tests
upgrade_from_v1() {
mkdir "$WORK_DIR/v1"
try sh "$S/test/rust-installer-v1/gen-installer.sh" \
--image-dir="$TEST_DIR/image2" \
--work-dir="$WORK_DIR/v1" \
--output-dir="$OUT_DIR/v1" \
--verify-bin=oldprogram \
--rel-manifest-dir=packagelib
try sh "$S/gen-installer.sh" \
--image-dir="$TEST_DIR/image1" \
--work-dir="$WORK_DIR" \
--output-dir="$OUT_DIR" \
--rel-manifest-dir=packagelib \
--legacy-manifest-dirs=packagelib
try "$WORK_DIR/v1/package/install.sh" --prefix="$PREFIX_DIR"
try test -e "$PREFIX_DIR/something-to-install"
try test -e "$PREFIX_DIR/dir-to-install/bar"
try test -e "$PREFIX_DIR/bin/oldprogram"
try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR"
try test ! -e "$PREFIX_DIR/dir-to-install/bar"
try test ! -e "$PREFIX_DIR/bin/oldprogram"
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 --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 upgrade_from_v1
upgrade_from_v1_with_multiple_legacy_manifests() {
mkdir "$WORK_DIR/v1"
try sh "$S/test/rust-installer-v1/gen-installer.sh" \
--image-dir="$TEST_DIR/image2" \
--work-dir="$WORK_DIR/v1" \
--output-dir="$OUT_DIR/v1" \
--verify-bin=oldprogram \
--rel-manifest-dir=rustlib
try sh "$S/test/rust-installer-v1/gen-installer.sh" \
--image-dir="$TEST_DIR/image3" \
--work-dir="$WORK_DIR/v1b" \
--output-dir="$OUT_DIR/v1b" \
--verify-bin=cargo \
--rel-manifest-dir=cargo
try sh "$S/gen-installer.sh" \
--image-dir="$TEST_DIR/image1" \
--work-dir="$WORK_DIR" \
--output-dir="$OUT_DIR" \
--rel-manifest-dir=packagelib \
--legacy-manifest-dirs=rustlib,cargo
try "$WORK_DIR/v1/package/install.sh" --prefix="$PREFIX_DIR"
try "$WORK_DIR/v1b/package/install.sh" --prefix="$PREFIX_DIR"
try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR"
try test ! -e "$PREFIX_DIR/dir-to-install/bar"
try test ! -e "$PREFIX_DIR/bin/oldprogram"
try test ! -e "$PREFIX_DIR/bin/cargo"
try test ! -e "$PREFIX_DIR/lib/cargo"
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 --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 upgrade_from_v1_with_multiple_legacy_manifests
upgrade_from_v1_combined() {
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 \
--legacy-manifest-dirs=cargo,rustlib
try sh "$S/test/rust-installer-v1/gen-installer.sh" \
--image-dir="$TEST_DIR/image2" \
--work-dir="$WORK_DIR/v1" \
--output-dir="$OUT_DIR/v1" \
--verify-bin=oldprogram \
--rel-manifest-dir=rustlib
try sh "$S/test/rust-installer-v1/gen-installer.sh" \
--image-dir="$TEST_DIR/image3" \
--work-dir="$WORK_DIR/v1b" \
--output-dir="$OUT_DIR/v1b" \
--verify-bin=cargo \
--rel-manifest-dir=cargo
try "$WORK_DIR/v1/package//install.sh" --prefix="$PREFIX_DIR"
try "$WORK_DIR/v1b/package//install.sh" --prefix="$PREFIX_DIR"
try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR"
try test ! -e "$PREFIX_DIR/dir-to-install/bar"
try test ! -e "$PREFIX_DIR/bin/oldprogram"
try test ! -e "$PREFIX_DIR/lib/cargo"
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/rustlib"
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/rustlib"
}
runtest upgrade_from_v1_combined
upgrade_from_v2() {
mkdir "$WORK_DIR/v2"
try sh "$S/test/rust-installer-v2/gen-installer.sh" \
--image-dir="$TEST_DIR/image2" \
--work-dir="$WORK_DIR/v2" \
--output-dir="$OUT_DIR/v2" \
--verify-bin=oldprogram \
--rel-manifest-dir=packagelib
try sh "$S/gen-installer.sh" \
--image-dir="$TEST_DIR/image1" \
--work-dir="$WORK_DIR" \
--output-dir="$OUT_DIR" \
--rel-manifest-dir=packagelib \
--legacy-manifest-dirs=packagelib
try "$WORK_DIR/v2/package/install.sh" --prefix="$PREFIX_DIR"
try test -e "$PREFIX_DIR/something-to-install"
try test -e "$PREFIX_DIR/dir-to-install/bar"
try test -e "$PREFIX_DIR/bin/oldprogram"
try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR"
try test ! -e "$PREFIX_DIR/dir-to-install/bar"
try test ! -e "$PREFIX_DIR/bin/oldprogram"
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 --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 upgrade_from_v2
upgrade_from_v2_with_multiple_components() {
mkdir "$WORK_DIR/v2"
try sh "$S/test/rust-installer-v2/gen-installer.sh" \
--image-dir="$TEST_DIR/image2" \
--work-dir="$WORK_DIR/v2" \
--output-dir="$OUT_DIR/v2" \
--verify-bin=oldprogram \
--component-name=oldcomponent \
--rel-manifest-dir=rustlib
try sh "$S/test/rust-installer-v2/gen-installer.sh" \
--image-dir="$TEST_DIR/image3" \
--work-dir="$WORK_DIR/v2b" \
--output-dir="$OUT_DIR/v2b" \
--verify-bin=cargo \
--component-name=samecomponent \
--rel-manifest-dir=rustlib
try sh "$S/gen-installer.sh" \
--image-dir="$TEST_DIR/image1" \
--work-dir="$WORK_DIR" \
--output-dir="$OUT_DIR" \
--component-name=samecomponent \
--rel-manifest-dir=rustlib
try "$WORK_DIR/v2/package/install.sh" --prefix="$PREFIX_DIR"
try "$WORK_DIR/v2b/package/install.sh" --prefix="$PREFIX_DIR"
try "$WORK_DIR/package/install.sh" --prefix="$PREFIX_DIR"
# oldcomponent remains
try test -e "$PREFIX_DIR/dir-to-install/bar"
try test -e "$PREFIX_DIR/bin/oldprogram"
# Old version of samecomponent is gone
try test ! -e "$PREFIX_DIR/bin/cargo"
# New stuff was installed
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 --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"
# rustlib is still around because oldcomponent is still installed
try test -e "$PREFIX_DIR/lib/rustlib"
try test -e "$PREFIX_DIR/lib/rustlib/manifest-oldcomponent"
}
runtest upgrade_from_v2_with_multiple_components
upgrade_from_v2_combined() {
try sh "$S/test/rust-installer-v2/gen-installer.sh" \
--image-dir="$TEST_DIR/image1" \
--work-dir="$WORK_DIR/v2" \
--output-dir="$OUT_DIR" \
--package-name=rustc \
--component-name=rustc \
--rel-manifest-dir=rustlib
try sh "$S/test/rust-installer-v2/gen-installer.sh" \
--image-dir="$TEST_DIR/image4" \
--work-dir="$WORK_DIR/v2" \
--output-dir="$OUT_DIR" \
--verify-bin=oldprogram \
--package-name=cargo \
--component-name=cargo \
--rel-manifest-dir=rustlib
try sh "$S/test/rust-installer-v2/combine-installers.sh" \
--work-dir="$WORK_DIR/v2" \
--output-dir="$OUT_DIR" \
--package-name=rust \
--input-tarballs="$OUT_DIR/rustc.tar.gz,$OUT_DIR/cargo.tar.gz" \
--rel-manifest-dir=rustlib
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/v2/rust/install.sh" --prefix="$PREFIX_DIR"
try "$WORK_DIR/rust/install.sh" --prefix="$PREFIX_DIR"
# image4 was removed in the cargo upgrade
try test ! -e "$PREFIX_DIR/baz"
try test ! -e "$PREFIX_DIR/dir-to-install/qux/bar"
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/rustlib"
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/rustlib"
}
runtest upgrade_from_v2_combined
# TODO upgrade_from_v2_with_bulk_dirs
# 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
# TODO: mandir/libdir/bindir, etc.
echo
echo "TOTAL SUCCESS!"
echo