Signed-off-by: Hubert Kario <hkario(a)redhat.com>
---
src/test/synchronisationTest.sh | 238 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 238 insertions(+)
create mode 100644 src/test/synchronisationTest.sh
diff --git a/src/test/synchronisationTest.sh b/src/test/synchronisationTest.sh
new file mode 100644
index 0000000..ddbca1c
--- /dev/null
+++ b/src/test/synchronisationTest.sh
@@ -0,0 +1,238 @@
+#!/bin/bash
+# Copyright (c) 2013 Red Hat, Inc. All rights reserved. This copyrighted material
+# is made available to anyone wishing to use, modify, copy, or
+# redistribute it subject to the terms and conditions of the GNU General
+# Public License v.2.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Author: Hubert Kario <hkario(a)redhat.com>
+
+test_rlWaitForSocketPositive() {
+ local test_dir=$(mktemp -d /tmp/beakerlib-test-XXXXXX)
+
+ (sleep 5; nc -l 12345 > $test_dir/out) &
+ local bg_pid=$!
+
+ silentIfNotDebug "rlWaitForSocket 12345"
+ local ret=$?
+ assertTrue "Check if rlWaitForSocket return 0 when socket is opened"
"[[ $ret -eq 0 ]]"
+
+ silentIfNotDebug "echo 'hello world' | nc localhost 12345"
+
+ kill -s SIGKILL $bg_pid 2>/dev/null 1>&2
+ wait $bg_pid 2>/dev/null 1>&2
+
+ assertTrue "Check if data was transferred" "grep 'hello world'
$test_dir/out"
+
+ rm -rf $test_dir
+}
+
+test_rlWaitForSocketTimeoutReached() {
+ local test_dir=$(mktemp -d /tmp/beakerlib-test-XXXXXX)
+
+ (sleep 10; nc -l 12345 > $test_dir/out) &
+ local bg_pid=$!
+
+ silentIfNotDebug "rlWaitForSocket -t 2 12345"
+ local ret=$?
+ assertTrue "Check if rlWaitForSocket returns 1 on reaching timeout"
"[[ $ret -eq 1 ]]"
+
+ silentIfNotDebug "echo 'hello world' | nc localhost 12345"
+
+ kill -s SIGKILL $bg_pid 2>/dev/null 1>&2
+ wait $bg_pid 2>/dev/null 1>&2
+
+ assertFalse "Check if data was not transferred" "grep 'hello
world' $test_dir/out || false"
+
+ rm -rf $test_dir
+}
+
+test_rlWaitForSocketPIDKilled() {
+ local test_dir=$(mktemp -d /tmp/beakerlib-test-XXXXXX)
+
+ (sleep 10) &
+ local bg_pid=$!
+ (sleep 15; touch $test_dir/mark) &
+ local bg2_pid=$!
+
+ silentIfNotDebug "rlWaitForSocket -p $bg_pid 12345"
+ local ret=$?
+ assertTrue "Check if rlWaitForSocket returns 1 on PID exit" "[[ $ret
-eq 1 ]]"
+
+ kill -s SIGKILL $bg2_pid 2>/dev/null 1>&2
+ wait $bg2_pid 2>/dev/null 1>&2
+
+ assertTrue "Check if rlWaitForSocket returned quickly after PID died"
"[[ ! -e $test_dir/mark ]]"
+
+ silentIfNotDebug "echo 'hello world' | nc localhost 12345"
+
+ kill -s SIGKILL $bg_pid 2>/dev/null 1>&2
+ wait $bg_pid 2>/dev/null 1>&2
+
+ assertFalse "Check if data was not transferred" "grep 'hello
world' $test_dir/out || false"
+
+ rm -rf $test_dir
+}
+
+test_rlWaitForFilePositive() {
+ local test_dir=$(mktemp -d /tmp/beakerlib-test-XXXXXX)
+
+ (sleep 5; touch ${test_dir}/file)&
+ local bg_pid=$!
+ (sleep 10; touch ${test_dir}/mark)&
+ local bg2_pid=$!
+
+ assertTrue "Check if file does not exist" "[[ ! -e $test_dir/file
]]"
+
+ silentIfNotDebug "rlWaitForFile $test_dir/file"
+ local ret=$?
+ assertTrue "Check if rlWaitForFile returned 0" "[[ $ret -eq 0
]]"
+
+ assertTrue "Check if file exists" "[[ -e $test_dir/file ]]"
+
+ kill -s SIGKILL $bg2_pid 2>/dev/null 1>&2
+ wait $bg2_pid 2>/dev/null 1>&2
+
+ assertTrue "Check if rlWaitForFile returned quickly after file was created"
"[[ ! -e $test_dir/mark ]]"
+
+ rm -rf $test_dir
+}
+
+test_rlWaitForFileNegative() {
+ local test_dir=$(mktemp -d /tmp/beakerlib-test-XXXXXX)
+
+ (sleep 5; touch ${test_dir}/file)&
+ local bg_pid=$!
+ (sleep 10; touch ${test_dir}/mark)&
+ local bg2_pid=$!
+
+ assertTrue "Check if file does not exist" "[[ ! -e $test_dir/file
]]"
+
+ silentIfNotDebug "rlWaitForFile -t 2 $test_dir/file"
+ local ret=$?
+ assertTrue "Check if rlWaitForFile returned 1" "[[ $ret -eq 1
]]"
+
+ assertTrue "Check if file does not exists" "[[ ! -e $test_dir/file
]]"
+
+ kill -s SIGKILL $bg_pid 2>/dev/null 1>&2
+ wait $bg_pid 2>/dev/null 1>&2
+ kill -s SIGKILL $bg2_pid 2>/dev/null 1>&2
+ wait $bg2_pid 2>/dev/null 1>&2
+
+ assertTrue "Check if rlWaitForFile returned quickly after file was created"
"[[ ! -e $test_dir/mark ]]"
+
+ rm -rf $test_dir
+}
+
+test_rlWaitForFilePIDKilled() {
+ local test_dir=$(mktemp -d /tmp/beakerlib-test-XXXXXX)
+
+ (sleep 2)&
+ local bg_pid=$!
+ (sleep 5; touch ${test_dir}/mark)&
+ local bg2_pid=$!
+
+ assertTrue "Check if file does not exist" "[[ ! -e $test_dir/file
]]"
+
+ silentIfNotDebug "rlWaitForFile -p $bg_pid $test_dir/file"
+ local ret=$?
+ assertTrue "Check if rlWaitForFile returned 1" "[[ $ret -eq 1
]]"
+
+ assertTrue "Check if file does not exists" "[[ ! -e $test_dir/file
]]"
+
+ kill -s SIGKILL $bg_pid 2>/dev/null 1>&2
+ wait $bg_pid 2>/dev/null 1>&2
+ kill -s SIGKILL $bg2_pid 2>/dev/null 1>&2
+ wait $bg2_pid 2>/dev/null 1>&2
+
+ assertTrue "Check if rlWaitForFile returned quickly after file was created"
"[[ ! -e $test_dir/mark ]]"
+
+ rm -rf $test_dir
+}
+
+test_rlWaitForCmdPositive() {
+ local test_dir=$(mktemp -d /tmp/beakerlib-test-XXXXXX)
+
+ touch ${test_dir}/file
+ (sleep 5; echo mark > ${test_dir}/file)&
+ local bg_pid=$!
+ (sleep 10; touch ${test_dir}/mark)&
+ local bg2_pid=$!
+
+ assertTrue "Check if file exists" "[[ -e $test_dir/file ]]"
+ assertFalse "Check if doesn't contain 'mark' string" "grep
mark $test_dir/file"
+
+ silentIfNotDebug "rlWaitForCmd 'grep mark $test_dir/file'"
+ local ret=$?
+ assertTrue "Check if rlWaitForCmd returned 0" "[[ $ret -eq 0 ]]"
+
+ kill -s SIGKILL $bg2_pid 2>/dev/null 1>&2
+ wait $bg2_pid 2>/dev/null 1>&2
+
+ assertTrue "Check if file contains 'mark' string" "grep mark
$test_dir/file"
+ assertTrue "Check if rlWaitForCmd returned quickly" "[[ ! -e
$test_dir/mark ]]"
+
+ rm -rf $test_dir
+}
+
+test_rlWaitForCmdMaxInvoc() {
+ local test_dir=$(mktemp -d /tmp/beakerlib-test-XXXXXX)
+
+ (sleep 10; echo mark > ${test_dir}/file)&
+ local bg_pid=$!
+ (sleep 15; touch ${test_dir}/mark)&
+ local bg2_pid=$!
+
+ assertTrue "Check if file does not exist" "[[ ! -e $test_dir/file
]]"
+
+ silentIfNotDebug "rlWaitForCmd 'echo line >> $test_dir/counter; grep
mark $test_dir/file 2>/dev/null' -m 4"
+ local ret=$?
+ assertTrue "Check if rlWaitForCmd returned 1" "[[ $ret -eq 1 ]]"
+
+ kill -s SIGKILL $bg2_pid 2>/dev/null 1>&2
+ wait $bg2_pid 2>/dev/null 1>&2
+ kill -s SIGKILL $bg_pid 2>/dev/null 1>&2
+ wait $bg_pid 2>/dev/null 1>&2
+
+ assertTrue "Check if WaitForCmd returned quickly" "[[ ! -e
$test_dir/mark ]]"
+ assertTrue "Check if file does not exist" "[[ ! -e $test_dir/file
]]"
+
+ local lines=$(wc -l < $test_dir/counter)
+ assertTrue "Check if the command was executed 4 times" "[[ $lines -eq
4 ]]"
+
+ rm -rf $test_dir
+}
+
+test_rlWaitForCmdDelay() {
+ local test_dir=$(mktemp -d /tmp/beakerlib-test-XXXXXX)
+
+ (sleep 4; echo mark > ${test_dir}/file)&
+ local bg_pid=$!
+ (sleep 15; touch ${test_dir}/mark)&
+ local bg2_pid=$!
+
+ assertTrue "Check if file does not exist" "[[ ! -e $test_dir/file
]]"
+
+ silentIfNotDebug "rlWaitForCmd 'echo line >> $test_dir/counter; grep
mark $test_dir/file 2>/dev/null' -d 6"
+ local ret=$?
+ assertTrue "Check if rlWaitForCmd returned 0" "[[ $ret -eq 0 ]]"
+
+ kill -s SIGKILL $bg2_pid 2>/dev/null 1>&2
+ wait $bg2_pid 2>/dev/null 1>&2
+
+ assertTrue "Check if WaitForCmd returned quickly" "[[ ! -e
$test_dir/mark ]]"
+ assertTrue "Check if file does exist" "[[ -e $test_dir/file ]]"
+
+ local lines=$(wc -l < $test_dir/counter)
+ assertTrue "Check if the command was executed 2 times" "[[ $lines -eq
2 ]]"
+ # two executions because the command is executed first, then sleep
+
+ rm -rf $test_dir
+}
--
1.8.3.1