mirror of
https://github.com/containers/podman
synced 2024-10-20 17:23:30 +00:00
326ef19d94
Cirrus-CI only sets `$CIRRUS_BASE_SHA` when testing PRs since the destination and it's state is easy to discover. However, when post-merge and/or tag-push testing, the previous state is not easily discoverable (changes have already merged). The `upload_release_archive` script incorrectly assumed this variable was always set, causing a constant stream of post-merge testing failures. Tweak the `is_release()` function to properly handle an empty `$CIRRUS_BASE_SHA` whether or not `$CIRRUS_TAG` is also set. Also update the unit-tests to check for this. Also account for a corner case where hack/get_ci_vm.sh is running on a VM w/o git. Signed-off-by: Chris Evich <cevich@redhat.com>
164 lines
5.3 KiB
Bash
Executable file
164 lines
5.3 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Unit tests for some functions in lib.sh
|
|
#
|
|
source $(dirname $0)/lib.sh
|
|
|
|
# Iterator and return code; updated in test functions
|
|
testnum=0
|
|
rc=0
|
|
|
|
function check_result {
|
|
testnum=$(expr $testnum + 1)
|
|
MSG=$(echo "$1" | tr -d '*>\012'|sed -e 's/^ \+//')
|
|
if [ "$MSG" = "$2" ]; then
|
|
echo "ok $testnum $(echo $3) = $(echo $MSG)"
|
|
else
|
|
echo "not ok $testnum $3"
|
|
echo "# expected: $2"
|
|
echo "# actual: $MSG"
|
|
rc=1
|
|
fi
|
|
}
|
|
|
|
###############################################################################
|
|
# tests for die()
|
|
|
|
function test_die() {
|
|
local input_status=$1
|
|
local input_msg=$2
|
|
local expected_status=$3
|
|
local expected_msg=$4
|
|
|
|
local msg
|
|
msg=$(die $input_status "$input_msg")
|
|
local status=$?
|
|
|
|
check_result "$msg" "$expected_msg" "die $input_status $input_msg"
|
|
}
|
|
|
|
test_die 1 "a message" 1 "a message"
|
|
test_die 2 "" 2 "FATAL ERROR (but no message given!) in test_die()"
|
|
test_die '' '' 1 "FATAL ERROR (but no message given!) in test_die()"
|
|
|
|
###############################################################################
|
|
# tests for req_env_var()
|
|
|
|
function test_rev() {
|
|
local input_args=$1
|
|
local expected_status=$2
|
|
local expected_msg=$3
|
|
|
|
# bash gotcha: doing 'local msg=...' on one line loses exit status
|
|
local msg
|
|
msg=$(req_env_var $input_args)
|
|
local status=$?
|
|
|
|
check_result "$msg" "$expected_msg" "req_env_var $input_args"
|
|
check_result "$status" "$expected_status" "req_env_var $input_args (rc)"
|
|
}
|
|
|
|
# error if called with no args
|
|
test_rev '' 1 'FATAL: req_env_var: invoked without arguments'
|
|
|
|
# error if desired envariable is unset
|
|
unset FOO BAR
|
|
test_rev FOO 9 'FATAL: test_rev() requires $FOO to be non-empty'
|
|
test_rev BAR 9 'FATAL: test_rev() requires $BAR to be non-empty'
|
|
# OK if desired envariable was unset
|
|
FOO=1
|
|
test_rev FOO 0 ''
|
|
|
|
# OK if multiple vars are non-empty
|
|
FOO="stuff"
|
|
BAR="things"
|
|
ENV_VARS="FOO BAR"
|
|
test_rev "$ENV_VARS" 0 ''
|
|
unset BAR
|
|
|
|
# ...but error if any single desired one is unset
|
|
test_rev "FOO BAR" 9 'FATAL: test_rev() requires $BAR to be non-empty'
|
|
|
|
# ...and OK if all args are set
|
|
BAR=1
|
|
test_rev "FOO BAR" 0 ''
|
|
|
|
###############################################################################
|
|
# tests for test_okay()
|
|
|
|
function test_item_test {
|
|
local exp_msg=$1
|
|
local exp_ret=$2
|
|
local item=$3
|
|
shift 3
|
|
local test_args="$@"
|
|
local msg
|
|
msg=$(item_test "$item" "$@")
|
|
local status=$?
|
|
|
|
check_result "$msg" "$exp_msg" "test_item $item $test_args"
|
|
check_result "$status" "$exp_ret" "test_item $item $test_args (actual rc $status)"
|
|
}
|
|
|
|
# negative tests
|
|
test_item_test "FATAL: item_test() requires \$ITEM to be non-empty" 9 "" ""
|
|
test_item_test "FATAL: item_test() requires \$TEST_ARGS to be non-empty" 9 "foo" ""
|
|
test_item_test "not ok foo: -gt 5 ~= bar: too many arguments" 2 "foo" "-gt" "5" "~=" "bar"
|
|
test_item_test "not ok bar: a -ge 10: a: integer expression expected" 2 "bar" "a" "-ge" "10"
|
|
test_item_test "not ok basic logic: 0 -ne 0" 1 "basic logic" "0" "-ne" "0"
|
|
|
|
# positive tests
|
|
test_item_test "ok snafu" 0 "snafu" "foo" "!=" "bar"
|
|
test_item_test "ok foobar" 0 "foobar" "one two three" "=" "one two three"
|
|
test_item_test "ok oh boy" 0 "oh boy" "line 1
|
|
line2" "!=" "line 1
|
|
|
|
line2"
|
|
test_item_test "ok okay enough" 0 "okay enough" "line 1
|
|
line2" "=" "line 1
|
|
line2"
|
|
|
|
###############################################################################
|
|
# tests for is_release()
|
|
|
|
# N/B: Assuming tests run in their own process, so wiping out the local
|
|
# CIRRUS_BASE_SHA CIRRUS_CHANGE_IN_REPO and CIRRUS_TAG will be okay.
|
|
function test_is_release() {
|
|
CIRRUS_BASE_SHA="$1"
|
|
CIRRUS_CHANGE_IN_REPO="$2"
|
|
CIRRUS_TAG="$3"
|
|
local exp_status=$4
|
|
local exp_msg=$5
|
|
local msg
|
|
msg=$(is_release)
|
|
local status=$?
|
|
|
|
check_result "$msg" "$exp_msg" "is_release(CIRRUS_BASE_SHA='$1' CIRRUS_CHANGE_IN_REPO='$2' CIRRUS_TAG='$3')"
|
|
check_result "$status" "$exp_status" "is_release(...) returned $status"
|
|
}
|
|
|
|
# FROM TO TAG RET MSG
|
|
test_is_release "" "" "" "9" "FATAL: is_release() requires \$CIRRUS_CHANGE_IN_REPO to be non-empty"
|
|
test_is_release "x" "" "" "9" "FATAL: is_release() requires \$CIRRUS_CHANGE_IN_REPO to be non-empty"
|
|
|
|
# post-merge / tag-push testing, FROM will be set 'unknown' by (lib.sh default)
|
|
test_is_release "unknown" "x" "" "1" ""
|
|
# post-merge / tag-push testing, oddball tag is set, FROM will be set 'unknown'
|
|
test_is_release "unknown" "unknown" "test-tag" "2" "Found \$RELVER test-tag"
|
|
# post-merge / tag-push testing, sane tag is set, FROM will be set 'unknown'
|
|
test_is_release "unknown" "unknown" "0.0.0" "0" "Found \$RELVER 0.0.0"
|
|
# hack/get_ci_vm or PR testing, FROM and TO are set, no tag is set
|
|
test_is_release "x" "x" "" "1" ""
|
|
|
|
# Negative-testing git with this function is very difficult, assume git works
|
|
# test_is_release ... "is_release() failed to fetch tags"
|
|
# test_is_release ... "is_release() failed to parse tags"
|
|
|
|
BF_V1=$(git rev-parse v1.0.0^)
|
|
AT_V1=$(git rev-parse v1.0.0)
|
|
test_is_release "$BF_V1" "$BF_V1" "v9.8.7-dev" "2" "Found \$RELVER v9.8.7-dev"
|
|
test_is_release "$BF_V1" "$AT_V1" "v9.8.7-dev" "2" "Found \$RELVER v9.8.7-dev"
|
|
test_is_release "$BF_V1" "$AT_V1" "" "0" "Found \$RELVER v1.0.0"
|
|
|
|
exit $rc
|