summaryrefslogtreecommitdiffstats
path: root/ctdb/tests
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2013-06-18 15:07:26 +1000
committerMartin Schwenke <martin@meltin.net>2013-06-20 13:01:10 +1000
commit3b2f7330cc333a55684753bf2c7b0fb8c8c72678 (patch)
tree82eb8a487d67bd0bce964daf51dc84804ab68f01 /ctdb/tests
parent4eed91b54a2c374a06c2275cbd8d4a50abbe9cdd (diff)
downloadsamba-3b2f7330cc333a55684753bf2c7b0fb8c8c72678.tar.gz
samba-3b2f7330cc333a55684753bf2c7b0fb8c8c72678.tar.xz
samba-3b2f7330cc333a55684753bf2c7b0fb8c8c72678.zip
tests/eventscripts: New tests for 00.ctdb "init" event
These test dropping of IPs and TDB checking. New stubs for date, tdbdump, tdbtool. Enhance ip stub to handle "ip addr show to ..." Tweak some infrastructure. Signed-off-by: Martin Schwenke <martin@meltin.net> Pair-programmed-with: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit aabf0bf41cb8ec344f06b69492fb6c2a27f9e900)
Diffstat (limited to 'ctdb/tests')
-rwxr-xr-xctdb/tests/eventscripts/00.ctdb.init.001.sh13
-rwxr-xr-xctdb/tests/eventscripts/00.ctdb.init.002.sh17
-rwxr-xr-xctdb/tests/eventscripts/00.ctdb.init.003.sh16
-rwxr-xr-xctdb/tests/eventscripts/00.ctdb.init.004.sh22
-rwxr-xr-xctdb/tests/eventscripts/00.ctdb.init.005.sh20
-rwxr-xr-xctdb/tests/eventscripts/00.ctdb.init.006.sh25
-rwxr-xr-xctdb/tests/eventscripts/00.ctdb.init.007.sh16
-rwxr-xr-xctdb/tests/eventscripts/00.ctdb.init.008.sh19
-rwxr-xr-xctdb/tests/eventscripts/00.ctdb.init.021.sh11
-rwxr-xr-xctdb/tests/eventscripts/00.ctdb.init.022.sh18
-rwxr-xr-xctdb/tests/eventscripts/00.ctdb.init.023.sh23
-rw-r--r--ctdb/tests/eventscripts/scripts/local.sh8
-rwxr-xr-xctdb/tests/eventscripts/stubs/date7
-rwxr-xr-xctdb/tests/eventscripts/stubs/ip25
-rwxr-xr-xctdb/tests/eventscripts/stubs/tdbdump9
-rwxr-xr-xctdb/tests/eventscripts/stubs/tdbtool15
16 files changed, 258 insertions, 6 deletions
diff --git a/ctdb/tests/eventscripts/00.ctdb.init.001.sh b/ctdb/tests/eventscripts/00.ctdb.init.001.sh
new file mode 100755
index 00000000000..320025ac282
--- /dev/null
+++ b/ctdb/tests/eventscripts/00.ctdb.init.001.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "TDB check, tdbtool supports check"
+
+setup_ctdb
+
+FAKE_TDBTOOL_SUPPORTS_CHECK="yes"
+
+ok_null
+
+simple_test
diff --git a/ctdb/tests/eventscripts/00.ctdb.init.002.sh b/ctdb/tests/eventscripts/00.ctdb.init.002.sh
new file mode 100755
index 00000000000..2777cc5eb4c
--- /dev/null
+++ b/ctdb/tests/eventscripts/00.ctdb.init.002.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "TDB check, tdbtool does no support check"
+
+setup_ctdb
+
+FAKE_TDBTOOL_SUPPORTS_CHECK="no"
+
+ok <<EOF
+WARNING: The installed 'tdbtool' does not offer the 'check' subcommand.
+ Using 'tdbdump' for database checks.
+ Consider updating 'tdbtool' for better checks!
+EOF
+
+simple_test
diff --git a/ctdb/tests/eventscripts/00.ctdb.init.003.sh b/ctdb/tests/eventscripts/00.ctdb.init.003.sh
new file mode 100755
index 00000000000..27702104601
--- /dev/null
+++ b/ctdb/tests/eventscripts/00.ctdb.init.003.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "TDB check, tdbtool supports check, good TDB"
+
+setup_ctdb
+
+FAKE_TDBTOOL_SUPPORTS_CHECK="yes"
+
+touch "${CTDB_DBDIR}/foo.tdb.0"
+FAKE_TDB_IS_OK="yes"
+
+ok_null
+
+simple_test
diff --git a/ctdb/tests/eventscripts/00.ctdb.init.004.sh b/ctdb/tests/eventscripts/00.ctdb.init.004.sh
new file mode 100755
index 00000000000..b504d08b2c9
--- /dev/null
+++ b/ctdb/tests/eventscripts/00.ctdb.init.004.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "TDB check, tdbtool supports check, bad TDB"
+
+setup_ctdb
+
+FAKE_TDBTOOL_SUPPORTS_CHECK="yes"
+
+db="${CTDB_DBDIR}/foo.tdb.0"
+touch "$db"
+FAKE_TDB_IS_OK="no"
+
+FAKE_DATE_OUTPUT="19690818.103000.000000001"
+
+ok <<EOF
+WARNING: database ${db} is corrupted.
+ Moving to backup ${db}.${FAKE_DATE_OUTPUT}.corrupt for later analysis.
+EOF
+
+simple_test
diff --git a/ctdb/tests/eventscripts/00.ctdb.init.005.sh b/ctdb/tests/eventscripts/00.ctdb.init.005.sh
new file mode 100755
index 00000000000..d11ab94885d
--- /dev/null
+++ b/ctdb/tests/eventscripts/00.ctdb.init.005.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "TDB check, tdbtool does not support check, good TDB"
+
+setup_ctdb
+
+FAKE_TDBTOOL_SUPPORTS_CHECK="no"
+
+touch "${CTDB_DBDIR}/foo.tdb.0"
+FAKE_TDB_IS_OK="yes"
+
+ok <<EOF
+WARNING: The installed 'tdbtool' does not offer the 'check' subcommand.
+ Using 'tdbdump' for database checks.
+ Consider updating 'tdbtool' for better checks!
+EOF
+
+simple_test
diff --git a/ctdb/tests/eventscripts/00.ctdb.init.006.sh b/ctdb/tests/eventscripts/00.ctdb.init.006.sh
new file mode 100755
index 00000000000..745bca0f993
--- /dev/null
+++ b/ctdb/tests/eventscripts/00.ctdb.init.006.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "TDB check, tdbtool does not support check, bad TDB"
+
+setup_ctdb
+
+FAKE_TDBTOOL_SUPPORTS_CHECK="no"
+
+db="${CTDB_DBDIR}/foo.tdb.0"
+touch "$db"
+FAKE_TDB_IS_OK="no"
+
+FAKE_DATE_OUTPUT="19690818.103000.000000001"
+
+ok <<EOF
+WARNING: The installed 'tdbtool' does not offer the 'check' subcommand.
+ Using 'tdbdump' for database checks.
+ Consider updating 'tdbtool' for better checks!
+WARNING: database ${db} is corrupted.
+ Moving to backup ${db}.${FAKE_DATE_OUTPUT}.corrupt for later analysis.
+EOF
+
+simple_test
diff --git a/ctdb/tests/eventscripts/00.ctdb.init.007.sh b/ctdb/tests/eventscripts/00.ctdb.init.007.sh
new file mode 100755
index 00000000000..1c954d7d8d1
--- /dev/null
+++ b/ctdb/tests/eventscripts/00.ctdb.init.007.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "TDB check, tdbtool supports check, good persistent TDB"
+
+setup_ctdb
+
+FAKE_TDBTOOL_SUPPORTS_CHECK="yes"
+
+touch "${CTDB_DBDIR}/persistent/foo.tdb.0"
+FAKE_TDB_IS_OK="yes"
+
+ok_null
+
+simple_test
diff --git a/ctdb/tests/eventscripts/00.ctdb.init.008.sh b/ctdb/tests/eventscripts/00.ctdb.init.008.sh
new file mode 100755
index 00000000000..a6afdd8671f
--- /dev/null
+++ b/ctdb/tests/eventscripts/00.ctdb.init.008.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "TDB check, tdbtool supports check, bad persistent TDB"
+
+setup_ctdb
+
+FAKE_TDBTOOL_SUPPORTS_CHECK="yes"
+
+db="${CTDB_DBDIR}/persistent/foo.tdb.0"
+touch "$db"
+FAKE_TDB_IS_OK="no"
+
+required_result 1 <<EOF
+Persistent database ${db} is corrupted! CTDB will not start.
+EOF
+
+simple_test
diff --git a/ctdb/tests/eventscripts/00.ctdb.init.021.sh b/ctdb/tests/eventscripts/00.ctdb.init.021.sh
new file mode 100755
index 00000000000..87dfa4dfdcf
--- /dev/null
+++ b/ctdb/tests/eventscripts/00.ctdb.init.021.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "Check public IP dropping, none assigned"
+
+setup_ctdb
+
+ok_null
+
+simple_test
diff --git a/ctdb/tests/eventscripts/00.ctdb.init.022.sh b/ctdb/tests/eventscripts/00.ctdb.init.022.sh
new file mode 100755
index 00000000000..6e594280a3a
--- /dev/null
+++ b/ctdb/tests/eventscripts/00.ctdb.init.022.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "Check public IP dropping, 1 assigned"
+
+setup_ctdb
+
+ctdb_get_1_public_address |
+while read dev ip bits ; do
+ ip addr add "${ip}/${bits}" dev "$dev"
+
+ ok <<EOF
+Removing public address ${ip}/${bits} from device ${dev}
+EOF
+
+ simple_test
+done
diff --git a/ctdb/tests/eventscripts/00.ctdb.init.023.sh b/ctdb/tests/eventscripts/00.ctdb.init.023.sh
new file mode 100755
index 00000000000..9b97e821313
--- /dev/null
+++ b/ctdb/tests/eventscripts/00.ctdb.init.023.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "Check public IP dropping, all assigned"
+
+setup_ctdb
+
+nl="
+"
+ctdb_get_my_public_addresses | {
+ out=""
+ while read dev ip bits ; do
+ ip addr add "${ip}/${bits}" dev "$dev"
+
+ msg="Removing public address ${ip}/${bits} from device ${dev}"
+ out="${out}${out:+${nl}}${msg}"
+ done
+
+ ok "$out"
+
+ simple_test
+}
diff --git a/ctdb/tests/eventscripts/scripts/local.sh b/ctdb/tests/eventscripts/scripts/local.sh
index d8b9307cbe4..20988ae4ec6 100644
--- a/ctdb/tests/eventscripts/scripts/local.sh
+++ b/ctdb/tests/eventscripts/scripts/local.sh
@@ -115,6 +115,14 @@ setup_generic ()
rm -f "$FAKE_IP_STATE"/*/*
rm -f "$FAKE_IP_STATE"/* 2>/dev/null || true
rmdir "$FAKE_IP_STATE"/* 2>/dev/null || true
+
+
+ export CTDB_DBDIR="${EVENTSCRIPTS_TESTS_VAR_DIR}/db"
+ mkdir -p "${CTDB_DBDIR}/persistent"
+
+ export FAKE_TDBTOOL_SUPPORTS_CHECK="yes"
+ export FAKE_TDB_IS_OK
+ export FAKE_DATE_OUTPUT
}
tcp_port_down ()
diff --git a/ctdb/tests/eventscripts/stubs/date b/ctdb/tests/eventscripts/stubs/date
new file mode 100755
index 00000000000..2f470a8156f
--- /dev/null
+++ b/ctdb/tests/eventscripts/stubs/date
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if [ "$FAKE_DATE_OUTPUT" ] ; then
+ echo "$FAKE_DATE_OUTPUT"
+else
+ /bin/date "$@"
+fi
diff --git a/ctdb/tests/eventscripts/stubs/ip b/ctdb/tests/eventscripts/stubs/ip
index 709c379ddff..fb7e8b6c6db 100755
--- a/ctdb/tests/eventscripts/stubs/ip
+++ b/ctdb/tests/eventscripts/stubs/ip
@@ -87,6 +87,7 @@ ip_addr_show ()
dev=""
primary=true
secondary=true
+ _to=""
while [ -n "$1" ] ; do
case "$1" in
dev)
@@ -99,6 +100,9 @@ ip_addr_show ()
secondary)
secondary=true ; primary=false ; shift
;;
+ to)
+ _to="$2" ; shift 2
+ ;;
*)
# Assume an interface name
dev="$1" ; shift 1
@@ -131,26 +135,35 @@ ${n}: ${dev}: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
EOF
if $primary && [ -r "$pf" ] ; then
read local <"$pf"
- calc_brd
- cat <<EOF
+ if [ -z "$_to" -o "${_to%/*}" = "${local%/*}" ] ; then
+ calc_brd
+ cat <<EOF
inet ${local} brd ${brd} scope global ${dev}
EOF
+ fi
fi
if $secondary && [ -r "$sf" ] ; then
while read local ; do
- calc_brd
- cat <<EOF
+ if [ -z "$_to" -o "${_to%/*}" = "${local%/*}" ] ; then
+ calc_brd
+ cat <<EOF
inet ${local} brd ${brd} scope global secondary ${dev}
EOF
+ fi
done <"$sf"
fi
- cat <<EOF
+ if [ -z "$_to" ] ; then
+ cat <<EOF
valid_lft forever preferred_lft forever
EOF
+ fi
}
n=1
for dev in $devices ; do
- show_iface
+ if [ -z "$_to" ] || \
+ grep -F "${_to%/*}/" "${FAKE_IP_STATE}/addresses/${dev}-"* >/dev/null ; then
+ show_iface
+ fi
n=$(($n + 1))
done
}
diff --git a/ctdb/tests/eventscripts/stubs/tdbdump b/ctdb/tests/eventscripts/stubs/tdbdump
new file mode 100755
index 00000000000..986c5c55499
--- /dev/null
+++ b/ctdb/tests/eventscripts/stubs/tdbdump
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+if [ "$FAKE_TDB_IS_OK" = "yes" ] ; then
+ echo "TDB good"
+ exit 0
+else
+ echo "TDB busted"
+ exit 1
+fi
diff --git a/ctdb/tests/eventscripts/stubs/tdbtool b/ctdb/tests/eventscripts/stubs/tdbtool
new file mode 100755
index 00000000000..c6c0a166044
--- /dev/null
+++ b/ctdb/tests/eventscripts/stubs/tdbtool
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+if [ -z "$1" ] ; then
+ if [ "$FAKE_TDBTOOL_SUPPORTS_CHECK" = "yes" ] ; then
+ echo "check"
+ fi
+fi
+
+if [ "$FAKE_TDB_IS_OK" = "yes" ] ; then
+ echo "Database integrity is OK"
+else
+ echo "Database is busted"
+fi
+
+exit 0