diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6993e3b..ca62827 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -63,46 +63,6 @@ jobs: - name: Run Hatchet integration tests run: bundle exec parallel_split_test test/spec/ - buildpack-testrunner: - runs-on: ubuntu-22.04 - needs: lint - env: - SHUNIT_HOME: /tmp/shunit2-2.1.6 - # Note the missing STACK environment variable here. This works since there is a default value in the buildpack - # source. I ported this as-is from the Travis config. Given we're trying to get rid of testrunner entirely, - # it will stay like this. If we, for some reason, decide to keep testrunner, we should look into a fixed STACK env var. - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-java@v4 - with: - distribution: zulu - java-version: 8 - - name: Download and unpack shunit 2.1.6 - run: curl -sSf --retry 3 --retry-connrefused --connect-timeout 5 https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/shunit2/shunit2-2.1.6.tgz | tar xz -C /tmp/ - - name: Clone heroku-buildpack-testrunner - run: git clone https://github.com/heroku/heroku-buildpack-testrunner.git /tmp/testrunner - - name: Apply heroku-buildpack-testrunner patches to enforce bash shell - run: | - cd /tmp/testrunner - git apply <<'EOF' - diff --git a/bin/run b/bin/run - index 0d5b790..a0ff25c 100755 - --- a/bin/run - +++ b/bin/run - @@ -101,7 +101,7 @@ for bp in ${@}; do - suite_start_time="$(date +%s)" - - echo " TEST SUITE: $(basename ${f})" - - ${SHUNIT_HOME?"'SHUNIT_HOME' environment variable must be set"}/src/shunit2 ${f} | indent - + /bin/bash ${SHUNIT_HOME?"'SHUNIT_HOME' environment variable must be set"}/src/shunit2 ${f} | indent - exit_code=$(max ${exit_code} ${PIPESTATUS[0]}) - - suite_end_time="$(date +%s)" - - EOF - - name: Execute buildpack-testrunner - run: /tmp/testrunner/bin/run . - unit-tests: name: "Unit Tests (${{ matrix.stack }})" runs-on: ubuntu-22.04 @@ -117,7 +77,6 @@ jobs: stack: ["heroku-20", "heroku-22", "heroku-24"] steps: - uses: actions/checkout@v4 - - run: test/v2 - run: test/jdbc.sh container-test: diff --git a/test/compile_test.sh b/test/compile_test.sh deleted file mode 100644 index 96d8a16..0000000 --- a/test/compile_test.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env bash - -# shellcheck source=/dev/null -. "${BUILDPACK_TEST_RUNNER_HOME}/lib/test_utils.sh" - -# Tests - -testCompileWithoutSystemProperties() { - assertTrue "Precondition" "[ ! -f ${BUILD_DIR}/system.properties ]" - - compile - - assertCapturedSuccess - - assertCaptured "WARNING: No OpenJDK version specified" - assertCaptured "Installing OpenJDK 21" - assertTrue "Java should be present in runtime." "[ -d ${BUILD_DIR}/.jdk ]" - assertTrue "Java version file should be present." "[ -f ${BUILD_DIR}/.jdk/version ]" -} - -testCompileWith_1_8_0_412() { - echo "java.runtime.version=1.8.0_412" >"${BUILD_DIR}/system.properties" - - compile - - assertCapturedSuccess - - assertCaptured "Installing OpenJDK 1.8.0_412" - assertTrue "Java should be present in runtime." "[ -d ${BUILD_DIR}/.jdk ]" - assertTrue "Java version file should be present." "[ -f ${BUILD_DIR}/.jdk/version ]" -} - -testCompileWith_zulu_1_8_0_412() { - echo "java.runtime.version=zulu-1.8.0_412" >"${BUILD_DIR}/system.properties" - - compile - - assertCapturedSuccess - - assertCaptured "Installing Azul Zulu OpenJDK 1.8.0_412" - assertTrue "Java should be present in runtime." "[ -d ${BUILD_DIR}/.jdk ]" - assertTrue "Java version file should be present." "[ -f ${BUILD_DIR}/.jdk/version ]" -} - -testCompileWith_openjdk_1_8_0_412() { - echo "java.runtime.version=openjdk-1.8.0_412" >"${BUILD_DIR}/system.properties" - - compile - - assertCapturedSuccess - - assertCaptured "Installing Heroku OpenJDK 1.8.0_412" - assertTrue "Java should be present in runtime." "[ -d ${BUILD_DIR}/.jdk ]" - assertTrue "Java version file should be present." "[ -f ${BUILD_DIR}/.jdk/version ]" -} - -testCompileWith_zulu_11_0_15() { - echo "java.runtime.version=zulu-11.0.23" >"${BUILD_DIR}/system.properties" - - compile - - assertCapturedSuccess - - assertCaptured "Installing Azul Zulu OpenJDK 11.0.23" - assertTrue "Java should be present in runtime." "[ -d ${BUILD_DIR}/.jdk ]" - assertTrue "Java version file should be present." "[ -f ${BUILD_DIR}/.jdk/version ]" -} - -test_skip_install_if_java_exists() { - mkdir -p "${BUILD_DIR}/.jdk/bin" - touch "${BUILD_DIR}/.jdk/bin/java" - - compile - - assertCapturedSuccess - assertCaptured "Using provided JDK" - assertTrue "Java should be present in runtime." "[ -d ${BUILD_DIR}/.jdk ]" - assertTrue "Java files should not have been installed." "[ ! -f ${BUILD_DIR}/.jdk/jre/lib/amd64/server/libjvm.so ]" -} diff --git a/test/unit b/test/unit deleted file mode 100755 index 7622f09..0000000 --- a/test/unit +++ /dev/null @@ -1,205 +0,0 @@ -#!/usr/bin/env bash - -BUILDPACK_DIR="${BUILDPACK_DIR:-$(pwd)}" - -test_get_jdk_version() { - echo "java.runtime.version=1.8" >"${BUILD_DIR}/system.properties" - assertEquals "1.8" "$(get_jdk_version "$BUILD_DIR")" -} - -test_get_jdk_version_spaces() { - echo "java.runtime.version = 11 " >"${BUILD_DIR}/system.properties" - assertEquals "11" "$(get_jdk_version "$BUILD_DIR")" -} - -test_get_jdk_version_newline() { - cat <"${BUILD_DIR}/system.properties" -java.runtime.version=11 -maven.version=3.5.4 -EOF - assertEquals "11" "$(get_jdk_version "$BUILD_DIR")" -} - -test_get_full_jdk_version() { - assertEquals "${DEFAULT_JDK_1_7_VERSION}" "$(get_full_jdk_version "1.7")" - assertEquals "${DEFAULT_JDK_1_8_VERSION}" "$(get_full_jdk_version "1.8")" - assertEquals "${DEFAULT_JDK_1_9_VERSION}" "$(get_full_jdk_version "1.9")" - assertEquals "${DEFAULT_JDK_1_9_VERSION}" "$(get_full_jdk_version "9")" - assertEquals "${DEFAULT_JDK_10_VERSION}" "$(get_full_jdk_version "10")" - assertEquals "${DEFAULT_JDK_11_VERSION}" "$(get_full_jdk_version "11")" - assertEquals "${DEFAULT_JDK_12_VERSION}" "$(get_full_jdk_version "12")" - assertEquals "${DEFAULT_JDK_13_VERSION}" "$(get_full_jdk_version "13")" - assertEquals "1.8.0_212" "$(get_full_jdk_version "1.8.0_212")" - assertEquals "11.0.5" "$(get_full_jdk_version "11.0.5")" - assertEquals "zulu-11.0.5" "$(get_full_jdk_version "zulu-11.0.5")" -} - -test_get_jdk_version_8_222() { - echo "java.runtime.version=1.8.0_222" >"${BUILD_DIR}/system.properties" - assertEquals "1.8.0_222" "$(get_jdk_version "$BUILD_DIR")" -} - -test_get_jdk_version_11() { - echo "java.runtime.version=11" >"${BUILD_DIR}/system.properties" - assertEquals "11" "$(get_jdk_version "$BUILD_DIR")" -} - -test_get_jdk_version_11_0_4() { - echo "java.runtime.version=11.0.4" >"${BUILD_DIR}/system.properties" - assertEquals "11.0.4" "$(get_jdk_version "$BUILD_DIR")" -} - -test_get_jdk_version_zulu() { - echo "java.runtime.version=zulu-1.8.0_212" >"${BUILD_DIR}/system.properties" - assertEquals "zulu-1.8.0_212" "$(get_jdk_version "$BUILD_DIR")" -} - -test_bp_jvm_version() { - rm -f "${BUILD_DIR}/system.properties" - export BP_JVM_VERSION="8.*" - assertEquals "8" "$(get_jdk_version "$BUILD_DIR")" - export BP_JVM_VERSION="8.0.252" - assertEquals "1.8.0_252" "$(get_jdk_version "$BUILD_DIR")" - export BP_JVM_VERSION="11.*" - assertEquals "11" "$(get_jdk_version "$BUILD_DIR")" - export BP_JVM_VERSION="11.0.7" - assertEquals "11.0.7" "$(get_jdk_version "$BUILD_DIR")" - unset BP_JVM_VERSION -} - -test_get_jdk_url() { - assertEquals "${JDK_BASE_URL:?}/openjdk${DEFAULT_JDK_1_8_VERSION:?}.tar.gz" "$(get_jdk_url "")" - assertEquals "${JDK_BASE_URL:?}/openjdk${DEFAULT_JDK_1_7_VERSION:?}.tar.gz" "$(get_jdk_url "1.7")" - assertEquals "${JDK_BASE_URL:?}/openjdk${DEFAULT_JDK_1_8_VERSION:?}.tar.gz" "$(get_jdk_url "1.8")" - assertEquals "${JDK_BASE_URL:?}/openjdk${DEFAULT_JDK_1_9_VERSION:?}.tar.gz" "$(get_jdk_url "9")" - assertEquals "${JDK_BASE_URL:?}/openjdk${DEFAULT_JDK_10_VERSION:?}.tar.gz" "$(get_jdk_url "10")" - assertEquals "${JDK_BASE_URL:?}/openjdk${DEFAULT_JDK_11_VERSION:?}.tar.gz" "$(get_jdk_url "11")" - assertEquals "${JDK_BASE_URL:?}/openjdk${DEFAULT_JDK_12_VERSION:?}.tar.gz" "$(get_jdk_url "12")" - assertEquals "${JDK_BASE_URL:?}/openjdk${DEFAULT_JDK_13_VERSION:?}.tar.gz" "$(get_jdk_url "13")" - assertEquals "${JDK_BASE_URL:?}/openjdk1.7.0_192.tar.gz" "$(get_jdk_url "1.7.0_192")" - assertEquals "${JDK_BASE_URL:?}/openjdk1.8.0_222.tar.gz" "$(get_jdk_url "1.8.0_222")" - assertEquals "${JDK_BASE_URL:?}/openjdk1.8.0_191.tar.gz" "$(get_jdk_url "1.8.0_191")" - assertEquals "${JDK_BASE_URL:?}/openjdk11.0.0.tar.gz" "$(get_jdk_url "11.0.0")" - assertEquals "${JDK_BASE_URL:?}/zulu-1.8.0_212.tar.gz" "$(get_jdk_url "zulu-1.8.0_212")" - assertEquals "${JDK_BASE_URL:?}/zulu-11.0.5.tar.gz" "$(get_jdk_url "zulu-11.0.5")" - assertEquals "${JDK_BASE_URL:?}/openjdk1.8.0_212.tar.gz" "$(get_jdk_url "openjdk-1.8.0_212")" -} - -test_install_jdk_overlay() { - local jdk_dir - jdk_dir="$(mktemp -d)" - - mkdir -p "${jdk_dir}/jre/bin" - touch "${jdk_dir}/jre/bin/java" - mkdir -p "${BUILD_DIR}/.jdk-overlay/jre/lib/security" - mkdir -p "${BUILD_DIR}/.jdk-overlay/jre/bin" - touch "${BUILD_DIR}/.jdk-overlay/jre/lib/security/policy.jar" - echo "." >"${BUILD_DIR}/.jdk-overlay/jre/lib/security/cacerts" - capture install_jdk_overlay "${jdk_dir}" "${BUILD_DIR}" - assertTrue "Files in .jdk-overlay should be copied to .jdk." "[ -f ${jdk_dir}/jre/lib/security/policy.jar ]" - assertTrue "Files in .jdk should not be overwritten." "[ -f ${jdk_dir}/jre/bin/java ]" -} - -test_install_profile() { - unset JAVA_HOME # unsets environment -- shunit doesn't clean environment before each test - - local profileDir - profileDir="$(mktemp -d)" - - capture install_profile "${BUILDPACK_DIR}" "${profileDir}" - assertCapturedSuccess - assertTrue "[ -f ${profileDir}/jvmcommon.sh ]" -} - -testGetAppSystemProperty() { - cat >"${BUILD_DIR}/app.system" <"${BUILD_DIR}/app.system" <"${BUILD_DIR}/app.system" <>"${mockLayer}.toml" - - bp_layer_has_key "$mockLayer" ".metadata.cache_id" "quack" - assertEquals 1 "$?" -} - -test_bp_layer_has_key_no_file() { - local mockLayersDir - mockLayersDir="$(mktemp -d)" - - local expectedCacheId="foobar123" - - bp_layer_has_key "${mockLayersDir}/test" ".metadata.cache_id" "$expectedCacheId" - assertEquals 1 "$?" -} - -test_bp_layer_has_key_yes() { - local mockLayer="${LAYERS_DIR}/test" - local expectedCacheId="foobar123" - mkdir -p "${mockLayer}" - touch "${mockLayer}.toml" - - { - echo "[metadata]" - echo "version = \"1.8.0_202\"" - echo "cache_id = \"${expectedCacheId}\"" - } >>"${mockLayer}.toml" - - bp_layer_has_key "$mockLayer" ".metadata.cache_id" "$expectedCacheId" - assertEquals 0 "$?" -} - -test_install_jre() { - jdk_dir="${LAYERS_DIR}/jdk" - jre_dir="${LAYERS_DIR}/jre" - mkdir -p "${jdk_dir}/bin" - touch "${jdk_dir}/bin/java" - mkdir -p "${jre_dir}" - touch "${jre_dir}.toml" - install_jre "${jdk_dir}" "${jre_dir}" - assertFileExists "${jre_dir}/bin/java" - assertFileExists "${jre_dir}.toml" -} - -# the modules to be tested -# shellcheck source=lib/jvm.sh -source "${BUILDPACK_DIR}/lib/jvm.sh" -# shellcheck source=lib/v3/buildpack.sh -source "${BUILDPACK_DIR}/lib/v3/buildpack.sh" - -# testing utils -# shellcheck source=test/utils -source "${BUILDPACK_DIR}/test/utils" -installToolbox - -# import the testing framework -# shellcheck source=test/vendor/shunit2 -source "${BUILDPACK_DIR}/test/vendor/shunit2" diff --git a/test/util_test.sh b/test/util_test.sh deleted file mode 100644 index c1f10f4..0000000 --- a/test/util_test.sh +++ /dev/null @@ -1,124 +0,0 @@ -#!/usr/bin/env bash - -# shellcheck source=/dev/null -. "${BUILDPACK_TEST_RUNNER_HOME}/lib/test_utils.sh" -# shellcheck source=/dev/null -. "${BUILDPACK_HOME}/bin/util" - -beforeSetUp() { - # clean up after prepareEnvDir - unset GIT_DIR - unset MAVEN_DIR - unset EMPTY - unset MULTILINE -} - -prepareEnvDir() { - echo -n "/lol" >"$ENV_DIR/GIT_DIR" - echo -n "/jars" >"$ENV_DIR/MAVEN_DIR" - cat >"$ENV_DIR/MULTILINE" <"$ENV_DIR/EMPTY" -} - -test_export_env_dir_unset() { - prepareEnvDir - export_env_dir - - assertNull 'GIT_DIR should not be set' "$(env | grep '^GIT_DIR=')" - assertNull 'MAVEN_DIR should not be set' "$(env | grep '^MAVEN_DIR=')" -} - -test_export_env_dir_defaults() { - prepareEnvDir - export_env_dir "$ENV_DIR" - - assertNull 'GIT_DIR should not be set' "$(env | grep '^GIT_DIR=')" - assertNotNull 'MAVEN_DIR should be set' "$(env | grep '^MAVEN_DIR=')" - assertEquals 'MAVEN_DIR should be set with value' "/jars" "$MAVEN_DIR" - assertNotNull 'EMPTY should but without any value' "$(env | grep '^EMPTY=$')" - assertNotNull 'MULTILINE should be set' "$(env | grep '^MULTILINE=')" - assertEquals 'MULTILINE should have line breaks without trailing new lines' '4' "$(printf "%s" "$MULTILINE" | wc -l)" -} - -test_export_env_dir_whitelist() { - prepareEnvDir - export_env_dir "$ENV_DIR" '^MAVEN_DIR$' - - assertNull 'GIT_DIR should not be set' "$(env | grep '^GIT_DIR=')" - assertNotNull 'MAVEN_DIR should be set' "$(env | grep '^MAVEN_DIR=')" - assertEquals 'MAVEN_DIR should be set with value' "/jars" "$MAVEN_DIR" - assertNull 'EMPTY should not be set' "$(env | grep '^EMPTY=$')" - assertNull 'MULTILINE should not be set' "$(env | grep '^MULTILINE=')" -} - -test_export_env_dir_blacklist() { - prepareEnvDir - export_env_dir "$ENV_DIR" '' '^MAVEN_DIR$' - - assertNotNull 'GIT_DIR should be set' "$(env | grep '^GIT_DIR=')" - assertNull 'MAVEN_DIR should not be set' "$(env | grep '^MAVEN_DIR=')" - assertNotNull 'EMPTY should be set' "$(env | grep '^EMPTY=$')" - assertNotNull 'MULTILINE should be set' "$(env | grep '^MULTILINE=')" -} - -test_copyDirectories() { - mkdir -p "${CACHE_DIR}/dir1" - mkdir -p "${CACHE_DIR}/dir2" - copy_directories "dir1 dir2" "${CACHE_DIR}" "${BUILD_DIR}" - assertTrue "dir1 should have been copied, but it does not exist in the target directory." "[ -d ${BUILD_DIR}/dir1 ]" - assertTrue "dir2 should have been copied, but it does not exist in the target directory." "[ -d ${BUILD_DIR}/dir2 ]" -} - -test_copyDirectoryThatDoesntExist() { - mkdir -p "${CACHE_DIR}/dir1" - copy_directories "dir1 dir2" "${CACHE_DIR}" "${BUILD_DIR}" - assertTrue "dir1 should have been copied, but it does not exist in the target directory." "[ -d ${BUILD_DIR}/dir1 ]" - assertTrue "dir2 should not have been copied, but it exists in the target directory." "[ ! -d ${BUILD_DIR}/dir2 ]" -} - -test_noDirectories() { - # shellcheck disable=SC2012 - initialDirectoryCount=$(ls -l | wc -l | sed -E -e 's/\s*//') - copy_directories "" "${CACHE_DIR}" "${BUILD_DIR}" - # shellcheck disable=SC2012 - countDirectories=$(ls -l | wc -l | sed -E -e 's/\s*//') - assertEquals "${initialDirectoryCount}" "${countDirectories}" -} - -test_invalidBaseDir() { - directoriesFailure=$(copy_directories "" "${CACHE_DIR}/fake-dir" "${BUILD_DIR}") - assertEquals "1" "$?" - assertEquals "Invalid source directory to copy from. ${CACHE_DIR}/fake-dir" "${directoriesFailure}" -} - -test_invalidSourceDir() { - directoriesFailure=$(copy_directories "" "${CACHE_DIR}" "${BUILD_DIR}/fake-dir") - assertEquals "1" "$?" - assertEquals "Invalid destination directory to copy to. ${BUILD_DIR}/fake-dir" "${directoriesFailure}" -} - -test_sourceDirOverwritesDestDir() { - mkdir -p "${CACHE_DIR}/dir1" - touch "${CACHE_DIR}/dir1/source" - mkdir -p "${BUILD_DIR}/dir1" - touch "${BUILD_DIR}/dir1/destination" - copy_directories "dir1" "${CACHE_DIR}" "${BUILD_DIR}" - assertTrue "dir1 should exist in the source directory, but it does not." "[ -d ${CACHE_DIR}/dir1 ]" - assertTrue "dir1 should exist in the target directory, but it does not." "[ -d ${BUILD_DIR}/dir1 ]" - assertTrue "${CACHE_DIR}/dir1/source should exist in the source directory, but it does not." "[ -f ${CACHE_DIR}/dir1/source ]" - assertTrue "${BUILD_DIR}/dir1/source should exist in the source directory, but it does not." "[ -f ${BUILD_DIR}/dir1/source ]" - assertTrue "${BUILD_DIR}/dir1/destination should have been removed from the target directory, but it does not." "[ ! -f ${BUILD_DIR}/dir1/destination ]" -} - -test_recursiveDirectoriesCopied() { - mkdir -p "${CACHE_DIR}/dir1/dir2/dir3" - copy_directories "dir1" "${CACHE_DIR}" "${BUILD_DIR}" - assertTrue "dir3 should exist in the target directory." "[ -d ${BUILD_DIR}/dir1/dir2/dir3 ]" -} diff --git a/test/utils b/test/utils deleted file mode 100644 index b3bcb56..0000000 --- a/test/utils +++ /dev/null @@ -1,221 +0,0 @@ -#!/bin/sh - -# This file is part of buildpack-testrunner. We don't modify it to ensure it works as intented. -# shellcheck disable=SC2034,SC2086,SC2124,SC2039,SC2164 - -# taken from -# https://github.com/ryanbrainard/heroku-buildpack-testrunner/blob/master/lib/test_utils.sh - -installToolbox() { - curl -o "/usr/local/bin/jq" -Ls "https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64" && - chmod +x "/usr/local/bin/jq" - curl -o "/usr/local/bin/yj" -Ls "https://github.com/sclevine/yj/releases/download/v2.0/yj-linux" && - chmod +x "/usr/local/bin/yj" -} - -oneTimeSetUp() { - TEST_SUITE_CACHE="$(mktemp -d ${SHUNIT_TMPDIR}/test_suite_cache.XXXX)" -} - -oneTimeTearDown() { - rm -rf ${TEST_SUITE_CACHE} -} - -setUp() { - OUTPUT_DIR="$(mktemp -d ${SHUNIT_TMPDIR}/output.XXXX)" - STD_OUT="${OUTPUT_DIR}/stdout" - STD_ERR="${OUTPUT_DIR}/stderr" - BUILD_DIR="${OUTPUT_DIR}/build" - LAYERS_DIR="${OUTPUT_DIR}/layers" - PLATFORM_DIR="${OUTPUT_DIR}/platform" - mkdir -p ${OUTPUT_DIR} - mkdir -p ${BUILD_DIR} - mkdir -p ${LAYERS_DIR} -} - -tearDown() { - rm -rf ${OUTPUT_DIR} -} - -capture() { - resetCapture - - LAST_COMMAND="$@" - - "$@" >${STD_OUT} 2>${STD_ERR} - RETURN=$? - rtrn=${RETURN} # deprecated -} - -resetCapture() { - if [ -f ${STD_OUT} ]; then - rm ${STD_OUT} - fi - - if [ -f ${STD_ERR} ]; then - rm ${STD_ERR} - fi - - unset LAST_COMMAND - unset RETURN - unset rtrn # deprecated -} - -fixture() { - local fixture="${1}" - echo "* fixture: ${fixture}" - local fp="${BUILDPACK_HOME}/test/fixtures/${fixture}" - tar -cf - -C $fp . | tar -x -C ${BUILD_DIR} -} - -detect() { - cd ${BUILD_DIR} - if [ -n "${CNB_STACK_ID:-}" ]; then - capture ${BUILDPACK_HOME}/bin/detect "$1" "$2" - else - capture ${BUILDPACK_HOME}/bin/detect "${BUILD_DIR}" - fi -} - -build() { - cd ${BUILD_DIR} - capture ${BUILDPACK_HOME}/bin/build ${LAYERS_DIR} -} - -assertCapturedEquals() { - assertEquals "$@" "$(cat ${STD_OUT})" -} - -assertCapturedNotEquals() { - assertNotEquals "$@" "$(cat ${STD_OUT})" -} - -assertCaptured() { - assertFileContains "$@" "${STD_OUT}" -} - -assertNotCaptured() { - assertFileNotContains "$@" "${STD_OUT}" -} - -assertCapturedSuccess() { - assertEquals "Expected captured exit code to be 0; was <${RETURN}>" "0" "${RETURN}" - assertEquals "Expected STD_ERR to be empty; was <$(cat ${STD_ERR})>" "" "$(cat ${STD_ERR})" -} - -# assertCapturedError [[expectedErrorCode] expectedErrorMsg] -assertCapturedError() { - if [ $# -gt 1 ]; then - local expectedErrorCode=${1} - shift - fi - - local expectedErrorMsg=${1:-""} - - if [ -z ${expectedErrorCode} ]; then - assertTrue "Expected captured exit code to be greater than 0; was <${RETURN}>" "[ ${RETURN} -gt 0 ]" - else - assertTrue "Expected captured exit code to be <${expectedErrorCode}>; was <${RETURN}>" "[ ${RETURN} -eq ${expectedErrorCode} ]" - fi - - if [ "${expectedErrorMsg}" != "" ]; then - assertFileContains "Expected STD_ERR to contain error <${expectedErrorMsg}>" "${expectedErrorMsg}" "${STD_ERR}" - fi -} - -assertAppDetected() { - expectedAppType=${1?"Must provide app type"} - - assertCapturedSuccess - assertEquals "${expectedAppType}" "$(cat ${STD_OUT})" -} - -assertNoAppDetected() { - assertEquals "1" "${RETURN}" - assertEquals "no" "$(cat ${STD_OUT})" - assertEquals "" "$(cat ${STD_ERR})" -} - -_assertContains() { - if [ 5 -eq $# ]; then - local msg=$1 - shift - elif [ ! 4 -eq $# ]; then - fail "Expected 4 or 5 parameters; Receieved $# parameters" - fi - - local needle=$1 - local haystack=$2 - local expectation=$3 - local haystack_type=$4 - - case "${haystack_type}" in - "file") grep -q -F -e "${needle}" ${haystack} ;; - "text") echo "${haystack}" | grep -q -F -e "${needle}" ;; - esac - - if [ "${expectation}" != "$?" ]; then - case "${expectation}" in - 0) default_msg="Expected <${haystack}> to contain <${needle}>" ;; - 1) default_msg="Did not expect <${haystack}> to contain <${needle}>" ;; - esac - - fail "${msg:-${default_msg}}" - fi -} - -assertContains() { - _assertContains "$@" 0 "text" -} - -assertNotContains() { - _assertContains "$@" 1 "text" -} - -assertFileContains() { - _assertContains "$@" 0 "file" -} - -assertFileNotContains() { - _assertContains "$@" 1 "file" -} - -command_exists() { - type "$1" >/dev/null 2>&1 -} - -assertFileMD5() { - expectedHash=$1 - filename=$2 - - if command_exists "md5sum"; then - md5_cmd="md5sum ${filename}" - expected_md5_cmd_output="${expectedHash} ${filename}" - elif command_exists "md5"; then - md5_cmd="md5 ${filename}" - expected_md5_cmd_output="MD5 (${filename}) = ${expectedHash}" - else - fail "no suitable MD5 hashing command found on this system" - fi - - assertEquals "${expected_md5_cmd_output}" "$(${md5_cmd})" -} - -assertDirectoryExists() { - if [[ ! -e "$1" ]]; then - fail "$1 does not exist" - fi - if [[ ! -d $1 ]]; then - fail "$1 is not a directory" - fi -} - -assertFileExists() { - filename=$1 - assertTrue "$filename doesn't exist" "[[ -e $filename ]]" -} - -assertFileDoesNotExist() { - filename=$1 - assertTrue "$filename exists" "[[ ! -e $filename ]]" -} diff --git a/test/v2 b/test/v2 deleted file mode 100755 index 1ecb57d..0000000 --- a/test/v2 +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/env bash - -BUILDPACK_HOME="${BUILDPACK_HOME:-$(pwd)}" - -testDetect() { - detect "${BUILD_DIR}" - - assertAppDetected "JVM Common" -} - -test_install_metrics_agent() { - local install_dir - install_dir="$(mktemp -d)" - - local profile_dir - profile_dir="$(mktemp -d)" - - install_metrics_agent "${BUILDPACK_HOME}" "${install_dir}" "${profile_dir}" - assertFileExists "${profile_dir}/heroku-jvm-metrics.sh" - assertFileExists "${install_dir}/heroku-metrics-agent.jar" -} - -test_install_metrics_agent_fail() { - local install_dir - install_dir="$(mktemp -d)" - - local profile_dir - profile_dir="$(mktemp -d)" - - export HEROKU_METRICS_JAR_URL="https://89erfhuisffuds.com" - install_metrics_agent "${BUILDPACK_HOME}" "${install_dir}" "${profile_dir}" - assertFileDoesNotExist "${profile_dir}/heroku-jvm-metrics.sh" - assertFileDoesNotExist "${install_dir}/heroku-metrics-agent.jar" - unset HEROKU_METRICS_JAR_URL -} - -test_installDefaultJava() { - unset CI - unset JAVA_HOME # unsets environment -- shunit doesn't clean environment before each test - capture install_java "${BUILD_DIR}" - assertCapturedSuccess - assertTrue "A .jdk directory should be created when installing java." "[ -d ${BUILD_DIR}/.jdk ]" - assertTrue "The java runtime should be present." "[ -f ${BUILD_DIR}/.jdk/bin/java ]" - assertEquals "$(find "${BUILD_DIR}" -name jdk.tar.gz | wc -l | sed 's/ //g')" "0" # make sure there's no tarball left in the slug - assertEquals "${BUILD_DIR}/.jdk" "${JAVA_HOME}" - assertContains "${PATH}" "${BUILD_DIR}/.jdk/bin" - assertTrue "A version file should have been created." "[ -f ${BUILD_DIR}/.jdk/version ]" - assertEquals "$(cat "${BUILD_DIR}/.jdk/version")" "${DEFAULT_JDK_VERSION}" - - # shellcheck disable=SC2164 - cd # unsure why, but this fixes `sh: 0: getcwd() failed: No such file or directory` because $BUILD_DIR get deleted out from under us - - assertEquals "${BUILD_DIR}/.jdk/bin/java" "$(command -v java)" - assertTrue "A profile.d file should have been created." "[ -f ${BUILD_DIR}/.profile.d/jvmcommon.sh ]" -} - -test_installJavaCI() { - export CI="true" - unset JAVA_HOME # unsets environment -- shunit doesn't clean environment before each test - capture install_java "${BUILD_DIR}" - assertCapturedSuccess - assertTrue "A pgconfig.jar should exist in the JDK" "[ ! -f ${BUILD_DIR}/.jdk/jre/lib/ext/pgconfig.jar ]" - unset CI -} - -test_installJavaWithVersion() { - unset JAVA_HOME # unsets environment -- shunit doesn't clean environment before each test - capture install_java "${BUILD_DIR}" "1.8.0_412" - assertTrue "A .jdk directory should be created when installing java." "[ -d ${BUILD_DIR}/.jdk ]" - assertTrue "The java runtime should be present." "[ -f ${BUILD_DIR}/.jdk/bin/java ]" - assertEquals "${BUILD_DIR}/.jdk" "${JAVA_HOME}" - assertContains "${PATH}" "${BUILD_DIR}/.jdk/bin" - assertTrue "A version file should have been created." "[ -f ${BUILD_DIR}/.jdk/version ]" - assertEquals "$(cat "${BUILD_DIR}/.jdk/version")" "1.8.0_412" - assertEquals "${BUILD_DIR}/.jdk/bin/java" "$(command -v java)" - assertTrue "A profile.d file should have been created." "[ -f ${BUILD_DIR}/.profile.d/jvmcommon.sh ]" -} - -test_install_tools() { - unset JAVA_HOME # unsets environment -- shunit doesn't clean environment before each test - capture _install_tools "${BUILD_DIR}" - assertCapturedSuccess - assertTrue "A with_jmap file should have been created." "[ -f ${BUILD_DIR}/.heroku/bin/with_jmap ]" - assertTrue "The with_jmap file should be executable." "[ -x ${BUILD_DIR}/.heroku/bin/with_jmap ]" - assertTrue "A with_jmap java file should have been created." "[ -f ${BUILD_DIR}/.heroku/with_jmap/bin/java ]" - assertTrue "The with_jmap java file should be executable." "[ -x ${BUILD_DIR}/.heroku/with_jmap/bin/java ]" - assertTrue "A with_jmap file should have been created." "[ -f ${BUILD_DIR}/.heroku/bin/with_jstack ]" - assertTrue "The with_jmap file should be executable." "[ -x ${BUILD_DIR}/.heroku/bin/with_jstack ]" -} - -test_create_export_script() { - unset JAVA_HOME # unsets environment -- shunit doesn't clean environment before each test - capture _create_export_script "/path/to/jdk" "${BUILD_DIR}" - assertCapturedSuccess - assertTrue "An export file should be created." "[ -f ${BUILD_DIR}/export ]" - assertContains "export JAVA_HOME=/path/to/jdk" "$(cat "${BUILD_DIR}/export")" - assertContains "export PATH=\$JAVA_HOME/bin:\$PATH" "$(cat "${BUILD_DIR}/export")" -} - -test_invalidJdkURL() { - capture install_java "${BUILD_DIR}" "1.8.0_11" - assertContains "Did not find error message for invalid JDK version" "Unsupported Java version: 1.8.0_11" "$(cat "${STD_OUT}")" -} - -test_customJdk() { - capture install_java "${BUILD_DIR}" "1.8.0_412" - assertCapturedSuccess -} - -test_zuluJdk() { - capture install_java "${BUILD_DIR}" "zulu-1.8.0_412" - assertCapturedSuccess -} - -test_openJdk() { - capture install_java "${BUILD_DIR}" "openjdk-1.8.0_412" - assertCapturedSuccess -} - -test_skip_version_cache() { - assertTrue "Fake dir should not exist." "[ ! -d fake_dir ]" - capture _cache_version "1.8" "fake_dir" - assertCapturedSuccess - assertTrue "Version should not be cached" "[ ! -f fake_dir/system.properties ]" -} - -test_get_jdk_url_with_default() { - if [ "${STACK}" == "heroku-20" ]; then - assertEquals "${JDK_BASE_URL:?}/openjdk1.8.0_412.tar.gz" "$(_get_jdk_url_with_default "1.8.0_412")" - - export JDK_URL_1_8="https://example.com/java8" - assertEquals "${JDK_URL_1_8}" "$(_get_jdk_url_with_default "1.8.0_412")" - assertEquals "${JDK_BASE_URL:?}/openjdk11.0.23.tar.gz" "$(_get_jdk_url_with_default "11.0.23")" - assertEquals "${JDK_BASE_URL:?}/zulu-11.0.23.tar.gz" "$(_get_jdk_url_with_default "zulu-11.0.23")" - unset JDK_URL_1_8 - - export JDK_URL_11="https://example.com/java11" - assertEquals "${JDK_URL_11}" "$(_get_jdk_url_with_default "11.0.23")" - assertEquals "${JDK_BASE_URL:?}/openjdk1.8.0_412.tar.gz" "$(_get_jdk_url_with_default "1.8.0_412")" - unset JDK_URL_11 - else - assertEquals "${JDK_BASE_URL:?}/zulu-1.8.0_412.tar.gz" "$(_get_jdk_url_with_default "1.8.0_412")" - - export JDK_URL_1_8="https://example.com/java8" - assertEquals "${JDK_URL_1_8}" "$(_get_jdk_url_with_default "1.8.0_412")" - assertEquals "${JDK_BASE_URL:?}/zulu-1.7.0_272.tar.gz" "$(_get_jdk_url_with_default "1.7.0_272")" - assertEquals "${JDK_BASE_URL:?}/zulu-11.0.23.tar.gz" "$(_get_jdk_url_with_default "11.0.23")" - assertEquals "${JDK_BASE_URL:?}/openjdk11.0.23.tar.gz" "$(_get_jdk_url_with_default "openjdk-11.0.23")" - unset JDK_URL_1_8 - - export JDK_URL_11="https://example.com/java11" - assertEquals "${JDK_URL_11}" "$(_get_jdk_url_with_default "11.0.23")" - assertEquals "${JDK_BASE_URL:?}/zulu-1.8.0_412.tar.gz" "$(_get_jdk_url_with_default "1.8.0_412")" - unset JDK_URL_11 - fi -} - -# the modules to be tested -# shellcheck source=bin/util -source "${BUILDPACK_HOME}/bin/util" - -# shellcheck source=bin/java -source "${BUILDPACK_HOME}/bin/java" - -# testing utils -# shellcheck source=test/utils -source "${BUILDPACK_HOME}/test/utils" - -# import the testing framework -# shellcheck source=test/vendor/shunit2 -source "${BUILDPACK_HOME}/test/vendor/shunit2"