summaryrefslogtreecommitdiffstats
path: root/ctdb/tests/simple/60_recoverd_missing_ip.sh
blob: 88e450227b4096f38c0dd837d2bf3cdaf7afb0de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/bin/bash

test_info()
{
    cat <<EOF
Verify that the reconvery daemon handles unhosted IPs properly.
EOF
}

. "${TEST_SCRIPTS_DIR}/integration.bash"

ctdb_test_init "$@"

set -e

cluster_is_healthy

# Reset configuration
ctdb_restart_when_done

select_test_node_and_ips

echo "Running test against node $test_node and IP $test_ip"

# Find the interface
try_command_on_node $test_node "$CTDB ip -v -Y | awk -F: -v ip=$test_ip '\$2 == ip { print \$4 }'"
iface="$out"

if [ -z "$TEST_LOCAL_DAEMONS" ] ; then
    # Find the netmask
    try_command_on_node $test_node ip addr show to $test_ip
    mask="${out##*/}"
    mask="${mask%% *}"
else
    mask="24"
fi

echo "$test_ip/$mask is on $iface"

echo "Deleting IP $test_ip from all nodes"
try_command_on_node -v $test_node $CTDB delip -n all $test_ip

wait_until_ips_are_on_nodeglob '!' $test_node $test_ip

try_command_on_node -v all $CTDB ip

my_exit_hook ()
{
    if [ -z "$TEST_LOCAL_DAEMONS" ] ; then
	onnode -q all $CTDB enablescript "10.interface"
    fi
}

ctdb_test_exit_hook_add my_exit_hook

# This forces us to wait until the ipreallocated associated with the
# delips is complete.
try_command_on_node $test_node $CTDB sync

# Wait for a monitor event.  Then the next steps are unlikely to occur
# in the middle of a monitor event and will have the expected effect.
wait_for_monitor_event $test_node

if [ -z "$TEST_LOCAL_DAEMONS" ] ; then
    # Stop monitor events from bringing up the link status of an interface
    try_command_on_node $test_node $CTDB disablescript 10.interface
fi

echo "Marking interface $iface down on node $test_node"
try_command_on_node $test_node $CTDB setifacelink $iface down

try_command_on_node $test_node $CTDB clearlog recoverd

echo "Adding IP $test_ip to node $test_node"
try_command_on_node $test_node $CTDB addip $test_ip/$mask $iface

# Give the recovery daemon enough time to start doing IP verification
sleep_for 15

try_command_on_node $test_node $CTDB getlog recoverd

msg="Public IP '$test_ip' is not assigned and we could serve it"

if grep "$msg"  <<<"$out" ; then
    echo "BAD: the recovery daemon noticed that the IP was unhosted"
    exit 1
else
    echo "GOOD: the recovery daemon did not notice that the IP was unhosted"
fi

try_command_on_node $test_node $CTDB clearlog recoverd

echo "Marking interface $iface up on node $test_node"
try_command_on_node $test_node $CTDB setifacelink $iface up

wait_until_ips_are_on_nodeglob $test_node $test_ip

try_command_on_node -v $test_node $CTDB getlog recoverd

if grep "$msg" <<<"$out" ; then
    echo "GOOD: the recovery daemon noticed that the IP was unhosted"
else
    echo "BAD: the recovery daemon did not notice that the IP was unhosted"
    exit 1
fi