mirror of
https://github.com/samba-team/samba.git
synced 2025-03-11 16:58:40 +03:00
ctdb-tests: Reformat with "shfmt -w -p -i 0 -fn"
Best reviewed with "git show -w". Signed-off-by: Martin Schwenke <mschwenke@ddn.com> Reviewed-by: Andreas Schneider <asn@samba.org>
This commit is contained in:
parent
7813c979ed
commit
cbda1a78dc
@ -1,4 +1,4 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
setup_dbdir
|
||||
setup_date
|
||||
@ -15,7 +15,7 @@ setup ()
|
||||
"
|
||||
}
|
||||
|
||||
result_filter ()
|
||||
result_filter()
|
||||
{
|
||||
_date="[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"
|
||||
_time="[0-9][0-9][0-9][0-9][0-9][0-9]"
|
||||
|
@ -1,13 +1,13 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
if [ $# -eq 1 ] ; then
|
||||
if [ $# -eq 1 ]; then
|
||||
reclock="$1"
|
||||
else
|
||||
reclock="${CTDB_TEST_TMP_DIR}/reclock_subdir/rec.lock"
|
||||
fi
|
||||
CTDB_RECOVERY_LOCK="$reclock"
|
||||
|
||||
if [ -n "$CTDB_RECOVERY_LOCK" ] ; then
|
||||
if [ -n "$CTDB_RECOVERY_LOCK" ]; then
|
||||
cat >>"${CTDB_BASE}/ctdb.conf" <<EOF
|
||||
[cluster]
|
||||
recovery lock = $CTDB_RECOVERY_LOCK
|
||||
|
@ -1,16 +1,16 @@
|
||||
set_mem_usage ()
|
||||
set_mem_usage()
|
||||
{
|
||||
_mem_usage="${1:-10}" # Default is 10%
|
||||
_swap_usage="${2:-0}" # Default is 0%
|
||||
|
||||
_swap_total=5857276
|
||||
_swap_free=$(( (100 - $_swap_usage) * $_swap_total / 100 ))
|
||||
_swap_free=$(((100 - $_swap_usage) * $_swap_total / 100))
|
||||
|
||||
_mem_total=3940712
|
||||
_mem_free=225268
|
||||
_mem_buffers=146120
|
||||
_mem_cached=$(( $_mem_total * (100 - $_mem_usage) / 100 -
|
||||
$_mem_free - $_mem_buffers ))
|
||||
_mem_cached=$(($_mem_total * (100 - $_mem_usage) / 100 - \
|
||||
$_mem_free - $_mem_buffers))
|
||||
|
||||
export FAKE_PROC_MEMINFO="\
|
||||
MemTotal: ${_mem_total} kB
|
||||
@ -31,12 +31,12 @@ SwapFree: ${_swap_free} kB
|
||||
..."
|
||||
}
|
||||
|
||||
set_fs_usage ()
|
||||
set_fs_usage()
|
||||
{
|
||||
export FAKE_FS_USE="${1:-10}" # Default is 10% usage
|
||||
export FAKE_FS_USE="${1:-10}" # Default is 10% usage
|
||||
}
|
||||
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
setup_dbdir
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
:
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
setup_public_addresses
|
||||
}
|
||||
|
||||
_tcp_connections ()
|
||||
_tcp_connections()
|
||||
{
|
||||
_count="$1"
|
||||
_sip="$2"
|
||||
@ -14,7 +14,7 @@ _tcp_connections ()
|
||||
_cip_prefix="${_cip_base%.*}"
|
||||
_cip_suffix="${_cip_base##*.}"
|
||||
|
||||
for _i in $(seq 1 $_count) ; do
|
||||
for _i in $(seq 1 $_count); do
|
||||
_cip_last=$((_cip_suffix + _i))
|
||||
_cip="${_cip_prefix}.${_cip_last}"
|
||||
_cport=$((_cport_base + _i))
|
||||
@ -22,14 +22,14 @@ _tcp_connections ()
|
||||
done
|
||||
}
|
||||
|
||||
setup_tcp_connections ()
|
||||
setup_tcp_connections()
|
||||
{
|
||||
_t="${FAKE_NETWORK_STATE}/tcp-established"
|
||||
export FAKE_NETSTAT_TCP_ESTABLISHED_FILE="$_t"
|
||||
_tcp_connections "$@" >"$FAKE_NETSTAT_TCP_ESTABLISHED_FILE"
|
||||
}
|
||||
|
||||
setup_tcp_connections_unkillable ()
|
||||
setup_tcp_connections_unkillable()
|
||||
{
|
||||
# These connections are listed by the "ss" stub but are not
|
||||
# killed by the "ctdb killtcp" stub. So killing these
|
||||
@ -44,7 +44,7 @@ setup_tcp_connections_unkillable ()
|
||||
|
||||
# arg1 is interface name, arg2 is currently active slave (use "None"
|
||||
# if none), arg3 is MII status ("up" or "down").
|
||||
setup_bond ()
|
||||
setup_bond()
|
||||
{
|
||||
_iface="$1"
|
||||
_slave="${2:-${_iface}_sl_0}"
|
||||
|
@ -1,4 +1,4 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
debug "Setting up NAT gateway"
|
||||
|
||||
@ -9,10 +9,10 @@ setup ()
|
||||
|
||||
# A separate function for this makes sense because it can be done
|
||||
# multiple times per test
|
||||
setup_ctdb_natgw ()
|
||||
setup_ctdb_natgw()
|
||||
{
|
||||
# Read from stdin
|
||||
while read _ip _opts ; do
|
||||
while read _ip _opts; do
|
||||
case "$_opts" in
|
||||
leader)
|
||||
export FAKE_CTDB_NATGW_LEADER="$_ip"
|
||||
@ -43,11 +43,11 @@ CTDB_NATGW_DEFAULT_GATEWAY="10.1.1.254"
|
||||
EOF
|
||||
}
|
||||
|
||||
ok_natgw_leader_ip_addr_show ()
|
||||
ok_natgw_leader_ip_addr_show()
|
||||
{
|
||||
_mac=$(echo "$CTDB_NATGW_PUBLIC_IFACE" |
|
||||
cksum |
|
||||
sed -r -e 's@(..)(..)(..).*@fe:fe:fe:\1:\2:\3@')
|
||||
cksum |
|
||||
sed -r -e 's@(..)(..)(..).*@fe:fe:fe:\1:\2:\3@')
|
||||
|
||||
# This is based on CTDB_NATGW_PUBLIC_IP
|
||||
_brd="10.1.1.255"
|
||||
@ -60,11 +60,11 @@ ok_natgw_leader_ip_addr_show ()
|
||||
EOF
|
||||
}
|
||||
|
||||
ok_natgw_follower_ip_addr_show ()
|
||||
ok_natgw_follower_ip_addr_show()
|
||||
{
|
||||
_mac=$(echo "$CTDB_NATGW_PUBLIC_IFACE" |
|
||||
cksum |
|
||||
sed -r -e 's@(..)(..)(..).*@fe:fe:fe:\1:\2:\3@')
|
||||
cksum |
|
||||
sed -r -e 's@(..)(..)(..).*@fe:fe:fe:\1:\2:\3@')
|
||||
|
||||
ok <<EOF
|
||||
1: ${CTDB_NATGW_PUBLIC_IFACE}: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
|
||||
@ -72,12 +72,12 @@ ok_natgw_follower_ip_addr_show ()
|
||||
EOF
|
||||
}
|
||||
|
||||
ok_natgw_leader_static_routes ()
|
||||
ok_natgw_leader_static_routes()
|
||||
{
|
||||
_nl="
|
||||
"
|
||||
_t=""
|
||||
for _i in $CTDB_NATGW_STATIC_ROUTES ; do
|
||||
for _i in $CTDB_NATGW_STATIC_ROUTES; do
|
||||
# This is intentionally different to the code in 11.natgw ;-)
|
||||
case "$_i" in
|
||||
*@*)
|
||||
@ -87,6 +87,7 @@ ok_natgw_leader_static_routes ()
|
||||
*)
|
||||
_net="$_i"
|
||||
_gw="$CTDB_NATGW_DEFAULT_GATEWAY"
|
||||
;;
|
||||
esac
|
||||
|
||||
[ -n "$_gw" ] || continue
|
||||
@ -97,12 +98,12 @@ ok_natgw_leader_static_routes ()
|
||||
ok "$_t"
|
||||
}
|
||||
|
||||
ok_natgw_follower_static_routes ()
|
||||
ok_natgw_follower_static_routes()
|
||||
{
|
||||
_nl="
|
||||
"
|
||||
_t=""
|
||||
for _i in $CTDB_NATGW_STATIC_ROUTES ; do
|
||||
for _i in $CTDB_NATGW_STATIC_ROUTES; do
|
||||
# This is intentionally different to the code in 11.natgw ;-)
|
||||
_net=$(echo "$_i" | sed -e 's|@.*||')
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
setup_public_addresses
|
||||
|
||||
@ -18,25 +18,28 @@ EOF
|
||||
# Create policy routing configuration in $CTDB_PER_IP_ROUTING_CONF.
|
||||
# $1 is the number of assigned IPs to use (<num>, all), defaulting to
|
||||
# 1. If $2 is "default" then a default route is also added.
|
||||
create_policy_routing_config ()
|
||||
create_policy_routing_config()
|
||||
{
|
||||
_num_ips="${1:-1}"
|
||||
_should_add_default="$2"
|
||||
|
||||
ctdb_get_my_public_addresses |
|
||||
if [ "$_num_ips" = "all" ] ; then
|
||||
cat
|
||||
else
|
||||
{ head -n "$_num_ips" ; cat >/dev/null ; }
|
||||
fi |
|
||||
while read _dev _ip _bits ; do
|
||||
_net=$(ipv4_host_addr_to_net "$_ip" "$_bits")
|
||||
_gw="${_net%.*}.254" # a dumb, calculated default
|
||||
if [ "$_num_ips" = "all" ]; then
|
||||
cat
|
||||
else
|
||||
{
|
||||
head -n "$_num_ips"
|
||||
cat >/dev/null
|
||||
}
|
||||
fi |
|
||||
while read _dev _ip _bits; do
|
||||
_net=$(ipv4_host_addr_to_net "$_ip" "$_bits")
|
||||
_gw="${_net%.*}.254" # a dumb, calculated default
|
||||
|
||||
echo "$_ip $_net"
|
||||
echo "$_ip $_net"
|
||||
|
||||
if [ "$_should_add_default" = "default" ] ; then
|
||||
echo "$_ip 0.0.0.0/0 $_gw"
|
||||
fi
|
||||
done >"$CTDB_PER_IP_ROUTING_CONF"
|
||||
if [ "$_should_add_default" = "default" ]; then
|
||||
echo "$_ip 0.0.0.0/0 $_gw"
|
||||
fi
|
||||
done >"$CTDB_PER_IP_ROUTING_CONF"
|
||||
}
|
||||
|
@ -1,16 +1,17 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
_failures=""
|
||||
_devices=""
|
||||
for i ; do
|
||||
for i; do
|
||||
case "$i" in
|
||||
\!*)
|
||||
_t="${i#!}"
|
||||
echo "Marking ${_t} as having no active paths"
|
||||
_failures="${_failures}${_failures:+ }${_t}"
|
||||
;;
|
||||
;;
|
||||
*)
|
||||
_t="$i"
|
||||
;;
|
||||
esac
|
||||
_devices="${_devices}${_devices:+ }${_t}"
|
||||
done
|
||||
|
@ -1,4 +1,4 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
setup_script_options <<EOF
|
||||
CTDB_CLAMD_SOCKET="/var/run/clamd.sock"
|
||||
|
@ -1,10 +1,10 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
debug "Setting up VSFTPD environment: service $1, not managed by CTDB"
|
||||
|
||||
_service_name="vsftpd"
|
||||
|
||||
if [ "$1" != "down" ] ; then
|
||||
if [ "$1" != "down" ]; then
|
||||
service "$_service_name" start
|
||||
else
|
||||
service "$_service_name" force-stopped
|
||||
|
@ -1,13 +1,13 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
debug "Setting up HTTPD environment: service $1, not managed by CTDB"
|
||||
|
||||
if [ "$1" != "down" ] ; then
|
||||
for _service_name in "apache2" "httpd" ; do
|
||||
if [ "$1" != "down" ]; then
|
||||
for _service_name in "apache2" "httpd"; do
|
||||
service "$_service_name" start
|
||||
done
|
||||
else
|
||||
for _service_name in "apache2" "httpd" ; do
|
||||
for _service_name in "apache2" "httpd"; do
|
||||
service "$_service_name" force-stopped
|
||||
done
|
||||
fi
|
||||
|
@ -1,20 +1,20 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
service_name="netbios"
|
||||
|
||||
if [ "$1" != "down" ] ; then
|
||||
if [ "$1" != "down" ]; then
|
||||
|
||||
debug "Marking Netbios name services as up, listening and managed by CTDB"
|
||||
|
||||
# All possible service names for all known distros.
|
||||
for i in "nmb" "nmbd" ; do
|
||||
for i in "nmb" "nmbd"; do
|
||||
service "$i" force-started
|
||||
done
|
||||
else
|
||||
debug "Marking Netbios name services as down, not listening and not managed by CTDB"
|
||||
|
||||
# All possible service names for all known distros.
|
||||
for i in "nmb" "nmbd" ; do
|
||||
for i in "nmb" "nmbd"; do
|
||||
service "$i" force-stopped
|
||||
done
|
||||
fi
|
||||
|
@ -1,8 +1,8 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
service_name="winbind"
|
||||
|
||||
if [ "$1" != "down" ] ; then
|
||||
if [ "$1" != "down" ]; then
|
||||
|
||||
debug "Marking Winbind service as up and managed by CTDB"
|
||||
|
||||
@ -19,7 +19,7 @@ setup ()
|
||||
fi
|
||||
}
|
||||
|
||||
wbinfo_down ()
|
||||
wbinfo_down()
|
||||
{
|
||||
debug "Making wbinfo commands fail"
|
||||
FAKE_WBINFO_FAIL="yes"
|
||||
|
@ -1,13 +1,13 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
service_name="samba"
|
||||
|
||||
if [ "$1" != "down" ] ; then
|
||||
if [ "$1" != "down" ]; then
|
||||
|
||||
debug "Marking Samba services as up, listening and managed by CTDB"
|
||||
|
||||
# All possible service names for all known distros.
|
||||
for i in "smb" "samba" "smbd" ; do
|
||||
for i in "smb" "samba" "smbd"; do
|
||||
service "$i" force-started
|
||||
done
|
||||
|
||||
@ -21,7 +21,7 @@ setup ()
|
||||
debug "Marking Samba services as down, not listening and not managed by CTDB"
|
||||
|
||||
# All possible service names for all known distros.
|
||||
for i in "smb" "samba" "smbd" ; do
|
||||
for i in "smb" "samba" "smbd"; do
|
||||
service "$i" force-stopped
|
||||
done
|
||||
|
||||
@ -36,7 +36,7 @@ EOF
|
||||
|
||||
}
|
||||
|
||||
samba_setup_fake_threads ()
|
||||
samba_setup_fake_threads()
|
||||
{
|
||||
export FAKE_SMBD_THREAD_PIDS="$*"
|
||||
|
||||
@ -44,7 +44,7 @@ samba_setup_fake_threads ()
|
||||
"
|
||||
_out=""
|
||||
_count=0
|
||||
for _pid ; do
|
||||
for _pid; do
|
||||
[ "$_count" -lt 5 ] || break
|
||||
_t=$(program_stack_trace "smbd" $_pid)
|
||||
_out="${_out:+${_out}${_nl}}${_t}"
|
||||
|
@ -1,11 +1,11 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
setup_public_addresses
|
||||
setup_shares
|
||||
|
||||
service_name="nfs"
|
||||
|
||||
if [ -z "$CTDB_NFS_DISTRO_STYLE" ] ; then
|
||||
if [ -z "$CTDB_NFS_DISTRO_STYLE" ]; then
|
||||
# Currently supported: sysvinit-redhat, systemd-redhat
|
||||
CTDB_NFS_DISTRO_STYLE="systemd-redhat"
|
||||
fi
|
||||
@ -20,7 +20,7 @@ EOF
|
||||
|
||||
export RPCNFSDCOUNT
|
||||
|
||||
if [ "$1" != "down" ] ; then
|
||||
if [ "$1" != "down" ]; then
|
||||
debug <<EOF
|
||||
Setting up NFS environment: all RPC services up, NFS managed by CTDB
|
||||
EOF
|
||||
@ -43,7 +43,7 @@ EOF
|
||||
"nlockmgr" "status"
|
||||
|
||||
nfs_setup_fake_threads "nfsd"
|
||||
nfs_setup_fake_threads "rpc.foobar" # Set the variable to empty
|
||||
nfs_setup_fake_threads "rpc.foobar" # Set the variable to empty
|
||||
else
|
||||
debug <<EOF
|
||||
Setting up NFS environment: all RPC services down, NFS not managed by CTDB
|
||||
@ -72,14 +72,14 @@ EOF
|
||||
rm "${CTDB_BASE}/statd-callout"
|
||||
}
|
||||
|
||||
rpc_services_down ()
|
||||
rpc_services_down()
|
||||
{
|
||||
_out=""
|
||||
for _s in $FAKE_RPCINFO_SERVICES ; do
|
||||
for _i ; do
|
||||
if [ "$_i" = "${_s%%:*}" ] ; then
|
||||
debug "Marking RPC service \"${_i}\" as UNAVAILABLE"
|
||||
continue 2
|
||||
for _s in $FAKE_RPCINFO_SERVICES; do
|
||||
for _i; do
|
||||
if [ "$_i" = "${_s%%:*}" ]; then
|
||||
debug "Marking RPC service \"${_i}\" as UNAVAILABLE"
|
||||
continue 2
|
||||
fi
|
||||
done
|
||||
_out="${_out}${_out:+ }${_s}"
|
||||
@ -87,18 +87,18 @@ rpc_services_down ()
|
||||
FAKE_RPCINFO_SERVICES="$_out"
|
||||
}
|
||||
|
||||
rpc_services_up ()
|
||||
rpc_services_up()
|
||||
{
|
||||
_out="$FAKE_RPCINFO_SERVICES"
|
||||
for _i ; do
|
||||
for _i; do
|
||||
debug "Marking RPC service \"${_i}\" as available"
|
||||
case "$_i" in
|
||||
portmapper) _t="2:4" ;;
|
||||
nfs) _t="2:3" ;;
|
||||
mountd) _t="1:3" ;;
|
||||
rquotad) _t="1:2" ;;
|
||||
nlockmgr) _t="3:4" ;;
|
||||
status) _t="1:1" ;;
|
||||
nfs) _t="2:3" ;;
|
||||
mountd) _t="1:3" ;;
|
||||
rquotad) _t="1:2" ;;
|
||||
nlockmgr) _t="3:4" ;;
|
||||
status) _t="1:1" ;;
|
||||
*) die "Internal error - unsupported RPC service \"${_i}\"" ;;
|
||||
esac
|
||||
|
||||
@ -107,9 +107,10 @@ rpc_services_up ()
|
||||
export FAKE_RPCINFO_SERVICES="$_out"
|
||||
}
|
||||
|
||||
nfs_setup_fake_threads ()
|
||||
nfs_setup_fake_threads()
|
||||
{
|
||||
_prog="$1" ; shift
|
||||
_prog="$1"
|
||||
shift
|
||||
|
||||
case "$_prog" in
|
||||
nfsd)
|
||||
@ -125,7 +126,7 @@ nfs_setup_fake_threads ()
|
||||
esac
|
||||
}
|
||||
|
||||
guess_output ()
|
||||
guess_output()
|
||||
{
|
||||
case "$1" in
|
||||
$CTDB_NFS_CALLOUT\ start\ nlockmgr)
|
||||
@ -226,6 +227,7 @@ EOF
|
||||
;;
|
||||
*)
|
||||
: # Nothing
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
@ -237,14 +239,14 @@ EOF
|
||||
# if it is incomplete and hacky. So, if the 60.nfs eventscript
|
||||
# changes and the tests start to fail then it may be due to this
|
||||
# function being incomplete.
|
||||
rpc_set_service_failure_response ()
|
||||
rpc_set_service_failure_response()
|
||||
{
|
||||
_rpc_service="$1"
|
||||
_numfails="${2:-1}" # default 1
|
||||
|
||||
# Default
|
||||
ok_null
|
||||
if [ $_numfails -eq 0 ] ; then
|
||||
if [ $_numfails -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
@ -257,7 +259,7 @@ rpc_set_service_failure_response ()
|
||||
_dir="${CTDB_NFS_CHECKS_DIR:-${CTDB_BASE}/nfs-checks.d}"
|
||||
|
||||
_file=$(ls "$_dir"/[0-9][0-9]."${_rpc_service}.check")
|
||||
[ -r "$_file" ] || \
|
||||
[ -r "$_file" ] ||
|
||||
die "RPC check file \"$_file\" does not exist or is not unique"
|
||||
|
||||
_out="${CTDB_TEST_TMP_DIR}/rpc_failure_output"
|
||||
@ -283,12 +285,12 @@ rpc_set_service_failure_response ()
|
||||
# Just use the first version, or use default. This is
|
||||
# dumb but handles all the cases that we care about
|
||||
# now...
|
||||
if [ -n "$version" ] ; then
|
||||
if [ -n "$version" ]; then
|
||||
_ver="${version%% *}"
|
||||
else
|
||||
case "$_rpc_service" in
|
||||
portmapper) _ver="" ;;
|
||||
*) _ver=1 ;;
|
||||
*) _ver=1 ;;
|
||||
esac
|
||||
fi
|
||||
_rpc_check_out="\
|
||||
@ -297,7 +299,7 @@ rpcinfo: RPC: Program not registered
|
||||
program $_rpc_service${_ver:+ version }${_ver} is not available"
|
||||
|
||||
if [ $unhealthy_after -gt 0 -a \
|
||||
$_numfails -ge $unhealthy_after ] ; then
|
||||
$_numfails -ge $unhealthy_after ]; then
|
||||
_unhealthy=true
|
||||
echo 1 >"$_rc_file"
|
||||
echo "ERROR: ${_rpc_check_out}" >>"$_out"
|
||||
@ -306,18 +308,18 @@ program $_rpc_service${_ver:+ version }${_ver} is not available"
|
||||
echo 0 >"$_rc_file"
|
||||
fi
|
||||
|
||||
if [ $restart_every -gt 0 ] && \
|
||||
[ $(($_numfails % $restart_every)) -eq 0 ] ; then
|
||||
if ! $_unhealthy ; then
|
||||
if [ $restart_every -gt 0 ] &&
|
||||
[ $(($_numfails % $restart_every)) -eq 0 ]; then
|
||||
if ! $_unhealthy; then
|
||||
echo "WARNING: ${_rpc_check_out}" >>"$_out"
|
||||
fi
|
||||
|
||||
echo "Trying to restart service \"${_rpc_service}\"..."\
|
||||
>>"$_out"
|
||||
echo "Trying to restart service \"${_rpc_service}\"..." \
|
||||
>>"$_out"
|
||||
|
||||
guess_output "$service_stop_cmd" >>"$_out"
|
||||
|
||||
if [ -n "$service_debug_cmd" ] ; then
|
||||
if [ -n "$service_debug_cmd" ]; then
|
||||
$service_debug_cmd 2>&1 >>"$_out"
|
||||
fi
|
||||
|
||||
@ -331,18 +333,18 @@ program $_rpc_service${_ver:+ version }${_ver} is not available"
|
||||
rm -f "$_out" "$_rc_file"
|
||||
}
|
||||
|
||||
program_stack_traces ()
|
||||
program_stack_traces()
|
||||
{
|
||||
_prog="$1"
|
||||
_max="${2:-1}"
|
||||
|
||||
_count=1
|
||||
if [ "$_prog" = "nfsd" ] ; then
|
||||
if [ "$_prog" = "nfsd" ]; then
|
||||
_pids="$FAKE_NFSD_THREAD_PIDS"
|
||||
else
|
||||
_pids="$FAKE_RPC_THREAD_PIDS"
|
||||
fi
|
||||
for _pid in $_pids ; do
|
||||
for _pid in $_pids; do
|
||||
[ $_count -le $_max ] || break
|
||||
|
||||
program_stack_trace "$_prog" "$_pid"
|
||||
@ -373,11 +375,11 @@ program_stack_traces ()
|
||||
# These arguments can allow a service to be started or stopped
|
||||
# before a particular iteration.
|
||||
#
|
||||
nfs_iterate_test ()
|
||||
nfs_iterate_test()
|
||||
{
|
||||
_repeats="$1"
|
||||
_rpc_service="$2"
|
||||
if [ -n "$2" ] ; then
|
||||
if [ -n "$2" ]; then
|
||||
shift 2
|
||||
else
|
||||
shift
|
||||
@ -386,10 +388,10 @@ nfs_iterate_test ()
|
||||
echo "Running $_repeats iterations of \"$script $event\" $args"
|
||||
|
||||
_iterate_failcount=0
|
||||
for _iteration in $(seq 1 $_repeats) ; do
|
||||
for _iteration in $(seq 1 $_repeats); do
|
||||
# This is not a numerical comparison because $1 will
|
||||
# often not be set.
|
||||
if [ "$_iteration" = "$1" ] ; then
|
||||
if [ "$_iteration" = "$1" ]; then
|
||||
debug <<EOF
|
||||
##################################################
|
||||
EOF
|
||||
@ -399,20 +401,20 @@ EOF
|
||||
EOF
|
||||
shift 2
|
||||
fi
|
||||
if [ -n "$_rpc_service" ] ; then
|
||||
if [ -n "$_rpc_service" ]; then
|
||||
_ok=false
|
||||
if [ -n "$service_check_cmd" ] ; then
|
||||
if eval "$service_check_cmd" ; then
|
||||
if [ -n "$service_check_cmd" ]; then
|
||||
if eval "$service_check_cmd"; then
|
||||
_ok=true
|
||||
fi
|
||||
else
|
||||
if rpcinfo -T tcp localhost "$_rpc_service" \
|
||||
>/dev/null 2>&1 ; then
|
||||
>/dev/null 2>&1; then
|
||||
_ok=true
|
||||
fi
|
||||
fi
|
||||
|
||||
if $_ok ; then
|
||||
if $_ok; then
|
||||
_iterate_failcount=0
|
||||
else
|
||||
_iterate_failcount=$(($_iterate_failcount + 1))
|
||||
@ -422,14 +424,14 @@ EOF
|
||||
fi
|
||||
_out=$(simple_test 2>&1)
|
||||
_ret=$?
|
||||
if "$CTDB_TEST_VERBOSE" || [ $_ret -ne 0 ] ; then
|
||||
if "$CTDB_TEST_VERBOSE" || [ $_ret -ne 0 ]; then
|
||||
cat <<EOF
|
||||
##################################################
|
||||
Iteration ${_iteration}:
|
||||
$_out
|
||||
EOF
|
||||
fi
|
||||
if [ $_ret -ne 0 ] ; then
|
||||
if [ $_ret -ne 0 ]; then
|
||||
exit $_ret
|
||||
fi
|
||||
done
|
||||
|
@ -1,4 +1,4 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
_ip="$1"
|
||||
_iface="$2"
|
||||
@ -21,7 +21,7 @@ EOF
|
||||
|
||||
# Read from stdin
|
||||
_pnn=0
|
||||
while read _ip _opts ; do
|
||||
while read _ip _opts; do
|
||||
case "$_opts" in
|
||||
leader)
|
||||
FAKE_CTDB_LVS_LEADER="$_pnn"
|
||||
@ -38,9 +38,9 @@ EOF
|
||||
done >"$CTDB_LVS_NODES"
|
||||
}
|
||||
|
||||
check_ipvsadm ()
|
||||
check_ipvsadm()
|
||||
{
|
||||
if [ "$1" = "NULL" ] ; then
|
||||
if [ "$1" = "NULL" ]; then
|
||||
required_result 0 <<EOF
|
||||
$lvs_header
|
||||
EOF
|
||||
@ -54,11 +54,11 @@ EOF
|
||||
simple_test_command ipvsadm -l -n
|
||||
}
|
||||
|
||||
check_lvs_ip ()
|
||||
check_lvs_ip()
|
||||
{
|
||||
_scope="$1"
|
||||
|
||||
if [ "$_scope" = "NULL" ] ; then
|
||||
if [ "$_scope" = "NULL" ]; then
|
||||
required_result 0 <<EOF
|
||||
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
|
||||
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
|
||||
|
@ -1,4 +1,4 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
setup_dbdir
|
||||
}
|
||||
@ -8,20 +8,20 @@ result_filter()
|
||||
sed -e 's|\( of debug locks PID=\)[0-9]*|\1PID|'
|
||||
}
|
||||
|
||||
tdb_path ()
|
||||
tdb_path()
|
||||
{
|
||||
echo "${CTDB_DBDIR}/${1}.${FAKE_CTDB_PNN}"
|
||||
}
|
||||
|
||||
fake_file_id ()
|
||||
fake_file_id()
|
||||
{
|
||||
_path="$1"
|
||||
|
||||
echo "$FAKE_FILE_ID_MAP" |
|
||||
awk -v path="$_path" '$1 == path { print $2 }'
|
||||
awk -v path="$_path" '$1 == path { print $2 }'
|
||||
}
|
||||
|
||||
fake_stack_trace ()
|
||||
fake_stack_trace()
|
||||
{
|
||||
_pid="$1"
|
||||
_command="${2:-smbd}"
|
||||
@ -47,7 +47,7 @@ EOF
|
||||
esac
|
||||
}
|
||||
|
||||
do_test ()
|
||||
do_test()
|
||||
{
|
||||
_holder_scope="$1"
|
||||
_holder_state="$2"
|
||||
@ -56,26 +56,28 @@ do_test ()
|
||||
|
||||
_lock_helper_pid="4132032"
|
||||
|
||||
FAKE_PS_MAP=$(cat <<EOF
|
||||
FAKE_PS_MAP=$(
|
||||
cat <<EOF
|
||||
1234567 ctdbd S
|
||||
2345678 smbd S
|
||||
4131931 smbd ${_holder_state}
|
||||
${_lock_helper_pid} ctdb_lock_helpe S+
|
||||
EOF
|
||||
)
|
||||
)
|
||||
export FAKE_PS_MAP
|
||||
|
||||
FAKE_FILE_ID_MAP=""
|
||||
_tdbs="locking.tdb brlock.tdb test.tdb foo.tdb"
|
||||
_n=1
|
||||
for _t in $_tdbs ; do
|
||||
for _t in $_tdbs; do
|
||||
_path=$(tdb_path "$_t")
|
||||
_inode=$((19690818 + _n))
|
||||
FAKE_FILE_ID_MAP=$(cat <<EOF
|
||||
FAKE_FILE_ID_MAP=$(
|
||||
cat <<EOF
|
||||
${FAKE_FILE_ID_MAP}
|
||||
${_path} 103:04:${_inode}
|
||||
EOF
|
||||
)
|
||||
)
|
||||
rm -f "$_path"
|
||||
touch "$_path"
|
||||
_n=$((_n + 1))
|
||||
@ -85,7 +87,8 @@ EOF
|
||||
_path=$(tdb_path "locking.tdb")
|
||||
_locking_tdb_id=$(fake_file_id "$_path")
|
||||
|
||||
_t=$(cat <<EOF
|
||||
_t=$(
|
||||
cat <<EOF
|
||||
POSIX ADVISORY WRITE 3769740 103:04:24380821 1073741826 1073742335
|
||||
FLOCK ADVISORY WRITE 3632524 103:02:1059266 0 EOF
|
||||
FLOCK ADVISORY WRITE 4060231 00:17:17184 0 EOF
|
||||
@ -95,73 +98,83 @@ POSIX ADVISORY READ 4427 103:04:22152234 1073741826 1073742335
|
||||
POSIX ADVISORY WRITE 4427 103:04:22152494 0 EOF
|
||||
POSIX ADVISORY READ 4427 103:04:22152702 1073741826 1073742335
|
||||
EOF
|
||||
)
|
||||
)
|
||||
|
||||
_holder_lock=""
|
||||
if [ "$_holder_scope" = "DB" ] ; then
|
||||
if [ "$_lock_type" = "FCNTL" ] ; then
|
||||
_holder_lock=$(cat <<EOF
|
||||
if [ "$_holder_scope" = "DB" ]; then
|
||||
if [ "$_lock_type" = "FCNTL" ]; then
|
||||
_holder_lock=$(
|
||||
cat <<EOF
|
||||
POSIX ADVISORY WRITE 4131931 ${_locking_tdb_id} 168 EOF
|
||||
EOF
|
||||
)
|
||||
elif [ "$_lock_type" = "MUTEX" ] ; then
|
||||
_holder_lock=$(cat <<EOF
|
||||
)
|
||||
elif [ "$_lock_type" = "MUTEX" ]; then
|
||||
_holder_lock=$(
|
||||
cat <<EOF
|
||||
POSIX ADVISORY WRITE 4131931 ${_locking_tdb_id} 400172 EOF
|
||||
EOF
|
||||
)
|
||||
)
|
||||
fi
|
||||
elif [ "$_holder_scope" = "RECORD" ] && \
|
||||
[ "$_lock_type" = "FCNTL" ] ; then
|
||||
_holder_lock=$(cat <<EOF
|
||||
elif [ "$_holder_scope" = "RECORD" ] &&
|
||||
[ "$_lock_type" = "FCNTL" ]; then
|
||||
_holder_lock=$(
|
||||
cat <<EOF
|
||||
POSIX ADVISORY WRITE 2345678 ${_locking_tdb_id} 112736 112736
|
||||
POSIX ADVISORY WRITE 4131931 ${_locking_tdb_id} 225472 225472
|
||||
EOF
|
||||
)
|
||||
)
|
||||
fi
|
||||
|
||||
_t=$(cat <<EOF
|
||||
_t=$(
|
||||
cat <<EOF
|
||||
$_t
|
||||
$_holder_lock
|
||||
EOF
|
||||
)
|
||||
)
|
||||
|
||||
_helper_lock=""
|
||||
if [ "$_helper_scope" = "DB" ] && \
|
||||
[ "$_lock_type" = "FCNTL" ] ; then
|
||||
_helper_lock=$(cat <<EOF
|
||||
if [ "$_helper_scope" = "DB" ] &&
|
||||
[ "$_lock_type" = "FCNTL" ]; then
|
||||
_helper_lock=$(
|
||||
cat <<EOF
|
||||
-> POSIX ADVISORY WRITE ${_lock_helper_pid} ${_locking_tdb_id} 168 170
|
||||
EOF
|
||||
)
|
||||
elif [ "$_helper_scope" = "RECORD" ] && \
|
||||
[ "$_lock_type" = "FCNTL" ] ; then
|
||||
_helper_lock=$(cat <<EOF
|
||||
)
|
||||
elif [ "$_helper_scope" = "RECORD" ] &&
|
||||
[ "$_lock_type" = "FCNTL" ]; then
|
||||
_helper_lock=$(
|
||||
cat <<EOF
|
||||
-> POSIX ADVISORY WRITE ${_lock_helper_pid} ${_locking_tdb_id} 112736 112736
|
||||
EOF
|
||||
)
|
||||
)
|
||||
fi
|
||||
_t=$(cat <<EOF
|
||||
_t=$(
|
||||
cat <<EOF
|
||||
$_t
|
||||
$_helper_lock
|
||||
EOF
|
||||
)
|
||||
)
|
||||
|
||||
if [ "$_holder_scope" = "DB" ] ; then
|
||||
_t=$(cat <<EOF
|
||||
if [ "$_holder_scope" = "DB" ]; then
|
||||
_t=$(
|
||||
cat <<EOF
|
||||
$_t
|
||||
POSIX ADVISORY READ 4131931 ${_locking_tdb_id} 4 4
|
||||
EOF
|
||||
)
|
||||
elif [ "$_holder_scope" = "RECORD" ] && \
|
||||
[ "$_lock_type" = "FCNTL" ] ; then
|
||||
_t=$(cat <<EOF
|
||||
)
|
||||
elif [ "$_holder_scope" = "RECORD" ] &&
|
||||
[ "$_lock_type" = "FCNTL" ]; then
|
||||
_t=$(
|
||||
cat <<EOF
|
||||
$_t
|
||||
POSIX ADVISORY READ 2345678 ${_locking_tdb_id} 4 4
|
||||
POSIX ADVISORY READ 4131931 ${_locking_tdb_id} 4 4
|
||||
EOF
|
||||
)
|
||||
)
|
||||
fi
|
||||
|
||||
_t=$(cat <<EOF
|
||||
_t=$(
|
||||
cat <<EOF
|
||||
$_t
|
||||
POSIX ADVISORY READ 3769740 103:04:24390149 1073741826 1073742335
|
||||
POSIX ADVISORY WRITE 3769740 103:04:24380839 1073741826 1073742335
|
||||
@ -170,19 +183,20 @@ FLOCK ADVISORY WRITE 3769302 103:02:1177487 0 EOF
|
||||
FLOCK ADVISORY WRITE 3769302 103:02:1180308 0 EOF
|
||||
OFDLCK ADVISORY READ -1 00:05:6 0 EOF
|
||||
EOF
|
||||
)
|
||||
)
|
||||
|
||||
FAKE_PROC_LOCKS=$(echo "$_t" | awk '{ printf "%d: %s\n", NR, $0 }')
|
||||
export FAKE_PROC_LOCKS
|
||||
|
||||
_holder_mutex_lock=""
|
||||
if [ "$_lock_type" = "MUTEX" ] ; then
|
||||
if [ "$_holder_scope" = "RECORD" ] ; then
|
||||
_holder_mutex_lock=$(cat <<EOF
|
||||
if [ "$_lock_type" = "MUTEX" ]; then
|
||||
if [ "$_holder_scope" = "RECORD" ]; then
|
||||
_holder_mutex_lock=$(
|
||||
cat <<EOF
|
||||
2345678 28142
|
||||
4131931 56284
|
||||
EOF
|
||||
)
|
||||
)
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -194,7 +208,7 @@ EOF
|
||||
'
|
||||
_db="locking.tdb.${FAKE_CTDB_PNN}"
|
||||
|
||||
if [ -n "$_helper_lock" ] ; then
|
||||
if [ -n "$_helper_lock" ]; then
|
||||
read -r _ _ _ _ _pid _ _start _end <<EOF
|
||||
$_helper_lock
|
||||
EOF
|
||||
@ -205,8 +219,8 @@ EOF
|
||||
# fake lock info
|
||||
_pids=''
|
||||
_out="${_out:+${_out}${_nl}}Lock holders:"
|
||||
if [ -n "$_holder_mutex_lock" ] ; then
|
||||
while read -r _pid _chain ; do
|
||||
if [ -n "$_holder_mutex_lock" ]; then
|
||||
while read -r _pid _chain; do
|
||||
_comm="smbd"
|
||||
_out="${_out}${_nl}"
|
||||
_out="${_out}${_pid} smbd ${_db} ${_chain}"
|
||||
@ -215,7 +229,7 @@ EOF
|
||||
$_holder_mutex_lock
|
||||
EOF
|
||||
else
|
||||
while read -r _ _ _ _pid _ _start _end ; do
|
||||
while read -r _ _ _ _pid _ _start _end; do
|
||||
_comm="smbd"
|
||||
_out="${_out}${_nl}"
|
||||
_out="${_out}${_pid} smbd ${_db} ${_start} ${_end}"
|
||||
@ -226,18 +240,19 @@ EOF
|
||||
fi
|
||||
|
||||
# fake stack traces
|
||||
for _pid in $_pids ; do
|
||||
for _pid in $_pids; do
|
||||
_comm="smbd"
|
||||
if [ "$_pid" = "4131931" ] ; then
|
||||
if [ "$_pid" = "4131931" ]; then
|
||||
_state="$_holder_state"
|
||||
else
|
||||
_state="S"
|
||||
fi
|
||||
_out=$(cat <<EOF
|
||||
_out=$(
|
||||
cat <<EOF
|
||||
$_out
|
||||
$(fake_stack_trace "$_pid" "$_comm" "$_state")
|
||||
EOF
|
||||
)
|
||||
)
|
||||
done
|
||||
|
||||
ok <<EOF
|
||||
@ -247,9 +262,9 @@ $_out
|
||||
EOF
|
||||
|
||||
script_test "${script_dir}/${script}" \
|
||||
"$_lock_helper_pid" \
|
||||
"$_helper_scope" \
|
||||
"$_path" \
|
||||
"$_lock_type"
|
||||
"$_lock_helper_pid" \
|
||||
"$_helper_scope" \
|
||||
"$_path" \
|
||||
"$_lock_type"
|
||||
|
||||
}
|
||||
|
@ -18,29 +18,28 @@ export CTDB_HELPER_BINDIR="$stubs_dir"
|
||||
|
||||
PATH="${stubs_dir}:${PATH}"
|
||||
|
||||
|
||||
export CTDB="ctdb"
|
||||
|
||||
# Force this to be absolute - event scripts can change directory
|
||||
CTDB_TEST_TMP_DIR=$(cd "$CTDB_TEST_TMP_DIR" && echo "$PWD")
|
||||
|
||||
export CTDB_LOGGING="file:${CTDB_TEST_TMP_DIR}/log.ctdb"
|
||||
touch "${CTDB_LOGGING#file:}" || \
|
||||
die "Unable to setup logging for \"$CTDB_LOGGING\""
|
||||
touch "${CTDB_LOGGING#file:}" ||
|
||||
die "Unable to setup logging for \"$CTDB_LOGGING\""
|
||||
|
||||
if [ -d "${CTDB_TEST_SUITE_DIR}/etc" ] ; then
|
||||
cp -a "${CTDB_TEST_SUITE_DIR}/etc" "$CTDB_TEST_TMP_DIR"
|
||||
export CTDB_SYS_ETCDIR="${CTDB_TEST_TMP_DIR}/etc"
|
||||
if [ -d "${CTDB_TEST_SUITE_DIR}/etc" ]; then
|
||||
cp -a "${CTDB_TEST_SUITE_DIR}/etc" "$CTDB_TEST_TMP_DIR"
|
||||
export CTDB_SYS_ETCDIR="${CTDB_TEST_TMP_DIR}/etc"
|
||||
else
|
||||
die "Unable to setup \$CTDB_SYS_ETCDIR"
|
||||
die "Unable to setup \$CTDB_SYS_ETCDIR"
|
||||
fi
|
||||
|
||||
setup_ctdb_base "$CTDB_TEST_TMP_DIR" "etc-ctdb" \
|
||||
debug_locks.sh \
|
||||
functions \
|
||||
nfs-checks.d \
|
||||
nfs-linux-kernel-callout \
|
||||
statd-callout
|
||||
debug_locks.sh \
|
||||
functions \
|
||||
nfs-checks.d \
|
||||
nfs-linux-kernel-callout \
|
||||
statd-callout
|
||||
|
||||
export FAKE_CTDB_STATE="${CTDB_TEST_TMP_DIR}/fake-ctdb"
|
||||
mkdir -p "$FAKE_CTDB_STATE"
|
||||
@ -50,17 +49,20 @@ mkdir -p "$FAKE_NETWORK_STATE"
|
||||
|
||||
######################################################################
|
||||
|
||||
if "$CTDB_TEST_VERBOSE" ; then
|
||||
debug ()
|
||||
if "$CTDB_TEST_VERBOSE"; then
|
||||
debug()
|
||||
{
|
||||
if [ -n "$1" ] ; then
|
||||
if [ -n "$1" ]; then
|
||||
echo "$@" >&2
|
||||
else
|
||||
cat >&2
|
||||
fi
|
||||
}
|
||||
else
|
||||
debug () { : ; }
|
||||
debug()
|
||||
{
|
||||
:
|
||||
}
|
||||
fi
|
||||
|
||||
######################################################################
|
||||
@ -70,17 +72,17 @@ fi
|
||||
# Default is to use script name with ".options" appended. With
|
||||
# arguments, this can specify an alternate script name (and
|
||||
# component).
|
||||
setup_script_options ()
|
||||
setup_script_options()
|
||||
{
|
||||
if [ $# -eq 2 ] ; then
|
||||
if [ $# -eq 2 ]; then
|
||||
_script="$2"
|
||||
elif [ $# -eq 0 ] ; then
|
||||
elif [ $# -eq 0 ]; then
|
||||
_script=""
|
||||
else
|
||||
die "usage: setup_script_options [ component script ]"
|
||||
fi
|
||||
|
||||
if [ -n "$_script" ] ; then
|
||||
if [ -n "$_script" ]; then
|
||||
_options="${CTDB_BASE}/events/legacy/${_script}.options"
|
||||
else
|
||||
_options="${script_dir}/${script%.script}.options"
|
||||
@ -92,7 +94,7 @@ setup_script_options ()
|
||||
. "$_options"
|
||||
}
|
||||
|
||||
setup_dbdir ()
|
||||
setup_dbdir()
|
||||
{
|
||||
export CTDB_DBDIR_BASE="${CTDB_TEST_TMP_DIR}/db"
|
||||
CTDB_DBDIR="${CTDB_DBDIR_BASE}/volatile"
|
||||
@ -109,31 +111,31 @@ EOF
|
||||
mkdir -p "$CTDB_DBDIR_STATE"
|
||||
}
|
||||
|
||||
setup_date ()
|
||||
setup_date()
|
||||
{
|
||||
export FAKE_DATE_OUTPUT="$1"
|
||||
}
|
||||
|
||||
setup_tcp_listen ()
|
||||
setup_tcp_listen()
|
||||
{
|
||||
export FAKE_TCP_LISTEN="$*"
|
||||
}
|
||||
|
||||
tcp_port_listening ()
|
||||
tcp_port_listening()
|
||||
{
|
||||
for _i ; do
|
||||
FAKE_TCP_LISTEN="${FAKE_TCP_LISTEN} ${_i}"
|
||||
for _i; do
|
||||
FAKE_TCP_LISTEN="${FAKE_TCP_LISTEN} ${_i}"
|
||||
done
|
||||
}
|
||||
|
||||
tcp_port_down ()
|
||||
tcp_port_down()
|
||||
{
|
||||
_port="$1"
|
||||
debug "Marking TCP port \"${_port}\" as not listening"
|
||||
|
||||
_t=""
|
||||
for _i in $FAKE_TCP_LISTEN ; do
|
||||
if [ "$_i" = "$_port" ] ; then
|
||||
for _i in $FAKE_TCP_LISTEN; do
|
||||
if [ "$_i" = "$_port" ]; then
|
||||
continue
|
||||
fi
|
||||
_t="${_t} ${_i}"
|
||||
@ -142,43 +144,44 @@ tcp_port_down ()
|
||||
FAKE_TCP_LISTEN="$_t"
|
||||
}
|
||||
|
||||
setup_unix_listen ()
|
||||
setup_unix_listen()
|
||||
{
|
||||
export FAKE_NETSTAT_UNIX_LISTEN="$*"
|
||||
}
|
||||
|
||||
unix_socket_listening ()
|
||||
unix_socket_listening()
|
||||
{
|
||||
_s="$1"
|
||||
|
||||
FAKE_NETSTAT_UNIX_LISTEN="${FAKE_NETSTAT_UNIX_LISTEN} ${_s}"
|
||||
}
|
||||
|
||||
setup_shares ()
|
||||
setup_shares()
|
||||
{
|
||||
debug "Setting up shares (3 existing shares)"
|
||||
# Create 3 fake shares/exports.
|
||||
export FAKE_SHARES=""
|
||||
for i in $(seq 1 3) ; do
|
||||
for i in $(seq 1 3); do
|
||||
_s="${CTDB_TEST_TMP_DIR}/shares/share${i}"
|
||||
mkdir -p "$_s"
|
||||
FAKE_SHARES="${FAKE_SHARES}${FAKE_SHARES:+ }${_s}"
|
||||
done
|
||||
}
|
||||
|
||||
shares_missing ()
|
||||
shares_missing()
|
||||
{
|
||||
# Mark some shares as non-existent
|
||||
_fmt="$1" ; shift
|
||||
_fmt="$1"
|
||||
shift
|
||||
|
||||
_out=""
|
||||
_nl="
|
||||
"
|
||||
|
||||
_n=1
|
||||
for _i in $FAKE_SHARES ; do
|
||||
for _j ; do
|
||||
if [ $_n -ne "$_j" ] ; then
|
||||
for _i in $FAKE_SHARES; do
|
||||
for _j; do
|
||||
if [ $_n -ne "$_j" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
@ -193,82 +196,85 @@ shares_missing ()
|
||||
echo "$_out"
|
||||
}
|
||||
|
||||
_ethtool_setup ()
|
||||
_ethtool_setup()
|
||||
{
|
||||
FAKE_ETHTOOL_LINK_DOWN="${FAKE_NETWORK_STATE}/ethtool-link-down"
|
||||
export FAKE_ETHTOOL_LINK_DOWN
|
||||
mkdir -p "$FAKE_ETHTOOL_LINK_DOWN"
|
||||
}
|
||||
|
||||
ethtool_interfaces_down ()
|
||||
ethtool_interfaces_down()
|
||||
{
|
||||
_ethtool_setup
|
||||
|
||||
for _i ; do
|
||||
for _i; do
|
||||
echo "Marking interface $_i DOWN for ethtool"
|
||||
touch "${FAKE_ETHTOOL_LINK_DOWN}/${_i}"
|
||||
done
|
||||
}
|
||||
|
||||
ethtool_interfaces_up ()
|
||||
ethtool_interfaces_up()
|
||||
{
|
||||
_ethtool_setup
|
||||
|
||||
for _i ; do
|
||||
for _i; do
|
||||
echo "Marking interface $_i UP for ethtool"
|
||||
rm -f "${FAKE_ETHTOOL_LINK_DOWN}/${_i}"
|
||||
done
|
||||
}
|
||||
|
||||
dump_routes ()
|
||||
dump_routes()
|
||||
{
|
||||
echo "# ip rule show"
|
||||
ip rule show
|
||||
echo "# ip rule show"
|
||||
ip rule show
|
||||
|
||||
ip rule show |
|
||||
while read _p _x _i _x _t ; do
|
||||
# Remove trailing colon after priority/preference.
|
||||
_p="${_p%:}"
|
||||
# Only remove rules that match our priority/preference.
|
||||
[ "$CTDB_PER_IP_ROUTING_RULE_PREF" = "$_p" ] || continue
|
||||
ip rule show |
|
||||
while read _p _x _i _x _t; do
|
||||
# Remove trailing colon after priority/preference.
|
||||
_p="${_p%:}"
|
||||
# Only remove rules that match our priority/preference.
|
||||
[ "$CTDB_PER_IP_ROUTING_RULE_PREF" = "$_p" ] || continue
|
||||
|
||||
echo "# ip route show table $_t"
|
||||
ip route show table "$_t"
|
||||
done
|
||||
echo "# ip route show table $_t"
|
||||
ip route show table "$_t"
|
||||
done
|
||||
}
|
||||
|
||||
# Copied from 13.per_ip_routing for now... so this is lazy testing :-(
|
||||
ipv4_host_addr_to_net ()
|
||||
ipv4_host_addr_to_net()
|
||||
{
|
||||
_host="$1"
|
||||
_maskbits="$2"
|
||||
_host="$1"
|
||||
_maskbits="$2"
|
||||
|
||||
# Convert the host address to an unsigned long by splitting out
|
||||
# the octets and doing the math.
|
||||
_host_ul=0
|
||||
for _o in $(export IFS="." ; echo $_host) ; do
|
||||
_host_ul=$(( ($_host_ul << 8) + $_o)) # work around Emacs color bug
|
||||
done
|
||||
# Convert the host address to an unsigned long by splitting out
|
||||
# the octets and doing the math.
|
||||
_host_ul=0
|
||||
for _o in $(
|
||||
export IFS="."
|
||||
echo $_host
|
||||
); do
|
||||
_host_ul=$((($_host_ul << 8) + $_o)) # work around Emacs color bug
|
||||
done
|
||||
|
||||
# Calculate the mask and apply it.
|
||||
_mask_ul=$(( 0xffffffff << (32 - $_maskbits) ))
|
||||
_net_ul=$(( $_host_ul & $_mask_ul ))
|
||||
# Calculate the mask and apply it.
|
||||
_mask_ul=$((0xffffffff << (32 - $_maskbits)))
|
||||
_net_ul=$(($_host_ul & $_mask_ul))
|
||||
|
||||
# Now convert to a network address one byte at a time.
|
||||
_net=""
|
||||
for _o in $(seq 1 4) ; do
|
||||
_net="$(($_net_ul & 255))${_net:+.}${_net}"
|
||||
_net_ul=$(($_net_ul >> 8))
|
||||
done
|
||||
# Now convert to a network address one byte at a time.
|
||||
_net=""
|
||||
for _o in $(seq 1 4); do
|
||||
_net="$(($_net_ul & 255))${_net:+.}${_net}"
|
||||
_net_ul=$(($_net_ul >> 8))
|
||||
done
|
||||
|
||||
echo "${_net}/${_maskbits}"
|
||||
echo "${_net}/${_maskbits}"
|
||||
}
|
||||
|
||||
######################################################################
|
||||
|
||||
# CTDB fakery
|
||||
|
||||
setup_numnodes ()
|
||||
setup_numnodes()
|
||||
{
|
||||
export FAKE_CTDB_NUMNODES="${1:-3}"
|
||||
echo "Setting up CTDB with ${FAKE_CTDB_NUMNODES} fake nodes"
|
||||
@ -276,7 +282,7 @@ setup_numnodes ()
|
||||
|
||||
# For now this creates the same public addresses each time. However,
|
||||
# it could be made more flexible.
|
||||
setup_public_addresses ()
|
||||
setup_public_addresses()
|
||||
{
|
||||
_f="${CTDB_BASE}/public_addresses"
|
||||
|
||||
@ -294,117 +300,122 @@ setup_public_addresses ()
|
||||
10.0.1.3/24 dev456
|
||||
EOF
|
||||
|
||||
# Needed for IP allocation
|
||||
setup_numnodes
|
||||
# Needed for IP allocation
|
||||
setup_numnodes
|
||||
}
|
||||
|
||||
# Need to cope with ctdb_get_pnn(). If a test changes PNN then it
|
||||
# needs to be using a different state directory, otherwise the wrong
|
||||
# PNN can already be cached in the state directory.
|
||||
ctdb_set_pnn ()
|
||||
ctdb_set_pnn()
|
||||
{
|
||||
export FAKE_CTDB_PNN="$1"
|
||||
echo "Setting up PNN ${FAKE_CTDB_PNN}"
|
||||
export FAKE_CTDB_PNN="$1"
|
||||
echo "Setting up PNN ${FAKE_CTDB_PNN}"
|
||||
|
||||
CTDB_SCRIPT_VARDIR="${CTDB_TEST_TMP_DIR}/scripts/${FAKE_CTDB_PNN}"
|
||||
export CTDB_SCRIPT_VARDIR
|
||||
mkdir -p "$CTDB_SCRIPT_VARDIR"
|
||||
CTDB_SCRIPT_VARDIR="${CTDB_TEST_TMP_DIR}/scripts/${FAKE_CTDB_PNN}"
|
||||
export CTDB_SCRIPT_VARDIR
|
||||
mkdir -p "$CTDB_SCRIPT_VARDIR"
|
||||
}
|
||||
|
||||
ctdb_get_interfaces ()
|
||||
ctdb_get_interfaces()
|
||||
{
|
||||
# The echo/subshell forces all the output onto 1 line.
|
||||
echo $(ctdb ifaces -X | awk -F'|' 'FNR > 1 {print $2}')
|
||||
# The echo/subshell forces all the output onto 1 line.
|
||||
echo $(ctdb ifaces -X | awk -F'|' 'FNR > 1 {print $2}')
|
||||
}
|
||||
|
||||
ctdb_get_1_interface ()
|
||||
ctdb_get_1_interface()
|
||||
{
|
||||
_t=$(ctdb_get_interfaces)
|
||||
echo ${_t%% *}
|
||||
_t=$(ctdb_get_interfaces)
|
||||
echo ${_t%% *}
|
||||
}
|
||||
|
||||
# Print public addresses on this node as: interface IP maskbits
|
||||
# Each line is suitable for passing to takeip/releaseip
|
||||
ctdb_get_my_public_addresses ()
|
||||
ctdb_get_my_public_addresses()
|
||||
{
|
||||
ctdb ip -v -X | {
|
||||
read _x # skip header line
|
||||
ctdb ip -v -X | {
|
||||
read _x # skip header line
|
||||
|
||||
while IFS="|" read _x _ip _x _iface _x ; do
|
||||
[ -n "$_iface" ] || continue
|
||||
while IFS="/$IFS" read _i _maskbits _x ; do
|
||||
if [ "$_ip" = "$_i" ] ; then
|
||||
echo $_iface $_ip $_maskbits
|
||||
break
|
||||
fi
|
||||
done <"${CTDB_BASE}/public_addresses"
|
||||
done
|
||||
}
|
||||
while IFS="|" read _x _ip _x _iface _x; do
|
||||
[ -n "$_iface" ] || continue
|
||||
while IFS="/$IFS" read _i _maskbits _x; do
|
||||
if [ "$_ip" = "$_i" ]; then
|
||||
echo $_iface $_ip $_maskbits
|
||||
break
|
||||
fi
|
||||
done <"${CTDB_BASE}/public_addresses"
|
||||
done
|
||||
}
|
||||
}
|
||||
|
||||
# Prints the 1st public address as: interface IP maskbits
|
||||
# This is suitable for passing to takeip/releaseip
|
||||
ctdb_get_1_public_address ()
|
||||
ctdb_get_1_public_address()
|
||||
{
|
||||
ctdb_get_my_public_addresses | { head -n 1 ; cat >/dev/null ; }
|
||||
ctdb_get_my_public_addresses | {
|
||||
head -n 1
|
||||
cat >/dev/null
|
||||
}
|
||||
}
|
||||
|
||||
# Check the routes against those that are expected. $1 is the number
|
||||
# of assigned IPs to use (<num>, all), defaulting to 1. If $2 is
|
||||
# "default" then expect default routes to have been added.
|
||||
check_routes ()
|
||||
check_routes()
|
||||
{
|
||||
_num_ips="${1:-1}"
|
||||
_should_add_default="$2"
|
||||
_num_ips="${1:-1}"
|
||||
_should_add_default="$2"
|
||||
|
||||
_policy_rules=""
|
||||
_policy_routes=""
|
||||
_policy_rules=""
|
||||
_policy_routes=""
|
||||
|
||||
ctdb_get_my_public_addresses |
|
||||
if [ "$_num_ips" = "all" ] ; then
|
||||
cat
|
||||
else
|
||||
{ head -n "$_num_ips" ; cat >/dev/null ; }
|
||||
fi | {
|
||||
while read _dev _ip _bits ; do
|
||||
_net=$(ipv4_host_addr_to_net "$_ip" "$_bits")
|
||||
_gw="${_net%.*}.254" # a dumb, calculated default
|
||||
ctdb_get_my_public_addresses |
|
||||
if [ "$_num_ips" = "all" ]; then
|
||||
cat
|
||||
else
|
||||
{
|
||||
head -n "$_num_ips"
|
||||
cat >/dev/null
|
||||
}
|
||||
fi | {
|
||||
while read _dev _ip _bits; do
|
||||
_net=$(ipv4_host_addr_to_net "$_ip" "$_bits")
|
||||
_gw="${_net%.*}.254" # a dumb, calculated default
|
||||
|
||||
_policy_rules="${_policy_rules}
|
||||
_policy_rules="${_policy_rules}
|
||||
${CTDB_PER_IP_ROUTING_RULE_PREF}: from $_ip lookup ctdb.$_ip "
|
||||
_policy_routes="${_policy_routes}
|
||||
_policy_routes="${_policy_routes}
|
||||
# ip route show table ctdb.$_ip
|
||||
$_net dev $_dev scope link "
|
||||
|
||||
if [ "$_should_add_default" = "default" ] ; then
|
||||
_policy_routes="${_policy_routes}
|
||||
if [ "$_should_add_default" = "default" ]; then
|
||||
_policy_routes="${_policy_routes}
|
||||
default via $_gw dev $_dev "
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
ok <<EOF
|
||||
ok <<EOF
|
||||
# ip rule show
|
||||
0: from all lookup local ${_policy_rules}
|
||||
32766: from all lookup main
|
||||
32767: from all lookup default ${_policy_routes}
|
||||
EOF
|
||||
|
||||
simple_test_command dump_routes
|
||||
} || test_fail
|
||||
simple_test_command dump_routes
|
||||
} || test_fail
|
||||
}
|
||||
|
||||
######################################################################
|
||||
|
||||
|
||||
nfs_load_config ()
|
||||
nfs_load_config()
|
||||
{
|
||||
_etc="$CTDB_SYS_ETCDIR" # shortcut for readability
|
||||
for _c in "$_etc/sysconfig/nfs" "$_etc/default/nfs" "$_etc/ctdb/sysconfig/nfs" ; do
|
||||
if [ -r "$_c" ] ; then
|
||||
. "$_c"
|
||||
break
|
||||
fi
|
||||
done
|
||||
_etc="$CTDB_SYS_ETCDIR" # shortcut for readability
|
||||
for _c in "$_etc/sysconfig/nfs" "$_etc/default/nfs" "$_etc/ctdb/sysconfig/nfs"; do
|
||||
if [ -r "$_c" ]; then
|
||||
. "$_c"
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
setup_nfs_callout()
|
||||
@ -413,7 +424,7 @@ setup_nfs_callout()
|
||||
export NFS_FAKE_CALLOUT_MAGIC="$1"
|
||||
}
|
||||
|
||||
program_stack_trace ()
|
||||
program_stack_trace()
|
||||
{
|
||||
_prog="$1"
|
||||
_pid="$2"
|
||||
@ -428,16 +439,15 @@ EOF
|
||||
|
||||
# Result and test functions
|
||||
|
||||
|
||||
############################################################
|
||||
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
die "setup() is not defined"
|
||||
}
|
||||
|
||||
# Set some globals and print the summary.
|
||||
define_test ()
|
||||
define_test()
|
||||
{
|
||||
desc="$1"
|
||||
|
||||
@ -466,7 +476,7 @@ define_test ()
|
||||
# Symlink target needs to be absolute
|
||||
case "$CTDB_SCRIPTS_DATA_DIR" in
|
||||
/*) _data_dir="${CTDB_SCRIPTS_DATA_DIR}/${_subdir}" ;;
|
||||
*) _data_dir="${PWD}/${CTDB_SCRIPTS_DATA_DIR}/${_subdir}"
|
||||
*) _data_dir="${PWD}/${CTDB_SCRIPTS_DATA_DIR}/${_subdir}" ;;
|
||||
esac
|
||||
mkdir -p "$script_dir"
|
||||
ln -s "${_data_dir}/${script}" "$script_dir"
|
||||
@ -476,10 +486,11 @@ define_test ()
|
||||
script="$_f"
|
||||
unset event
|
||||
script_dir="${CTDB_BASE}"
|
||||
;;
|
||||
esac
|
||||
|
||||
_s="${script_dir}/${script}"
|
||||
[ -r "$_s" ] || \
|
||||
[ -r "$_s" ] ||
|
||||
die "Internal error - unable to find script \"${_s}\""
|
||||
|
||||
case "$script" in
|
||||
@ -489,10 +500,10 @@ define_test ()
|
||||
esac
|
||||
|
||||
printf "%-17s %-10s %-4s - %s\n\n" \
|
||||
"$script_short" "$event" "$_num" "$desc"
|
||||
"$script_short" "$event" "$_num" "$desc"
|
||||
|
||||
_f="${CTDB_TEST_SUITE_DIR}/scripts/${script_short}.sh"
|
||||
if [ -r "$_f" ] ; then
|
||||
if [ -r "$_f" ]; then
|
||||
. "$_f"
|
||||
fi
|
||||
|
||||
@ -504,20 +515,20 @@ define_test ()
|
||||
|
||||
# Any args are passed to the eventscript.
|
||||
|
||||
simple_test ()
|
||||
simple_test()
|
||||
{
|
||||
[ -n "$event" ] || die 'simple_test: $event not set'
|
||||
[ -n "$event" ] || die 'simple_test: $event not set'
|
||||
|
||||
args="$@"
|
||||
args="$@"
|
||||
|
||||
test_header ()
|
||||
{
|
||||
echo "Running script \"$script $event${args:+ }$args\""
|
||||
}
|
||||
test_header()
|
||||
{
|
||||
echo "Running script \"$script $event${args:+ }$args\""
|
||||
}
|
||||
|
||||
extra_header ()
|
||||
{
|
||||
cat <<EOF
|
||||
extra_header()
|
||||
{
|
||||
cat <<EOF
|
||||
|
||||
##################################################
|
||||
CTDB_BASE="$CTDB_BASE"
|
||||
@ -525,26 +536,27 @@ CTDB_SYS_ETCDIR="$CTDB_SYS_ETCDIR"
|
||||
ctdb client is "$(which ctdb)"
|
||||
ip command is "$(which ip)"
|
||||
EOF
|
||||
}
|
||||
}
|
||||
|
||||
script_test "${script_dir}/${script}" "$event" "$@"
|
||||
script_test "${script_dir}/${script}" "$event" "$@"
|
||||
|
||||
reset_test_header
|
||||
reset_extra_header
|
||||
reset_test_header
|
||||
reset_extra_header
|
||||
}
|
||||
|
||||
simple_test_event ()
|
||||
simple_test_event()
|
||||
{
|
||||
# If something has previously failed then don't continue.
|
||||
: ${_passed:=true}
|
||||
$_passed || return 1
|
||||
# If something has previously failed then don't continue.
|
||||
: ${_passed:=true}
|
||||
$_passed || return 1
|
||||
|
||||
event="$1" ; shift
|
||||
echo "=================================================="
|
||||
simple_test "$@"
|
||||
event="$1"
|
||||
shift
|
||||
echo "=================================================="
|
||||
simple_test "$@"
|
||||
}
|
||||
|
||||
simple_test_command ()
|
||||
simple_test_command()
|
||||
{
|
||||
unit_test_notrace "$@"
|
||||
unit_test_notrace "$@"
|
||||
}
|
||||
|
@ -1,15 +1,15 @@
|
||||
setup ()
|
||||
setup()
|
||||
{
|
||||
ctdb_set_pnn
|
||||
setup_public_addresses
|
||||
setup_date "123456789"
|
||||
}
|
||||
|
||||
ctdb_catdb_format_pairs ()
|
||||
ctdb_catdb_format_pairs()
|
||||
{
|
||||
_count=0
|
||||
|
||||
while read _k _v ; do
|
||||
while read _k _v; do
|
||||
_kn=$(echo -n "$_k" | wc -c)
|
||||
_vn=$(echo -n "$_v" | wc -c)
|
||||
cat <<EOF
|
||||
@ -25,11 +25,11 @@ EOF
|
||||
echo "Dumped ${_count} records"
|
||||
}
|
||||
|
||||
check_ctdb_tdb_statd_state ()
|
||||
check_ctdb_tdb_statd_state()
|
||||
{
|
||||
ctdb_get_my_public_addresses |
|
||||
while read _x _sip _x ; do
|
||||
for _cip ; do
|
||||
while read _x _sip _x; do
|
||||
for _cip; do
|
||||
cat <<EOF
|
||||
statd-state@${_sip}@${_cip} $(date)
|
||||
EOF
|
||||
@ -41,7 +41,7 @@ EOF
|
||||
} || exit $?
|
||||
}
|
||||
|
||||
check_statd_callout_smnotify ()
|
||||
check_statd_callout_smnotify()
|
||||
{
|
||||
_state_even=$(( $(date '+%s') / 2 * 2))
|
||||
_state_odd=$(($_state_even + 1))
|
||||
@ -49,8 +49,8 @@ check_statd_callout_smnotify ()
|
||||
nfs_load_config
|
||||
|
||||
ctdb_get_my_public_addresses |
|
||||
while read _x _sip _x ; do
|
||||
for _cip ; do
|
||||
while read _x _sip _x; do
|
||||
for _cip; do
|
||||
cat <<EOF
|
||||
SM_NOTIFY: ${_sip} -> ${_cip}, MON_NAME=${_sip}, STATE=${_state_even}
|
||||
SM_NOTIFY: ${_sip} -> ${_cip}, MON_NAME=${NFS_HOSTNAME}, STATE=${_state_even}
|
||||
|
Loading…
x
Reference in New Issue
Block a user