actions-template/tests/upgrade_test.sh

100 lines
2.5 KiB
Bash

#!/bin/bash
set -euo pipefail
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
REPO_ROOT=$(cd "${SCRIPT_DIR}/.." && pwd)
# shellcheck source=/dev/null
source "${REPO_ROOT}/docker-runner/common/upgrade.sh"
assert_eq() {
local expected=$1
local actual=$2
local message=$3
if [ "${expected}" != "${actual}" ]; then
echo "FAIL: ${message}" >&2
echo " expected: ${expected}" >&2
echo " actual: ${actual}" >&2
exit 1
fi
}
test_extract_versions_from_listing() {
local html
html=$(cat <<'EOF'
<tr class="file ">
<td class="name"><a href="/act_runner/0.6.1/"><span class="name">0.6.1</span></a></td>
</tr>
<tr class="file ">
<td class="name"><a href="/act_runner/0.5.0/"><span class="name">0.5.0</span></a></td>
</tr>
<tr class="file ">
<td class="name"><a href="/act_runner/0.4.1/"><span class="name">0.4.1</span></a></td>
</tr>
EOF
)
local actual
actual=$(extract_versions_from_listing <<<"${html}")
assert_eq $'0.6.1\n0.5.0\n0.4.1' "${actual}" \
"extract_versions_from_listing should return every version in listing order"
}
test_pick_latest_version() {
local actual
actual=$(pick_latest_version <<'EOF'
0.5.0
0.6.1
0.4.9
EOF
)
assert_eq "0.6.1" "${actual}" \
"pick_latest_version should return the highest semantic version"
}
test_extract_version_number_accepts_v_prefix() {
local actual
actual=$(extract_version_number <<'EOF'
act_runner version v0.6.1
EOF
)
assert_eq "0.6.1" "${actual}" \
"extract_version_number should accept version output with a leading v"
}
fake_latest_version() {
echo "0.6.2"
}
fake_invalid_version() {
echo "latest"
}
test_resolve_latest_version_or_fallback_prefers_latest() {
local actual
actual=$(resolve_latest_version_or_fallback "0.2.13" fake_latest_version)
assert_eq "0.6.2" "${actual}" \
"resolve_latest_version_or_fallback should prefer the detected latest version"
}
test_resolve_latest_version_or_fallback_uses_fallback() {
local actual
actual=$(resolve_latest_version_or_fallback "0.2.13" fake_invalid_version)
assert_eq "0.2.13" "${actual}" \
"resolve_latest_version_or_fallback should fall back when detected version is invalid"
}
test_extract_versions_from_listing
test_pick_latest_version
test_extract_version_number_accepts_v_prefix
test_resolve_latest_version_or_fallback_prefers_latest
test_resolve_latest_version_or_fallback_uses_fallback
echo "upgrade_test.sh: PASS"