PATH="${EVENTSCRIPTS_PATH}:${PATH}"
+export CTDB="ctdb"
+
export EVENTSCRIPTS_TESTS_VAR_DIR="${TEST_VAR_DIR}/unit_eventscripts"
if [ -d "$EVENTSCRIPTS_TESTS_VAR_DIR" -a \
"$EVENTSCRIPTS_TESTS_VAR_DIR" != "/unit_eventscripts" ] ; then
export FAKE_TDB_IS_OK
export FAKE_DATE_OUTPUT
- export FAKE_NETSTAT_TCP_ESTABLISHED FAKE_TCP_LISTEN FAKE_NETSTAT_UNIX_LISTEN
- export FAKE_NETSTAT_TCP_ESTABLISHED_FILE=$(mktemp --tmpdir="$EVENTSCRIPTS_TESTS_VAR_DIR")
+ export FAKE_TCP_LISTEN FAKE_NETSTAT_UNIX_LISTEN
}
tcp_port_down ()
done
}
+_tcp_connections ()
+{
+ _count="$1"
+ _sip="$2"
+ _sport="$3"
+ _cip_base="$4"
+ _cport_base="$5"
+
+ _cip_prefix="${_cip_base%.*}"
+ _cip_suffix="${_cip_base##*.}"
+
+ for _i in $(seq 1 $_count) ; do
+ _cip_last=$((_cip_suffix + _i))
+ _cip="${_cip_prefix}.${_cip_last}"
+ _cport=$((_cport_base + _i))
+ echo "${_sip}:${_sport} ${_cip}:${_cport}"
+ done
+}
+
+setup_tcp_connections ()
+{
+ _t==$(mktemp --tmpdir="$EVENTSCRIPTS_TESTS_VAR_DIR")
+ export FAKE_NETSTAT_TCP_ESTABLISHED_FILE"$_t"
+ _tcp_connections "$@" >"$FAKE_NETSTAT_TCP_ESTABLISHED_FILE"
+}
+
+setup_tcp_connections_unkillable ()
+{
+ # These connections are listed by the "ss" stub but are not
+ # killed by the "ctdb killtcp" stub. So killing these
+ # connections will never succeed... and will look like a time
+ # out.
+ _t=$(_tcp_connections "$@" | sed -e 's/ /|/g')
+ export FAKE_NETSTAT_TCP_ESTABLISHED="$_t"
+}
+
shares_missing ()
{
_fmt="$1" ; shift
if [ "$1" != "down" ] ; then
debug "Marking Samba services as up, listening and managed by CTDB"
- # Get into known state.
- eventscript_call ctdb_service_managed
# All possible service names for all known distros.
- for i in "smb" "nmb" "samba" ; do
+ for i in "smb" "nmb" "samba" "smbd" "nmbd" ; do
service "$i" force-started
done
export FAKE_SLEEP_FORCE=0.1
else
debug "Marking Samba services as down, not listening and not managed by CTDB"
- # Get into known state.
- eventscript_call ctdb_service_unmanaged
# All possible service names for all known distros.
- for i in "smb" "nmb" "samba" ; do
+ for i in "smb" "nmb" "samba" "smbd" "nmbd" ; do
service "$i" force-stopped
done
fi
}
+samba_setup_fake_threads ()
+{
+ export FAKE_SMBD_THREAD_PIDS="$*"
+
+ _nl="
+"
+ _out=""
+ _count=0
+ for _pid ; do
+ [ "$_count" -lt 5 ] || break
+ _t=$(program_stack_trace "smbd" $_pid)
+ _out="${_out:+${_out}${_nl}}${_t}"
+ _count=$((_count + 1))
+ done
+ SAMBA_STACK_TRACES="$_out"
+}
+
setup_winbind ()
{
setup_ctdb
if [ "$1" != "down" ] ; then
debug "Marking Winbind service as up and managed by CTDB"
- # Get into known state.
- eventscript_call ctdb_service_managed
service "winbind" force-started
else
debug "Marking Winbind service as down and not managed by CTDB"
- # Get into known state.
- eventscript_call ctdb_service_unmanaged
service "winbind" force-stopped
if [ "$1" != "down" ] ; then
debug "Setting up NFS environment: all RPC services up, NFS managed by CTDB"
- eventscript_call ctdb_service_managed
service "nfs" force-started
service "nfslock" force-started
else
debug "Setting up NFS environment: all RPC services down, NFS not managed by CTDB"
- eventscript_call ctdb_service_unmanaged
service "nfs" force-stopped
service "nfslock" force-stopped
esac
}
+program_stack_trace ()
+{
+ _prog="$1"
+ _pid="$2"
+
+ cat <<EOF
+Stack trace for ${_prog}[${_pid}]:
+[<ffffffff87654321>] fake_stack_trace_for_pid_${_pid}/stack+0x0/0xff
+EOF
+}
+
program_stack_traces ()
{
_prog="$1"
for _pid in ${FAKE_NFSD_THREAD_PIDS:-$FAKE_RPC_THREAD_PIDS} ; do
[ $_count -le $_max ] || break
- cat <<EOF
-Stack trace for ${_prog}[${_pid}]:
-[<ffffffff87654321>] fake_stack_trace_for_pid_${_pid}/stack+0x0/0xff
-EOF
+ program_stack_trace "$_prog" "$_pid"
_count=$(($_count + 1))
done
}
echo 0 >"$_rc_file"
fi
- if [ $restart_every -gt 0 -a $(($_numfails % $restart_every)) -eq 0 ] ; then
+ if [ $restart_every -gt 0 ] && \
+ [ $(($_numfails % $restart_every)) -eq 0 ] ; then
if ! $_unhealthy ; then
echo "WARNING: ${_rpc_check_out}" >>"$_out"
fi
######################################################################
+# Recovery lock fakery
+
+cleanup_reclock ()
+{
+ _pattern="${script_dir}/${script}"
+ while pgrep -f "$_pattern" >/dev/null ; do
+ echo "Waiting for backgrounded ${script} to exit..."
+ (FAKE_SLEEP_REALLY=yes sleep 1)
+ done
+}
+
+setup_reclock ()
+{
+ CTDB_RECOVERY_LOCK=$(mktemp --tmpdir="$EVENTSCRIPTS_TESTS_VAR_DIR")
+ export CTDB_RECOVERY_LOCK
+
+ test_cleanup cleanup_reclock
+}
+
+######################################################################
+
# VSFTPD fakery
setup_vsftpd ()
else
debug "Setting up VSFTPD environment: service down, not managed by CTDB"
- eventscript_call ctdb_service_unmanaged
service vsftpd force-stopped
export CTDB_MANAGED_SERVICES="foo"
debug "Setting up HTTPD environment: service down, not managed by CTDB"
for service_name in "apache2" "httpd" ; do
- eventscript_call ctdb_service_unmanaged
service "$service_name" force-stopped
done