Add rudimentary test suite

This commit is contained in:
Marc André Tanner 2014-06-18 14:30:31 +02:00
parent 54c1dbddb2
commit 5a88eee291
1 changed files with 132 additions and 0 deletions

132
testsuite.sh Executable file
View File

@ -0,0 +1,132 @@
#!/bin/bash
ABDUCO="./abduco"
detach() {
sleep 1
printf ""
}
# $1 => session-name, $2 => exit status
expected_abduco_output() {
echo "[?25habduco: $1: session terminated with exit status $2"
}
check_environment() {
[ "`$ABDUCO | wc -l`" -gt 1 ] && echo Abduco session exists && return 1;
pgrep abduco && echo Abduco process exists && return 1;
return 0;
}
test_non_existing_command() {
check_environment || return 1;
$ABDUCO -c test ./non-existing-command &> /dev/null
check_environment || return 1;
}
# $1 => session-name, $2 => command to execute
run_test_attached() {
check_environment || return 1;
local name="$1"
local cmd="$2"
local output="$name.out"
local output_expected="$name.expected"
echo -n "Running test attached: $name "
$cmd &> "$output_expected"
expected_abduco_output "$name" $? >> "$output_expected"
$ABDUCO -c "$name" $cmd 2>&1 | head -n -1 | sed 's/.$//' > "$output"
if diff -u "$output_expected" "$output" && check_environment; then
rm "$output" "$output_expected"
echo "OK"
return 0
else
echo "FAIL"
return 1
fi
}
# $1 => session-name, $2 => command to execute
run_test_detached() {
check_environment || return 1;
local name="$1"
local cmd="$2"
local output="$name.out"
local output_expected="$name.expected"
echo -n "Running test detached: $name "
$cmd &> /dev/null
expected_abduco_output "$name" $? > "$output_expected"
if $ABDUCO -n "$name" $cmd &> /dev/null && sleep 1 &&
$ABDUCO -a "$name" 2>&1 | head -n -1 | sed 's/.$//' > "$output" &&
diff -u "$output_expected" "$output" && check_environment; then
rm "$output" "$output_expected"
echo "OK"
return 0
else
echo "FAIL"
return 1
fi
}
# $1 => session-name, $2 => command to execute
run_test_attached_detached() {
check_environment || return 1;
local name="$1"
local cmd="$2"
local output="$name.out"
local output_expected="$name.expected"
echo -n "Running test: $name "
$cmd &> /dev/null
expected_abduco_output "$name" $? > "$output_expected"
if detach | $ABDUCO -c "$name" $cmd &> /dev/null && sleep 3 &&
$ABDUCO -a "$name" 2>&1 | head -n -1 | tail -1 | sed 's/.$//' > "$output" &&
diff -u "$output_expected" "$output" && check_environment; then
rm "$output" "$output_expected"
echo "OK"
return 0
else
echo "FAIL"
return 1
fi
}
test_non_existing_command || echo "Execution of non existing command FAILED"
run_test_attached "seq" "seq 1 1000"
run_test_detached "seq" "seq 1 1000"
cat > exit-status.sh <<-EOT
#!/bin/sh
echo Hello World
exit 42
EOT
chmod +x exit-status.sh
run_test_attached "exit-status" "./exit-status.sh"
run_test_detached "exit-status" "./exit-status.sh"
rm ./exit-status.sh
cat > long-running.sh <<-EOT
#!/bin/sh
echo Start
date
sleep 3
echo Hello World
sleep 3
echo End
date
exit 1
EOT
chmod +x long-running.sh
run_test_attached_detached "attach-detach" "./long-running.sh"
rm ./long-running.sh