ctdb-tests: Add a policy routing test with misconfiguration
authorMartin Schwenke <martin@meltin.net>
Tue, 4 Aug 2015 07:03:50 +0000 (17:03 +1000)
committerAmitay Isaacs <amitay@samba.org>
Fri, 7 Aug 2015 06:37:38 +0000 (08:37 +0200)
To support this, extend the "ip route add" stub to detect duplicate
routes.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
Autobuild-User(master): Amitay Isaacs <amitay@samba.org>
Autobuild-Date(master): Fri Aug  7 08:37:38 CEST 2015 on sn-devel-104

ctdb/tests/eventscripts/13.per_ip_routing.023.sh [new file with mode: 0755]
ctdb/tests/eventscripts/stubs/ip

diff --git a/ctdb/tests/eventscripts/13.per_ip_routing.023.sh b/ctdb/tests/eventscripts/13.per_ip_routing.023.sh
new file mode 100755 (executable)
index 0000000..336e129
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "1 IP configured, broken configuration, takeip"
+
+setup_ctdb
+setup_ctdb_policy_routing
+
+# Configuration for 1 IP
+create_policy_routing_config 1 default
+
+# takeip should add routes for the given address
+ctdb_get_1_public_address |
+while read dev ip bits ; do
+    # Now add configuration breakage by changing default route into a
+    # link local route with a gateway
+    net=$(ipv4_host_addr_to_net "$ip" "$bits")
+    sed -i -e "s@0\.0\.0\.0/0@${net}@" "$CTDB_PER_IP_ROUTING_CONF"
+
+    ok <<EOF
+RTNETLINK answers: File exists
+add_routing_for_ip: failed to add route: ${net} via ${net%.*}.254 dev ${dev} table ctdb.${ip}
+EOF
+    simple_test_event "takeip" $dev $ip $bits
+done
index 59219d2c4f55cbc07b2eef1d83189b63d6603aab..325c892722d1888a8a93095390268cc89aae89ea 100755 (executable)
@@ -573,6 +573,16 @@ ip_route_add ()
     mkdir -p "$FAKE_IP_STATE/routes"
     touch "$_f"
 
+    # Check for duplicate
+    _prefix_regexp=$(echo "^${_prefix}" | sed -e 's@\.@\\.@g')
+    if [ -n "$_metric" ] ; then
+       _prefix_regexp="${_prefix_regexp} .*metric ${_metric} "
+    fi
+    if grep -q "$_prefix_regexp" "$_f" ; then
+       echo "RTNETLINK answers: File exists" >&2
+       exit 1
+    fi
+
     (
        flock 0