diff --git a/bin/ruby-build b/bin/ruby-build index a4390e44..c5973ef6 100755 --- a/bin/ruby-build +++ b/bin/ruby-build @@ -283,9 +283,12 @@ download_tarball() { echo "-> $package_url" >&2 - { http get "$package_url" "$package_filename" - verify_checksum "$package_filename" "$checksum" - } >&4 2>&1 || return 1 + if http get "$package_url" "$package_filename" >&4 2>&1; then + verify_checksum "$package_filename" "$checksum" >&4 2>&1 || return 1 + else + echo "error: failed to download $package_filename" >&2 + return 1 + fi if [ -n "$RUBY_BUILD_CACHE_PATH" ]; then local cached_package_filename="${RUBY_BUILD_CACHE_PATH}/$package_filename" diff --git a/test/fetch.bats b/test/fetch.bats new file mode 100644 index 00000000..f2babd58 --- /dev/null +++ b/test/fetch.bats @@ -0,0 +1,14 @@ +#!/usr/bin/env bats + +load test_helper +export RUBY_BUILD_SKIP_MIRROR=1 +export RUBY_BUILD_CACHE_PATH= + +@test "failed download displays error message" { + stub curl false + + install_fixture definitions/without-checksum + assert_failure + assert_output_contains "> http://example.com/packages/package-1.0.0.tar.gz" + assert_output_contains "error: failed to download package-1.0.0.tar.gz" +} diff --git a/test/test_helper.bash b/test/test_helper.bash index 3a9687eb..d96e2500 100644 --- a/test/test_helper.bash +++ b/test/test_helper.bash @@ -94,3 +94,12 @@ assert_output() { fi assert_equal "$expected" "$output" } + +assert_output_contains() { + local expected="$1" + echo "$output" | grep -F "$expected" >/dev/null || { + { echo "expected output to contain $expected" + echo "actual: $output" + } | flunk + } +}