mirror of
https://github.com/xcat2/xcat-core.git
synced 2026-09-25 17:24:07 +00:00
test(xcatdsklspost): cover the /xcatpost cleanup after an updatenode run
The site table has two attributes for the same directory and only one of them is covered: nothing pins what xcatdsklspost appends to mypostscript for site.cleanupdiskfullxcatpost, on the path every updatenode run takes. Drive append_xcatpost_cleanup against a scratch /xcatpost, run the mypostscript it writes, and assert on the directory that comes back: the postscripts are gone after a run that succeeds, updateflag.awk stays, and a run that fails keeps everything. Add refute_grep to the helpers, because a "! grep" line cannot fail a bats test unless it is the last line of one. Three of the six tests fail on this commit. xcatdsklspost reads CLEANUPXCATPOST and never reads CLEANUPDISKFULLXCATPOST. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
This commit is contained in:
@@ -130,3 +130,13 @@ extract_first_matching_line()
|
||||
}
|
||||
' "$file"
|
||||
}
|
||||
|
||||
# grep that fails when the pattern IS present.
|
||||
#
|
||||
# Do not write "! grep ..." for this. bash ignores errexit for a command inverted with "!",
|
||||
# so such a line never fails a test unless it is the last line of one.
|
||||
refute_grep()
|
||||
{
|
||||
! grep "$@"
|
||||
return $?
|
||||
}
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
#!/usr/bin/env bats
|
||||
|
||||
load 'helpers/shell_source'
|
||||
|
||||
setup()
|
||||
{
|
||||
DSKLSPOST="$(repo_path 'xCAT/postscripts/xcatdsklspost')"
|
||||
[ -r "$DSKLSPOST" ] || skip "$DSKLSPOST is required"
|
||||
XCATPOST="${BATS_TEST_TMPDIR}/xcatpost"
|
||||
MYPS="${BATS_TEST_TMPDIR}/mypostscript"
|
||||
MSGLOG="${BATS_TEST_TMPDIR}/msgutil.log"
|
||||
export DSKLSPOST XCATPOST MYPS MSGLOG
|
||||
}
|
||||
|
||||
# A scratch /xcatpost with what an updatenode run downloads into it.
|
||||
make_xcatpost()
|
||||
{
|
||||
mkdir -p "$XCATPOST/_xcat"
|
||||
printf 'updateflag\n' >"$XCATPOST/updateflag.awk"
|
||||
printf 'setroute\n' >"$XCATPOST/setroute"
|
||||
printf 'xcatlib\n' >"$XCATPOST/xcatlib.sh"
|
||||
printf 'credentials\n' >"$XCATPOST/_xcat/postscript.cfg"
|
||||
}
|
||||
|
||||
# A scratch mypostscript that carries the site values and the run result.
|
||||
# $1 is the value of return_value, the rest are the site table lines.
|
||||
make_mypostscript()
|
||||
{
|
||||
local result=$1
|
||||
shift
|
||||
{
|
||||
printf '%s\n' '#!/bin/bash'
|
||||
printf 'msgutil_r() { printf "%%s\\n" "$3" >>"%s"; }\n' "$MSGLOG"
|
||||
printf 'MASTER_IP=192.0.2.1\n'
|
||||
printf 'NODE=node1\n'
|
||||
printf 'log_label=xcat.updatenode\n'
|
||||
printf 'return_value=%s\n' "$result"
|
||||
printf '%s\n' "$@"
|
||||
} >"$MYPS"
|
||||
}
|
||||
|
||||
append_cleanup()
|
||||
{
|
||||
(
|
||||
XCATDSKLSPOST_SOURCE_ONLY=1
|
||||
export XCATDSKLSPOST_SOURCE_ONLY
|
||||
# shellcheck disable=SC1090
|
||||
. "$DSKLSPOST"
|
||||
type -t append_xcatpost_cleanup >/dev/null \
|
||||
|| { echo "xcatdsklspost defines no append_xcatpost_cleanup" >&2; exit 99; }
|
||||
append_xcatpost_cleanup "$MYPS" "$XCATPOST"
|
||||
)
|
||||
}
|
||||
|
||||
@test "an updatenode run that succeeds removes the postscripts when site.cleanupdiskfullxcatpost is set" {
|
||||
make_xcatpost
|
||||
make_mypostscript 0 "CLEANUPXCATPOST='no'" "CLEANUPDISKFULLXCATPOST='yes'"
|
||||
append_cleanup
|
||||
|
||||
run bash "$MYPS"
|
||||
[ "$status" -eq 0 ]
|
||||
[ ! -e "$XCATPOST/setroute" ]
|
||||
[ ! -e "$XCATPOST/xcatlib.sh" ]
|
||||
[ ! -e "$XCATPOST/_xcat" ]
|
||||
}
|
||||
|
||||
@test "the cleanup keeps updateflag.awk so the node can still report its status" {
|
||||
make_xcatpost
|
||||
make_mypostscript 0 "CLEANUPXCATPOST='no'" "CLEANUPDISKFULLXCATPOST='yes'"
|
||||
append_cleanup
|
||||
|
||||
run bash "$MYPS"
|
||||
[ "$status" -eq 0 ]
|
||||
[ -f "$XCATPOST/updateflag.awk" ]
|
||||
[ -d "$XCATPOST" ]
|
||||
grep -q 'cleanup of .* completed' "$MSGLOG"
|
||||
}
|
||||
|
||||
@test "an updatenode run that fails keeps the postscripts for diagnosis" {
|
||||
make_xcatpost
|
||||
make_mypostscript 1 "CLEANUPXCATPOST='no'" "CLEANUPDISKFULLXCATPOST='yes'"
|
||||
append_cleanup
|
||||
|
||||
run bash "$MYPS"
|
||||
[ "$status" -eq 0 ]
|
||||
[ -f "$XCATPOST/setroute" ]
|
||||
[ -f "$XCATPOST/_xcat/postscript.cfg" ]
|
||||
refute_grep -q 'cleanup of .* completed' "$MSGLOG"
|
||||
}
|
||||
|
||||
@test "site.cleanupdiskfullxcatpost accepts the other true values of the site table" {
|
||||
make_xcatpost
|
||||
make_mypostscript 0 "CLEANUPDISKFULLXCATPOST='1'"
|
||||
append_cleanup
|
||||
|
||||
run bash "$MYPS"
|
||||
[ "$status" -eq 0 ]
|
||||
[ ! -e "$XCATPOST/setroute" ]
|
||||
}
|
||||
|
||||
@test "site.cleanupxcatpost removes every file including updateflag.awk" {
|
||||
make_xcatpost
|
||||
make_mypostscript 0 "CLEANUPXCATPOST='yes'" "CLEANUPDISKFULLXCATPOST='no'"
|
||||
append_cleanup
|
||||
|
||||
run bash "$MYPS"
|
||||
[ "$status" -eq 0 ]
|
||||
[ -z "$(ls -A "$XCATPOST")" ]
|
||||
}
|
||||
|
||||
@test "neither setting leaves the downloaded postscripts in place" {
|
||||
make_xcatpost
|
||||
make_mypostscript 0 "CLEANUPXCATPOST='no'" "CLEANUPDISKFULLXCATPOST='no'"
|
||||
append_cleanup
|
||||
|
||||
run bash "$MYPS"
|
||||
[ "$status" -eq 0 ]
|
||||
[ -f "$XCATPOST/setroute" ]
|
||||
[ -f "$XCATPOST/updateflag.awk" ]
|
||||
refute_grep -q -E 'rm -rf|-delete' "$MYPS"
|
||||
}
|
||||
Reference in New Issue
Block a user