Skip to content

Commit

Permalink
test/other: add test for action-script
Browse files Browse the repository at this point in the history
Signed-off-by: Radostin Stoyanov <[email protected]>
  • Loading branch information
rst0git committed Mar 23, 2023
1 parent 861f106 commit 78e35dc
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 0 deletions.
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,7 @@ lint:
shellcheck -x test/others/libcriu/*.sh
shellcheck -x test/others/crit/*.sh test/others/criu-coredump/*.sh
shellcheck -x test/others/config-file/*.sh
shellcheck -x test/others/action-script/*.sh
codespell -S tags
# Do not append \n to pr_perror or fail
! git --no-pager grep -E '^\s*\<(pr_perror|fail)\>.*\\n"'
Expand Down
3 changes: 3 additions & 0 deletions scripts/ci/run-ci-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,9 @@ make -C test/others/ns_ext run
# config file parser and parameter testing
make -C test/others/config-file run

# action script testing
make -C test/others/action-script run

# Skip all further tests when running with GCOV=1
# The one test which currently cannot handle GCOV testing is compel/test
# Probably because the GCOV Makefile infrastructure does not exist in compel
Expand Down
1 change: 1 addition & 0 deletions test/others/action-script/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
img-dir-*
5 changes: 5 additions & 0 deletions test/others/action-script/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
run:
@make -C .. loop
./run.sh

.PHONY: run
13 changes: 13 additions & 0 deletions test/others/action-script/action-script.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/bash
touch action-hook-"$CRTOOLS_SCRIPT_ACTION"

vars=("E1" "E2" "E3" "E4")

for var in "${vars[@]}"
do
if [ -n "${!var}" ]; then
echo "${!var}" > "action-env-$var"
fi
done

exit 0
74 changes: 74 additions & 0 deletions test/others/action-script/run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#!/bin/bash

set -ebm

# shellcheck source=test/others/env.sh
source ../env.sh || exit 1

SELFDIR="$(dirname "$(readlink -f "$0")")"
SCRIPT="$SELFDIR/action-script.sh"
IMGDIR="$SELFDIR/img-dir-$$"

rm -rf "$IMGDIR"
mkdir "$IMGDIR"

trap "cleanup" QUIT TERM INT HUP EXIT

function cleanup()
{
if [[ -n "$PID" ]]; then
kill -9 "$PID"
fi
}

PID=$(../loop)
if ! $CRIU dump -v4 -o dump.log -t "$PID" -D "$IMGDIR" --action-script "$SCRIPT" --action-env E1=A --action-env E2=B; then
echo "Failed to checkpoint process $PID"
cat dump.log
kill -9 "$PID"
exit 1
fi

if ! $CRIU restore -v4 -o restore.log -D "$IMGDIR" -d --pidfile test.pidfile --action-script "$SCRIPT" --action-env E3=C --action-env E4=D; then
echo "CRIU restore failed"
echo FAIL
exit 1
fi

PID=$(cat "$IMGDIR"/test.pidfile)

found_missing_file=false
hooks=("pre-dump" "post-dump" "pre-restore" "pre-resume" "post-restore" "post-resume")

for hook in "${hooks[@]}"
do
if [ ! -e "$IMGDIR/action-hook-$hook" ]; then
echo "ERROR: action-hook-$hook does not exist"
found_missing_file=true
fi
done

if [ "$found_missing_file" = true ]; then
exit 1
fi

found_mismatch=false
vars=("E1:A" "E2:B" "E3:C" "E4:D")

for var in "${vars[@]}"
do
IFS=':' read -r file expected <<< "$var"
actual=$(< "$IMGDIR/action-env-$file")

if [ "$actual" != "$expected" ]; then
echo "ERROR: action-env-$file does not contain '$expected'."
found_mismatch=true
fi
done

if [ "$found_mismatch" = true ]; then
exit 1
fi

rm -rf "$IMGDIR"
exit 0

0 comments on commit 78e35dc

Please sign in to comment.