From cfef70236325c0edd9f1253ea801bfb0bf6f529e Mon Sep 17 00:00:00 2001 From: Martin Schwenke Date: Wed, 10 Oct 2012 14:48:59 +1100 Subject: tests/eventscripts: add extra infrastructure for policy routing tests Less copying and pasting is a good thing... Signed-off-by: Martin Schwenke (This used to be ctdb commit 7d4b8cce96f33fff647a0c9d259c121dfc8403e9) --- ctdb/tests/eventscripts/13.per_ip_routing.001.sh | 13 ++--- ctdb/tests/eventscripts/13.per_ip_routing.002.sh | 2 + ctdb/tests/eventscripts/13.per_ip_routing.003.sh | 15 ++--- ctdb/tests/eventscripts/13.per_ip_routing.004.sh | 13 +---- ctdb/tests/eventscripts/13.per_ip_routing.005.sh | 33 +++-------- ctdb/tests/eventscripts/13.per_ip_routing.006.sh | 31 +++------- ctdb/tests/eventscripts/13.per_ip_routing.007.sh | 36 +++--------- ctdb/tests/eventscripts/13.per_ip_routing.008.sh | 34 +++-------- ctdb/tests/eventscripts/13.per_ip_routing.009.sh | 39 +++---------- ctdb/tests/eventscripts/13.per_ip_routing.010.sh | 50 +++------------- ctdb/tests/eventscripts/13.per_ip_routing.011.sh | 39 +++---------- ctdb/tests/eventscripts/13.per_ip_routing.012.sh | 30 ++-------- ctdb/tests/eventscripts/13.per_ip_routing.013.sh | 26 ++------- ctdb/tests/eventscripts/13.per_ip_routing.014.sh | 33 +++-------- ctdb/tests/eventscripts/13.per_ip_routing.015.sh | 21 ++----- ctdb/tests/eventscripts/scripts/local.sh | 72 ++++++++++++++++++++++++ 16 files changed, 170 insertions(+), 317 deletions(-) diff --git a/ctdb/tests/eventscripts/13.per_ip_routing.001.sh b/ctdb/tests/eventscripts/13.per_ip_routing.001.sh index 3d22864edf..8523c1010f 100755 --- a/ctdb/tests/eventscripts/13.per_ip_routing.001.sh +++ b/ctdb/tests/eventscripts/13.per_ip_routing.001.sh @@ -6,11 +6,10 @@ define_test "not configured" setup_ctdb -ok <"$CTDB_PER_IP_ROUTING_CONF" <"$CTDB_PER_IP_ROUTING_CONF" <"$CTDB_PER_IP_ROUTING_CONF" <"$CTDB_PER_IP_ROUTING_CONF" <"$CTDB_PER_IP_ROUTING_CONF" +# configure all addresses +create_policy_routing_config all default +# add routes for all 1 IP ctdb_get_1_public_address | -{ - read dev ip bits - - net=$(ipv4_host_addr_to_net "$ip" "$bits") - gw="${net%.*}.1" # a dumb, calculated default - +while read dev ip bits ; do ok_null - simple_test_event "takeip" $dev $ip $bits +done - ok <"$CTDB_PER_IP_ROUTING_CONF" +# create config for all IPs +create_policy_routing_config all default -# Now do a takeip for each IP on the "current" node ctdb_get_my_public_addresses | -{ - policy_rules="" - policy_routes="" - while read dev ip bits ; do - - net=$(ipv4_host_addr_to_net "$ip" "$bits") - gw="${net%.*}.1" # a dumb, calculated default - - ok_null - - simple_test_event "takeip" $dev $ip $bits - - policy_rules="${policy_rules} -${CTDB_PER_IP_ROUTING_RULE_PREF}: from $ip lookup ctdb.$ip " - policy_routes="${policy_routes} -# ip route show table ctdb.$ip -$net dev $dev scope link -default via $gw dev $dev " - done - - ok <"$CTDB_PER_IP_ROUTING_CONF" <"$CTDB_PER_IP_ROUTING_CONF" <"$CTDB_PER_IP_ROUTING_CONF" <"$CTDB_PER_IP_ROUTING_CONF" <"$FAKE_CTDB_SCRIPTSTATUS/$script" } +###################################################################### + setup_ctdb_policy_routing () { export CTDB_PER_IP_ROUTING_CONF="$CTDB_BASE/policy_routing" @@ -375,6 +377,76 @@ setup_ctdb_policy_routing () rm -f "$CTDB_PER_IP_ROUTING_CONF" } +# Create policy routing configuration in $CTDB_PER_IP_ROUTING_CONF. +# $1 is the number of assigned IPs to use (, all), defaulting to +# 1. If $2 is "default" then a default route is also added. +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" + fi | + while read _dev _ip _bits ; do + _net=$(ipv4_host_addr_to_net "$_ip" "$_bits") + _gw="${_net%.*}.1" # a dumb, calculated default + + echo "$_ip $_net" + + if [ "$_should_add_default" = "default" ] ; then + echo "$_ip 0.0.0.0/0 $_gw" + fi + done >"$CTDB_PER_IP_ROUTING_CONF" +} + +# Check the routes against those that are expected. $1 is the number +# of assigned IPs to use (, all), defaulting to 1. If $2 is +# "default" then expect default routes to have been added. +check_routes () +{ + _num_ips="${1:-1}" + _should_add_default="$2" + + _policy_rules="" + _policy_routes="" + + ctdb_get_my_public_addresses | + if [ "$_num_ips" = "all" ] ; then + cat + else + head -n "$_num_ips" + fi | { + while read _dev _ip _bits ; do + _net=$(ipv4_host_addr_to_net "$_ip" "$_bits") + _gw="${_net%.*}.1" # a dumb, calculated default + + _policy_rules="${_policy_rules} +${CTDB_PER_IP_ROUTING_RULE_PREF}: from $_ip lookup ctdb.$_ip " + _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} +default via $_gw dev $_dev " + fi + done + + ok <