52 lines
1.1 KiB
Bash
Executable File
52 lines
1.1 KiB
Bash
Executable File
#!/usr/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
controller=$1
|
|
payload_config=$2
|
|
|
|
bash -n "$controller"
|
|
"$controller" --help | grep -q '^ .* enable \[--rpm PATH\] \[--force\] \[--yes\]$'
|
|
|
|
reject() {
|
|
if "$controller" "$@" >/dev/null 2>&1; then
|
|
printf 'Invalid invocation unexpectedly succeeded: %s\n' "$*" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
reject
|
|
reject unknown-command
|
|
reject status --yes
|
|
reject enable --rpm
|
|
reject enable --unknown
|
|
reject disable --force
|
|
|
|
payload_url=
|
|
payload_sha256=
|
|
# shellcheck source=/dev/null
|
|
source "$payload_config"
|
|
[[ $payload_url == https://*/*.rpm ]]
|
|
[[ $payload_sha256 =~ ^[[:xdigit:]]{64}$ ]]
|
|
|
|
# Load the functions through the harmless help command, then replace DNF with
|
|
# a test function. Never invoke the package manager in this test.
|
|
(
|
|
source "$controller" --help >/dev/null
|
|
dnf5() {
|
|
[[ $(umask) == 0022 && $1 == test-argument ]]
|
|
}
|
|
umask 077
|
|
run_dnf test-argument
|
|
[[ $(umask) == 0077 ]]
|
|
dnf5() { return 23; }
|
|
if run_dnf test-argument; then
|
|
printf 'DNF failure was not propagated.\n' >&2
|
|
exit 1
|
|
else
|
|
[[ $? == 23 ]]
|
|
fi
|
|
)
|
|
|
|
printf 'Controller tests passed.\n'
|