diff options
author | Martin Schwenke <martin@meltin.net> | 2017-02-03 14:41:57 +1100 |
---|---|---|
committer | Martin Schwenke <martins@samba.org> | 2017-02-24 07:47:11 +0100 |
commit | 58296e3eae4010270f3bcabd284fe3a2428a21a2 (patch) | |
tree | be585da05f447f84132659f49de1d043e5bab25a | |
parent | 5bb6ec6af2359a5b463349df54c168741cb1aca3 (diff) | |
download | samba-58296e3eae4010270f3bcabd284fe3a2428a21a2.tar.gz |
ctdb-tests: Populate per-node known IPs inline
At the moment this is done as a post-processing step for any nodes
that have no known IPs. However, this doesn't allow testing of
scenarios where there no known IPs on one or more nodes.
Add relevant tests.
Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
-rw-r--r-- | ctdb/tests/src/ipalloc_read_known_ips.c | 30 | ||||
-rwxr-xr-x | ctdb/tests/takeover/lcp2.034.sh | 21 | ||||
-rwxr-xr-x | ctdb/tests/takeover_helper/030.sh | 35 |
3 files changed, 69 insertions, 17 deletions
diff --git a/ctdb/tests/src/ipalloc_read_known_ips.c b/ctdb/tests/src/ipalloc_read_known_ips.c index bd4366cf42f..5725d6dc523 100644 --- a/ctdb/tests/src/ipalloc_read_known_ips.c +++ b/ctdb/tests/src/ipalloc_read_known_ips.c @@ -53,6 +53,7 @@ static bool add_ip(TALLOC_CTX *mem_ctx, /* Format of each line is "IP CURRENT_PNN [ALLOWED_PNN,...]". * If multi is true then ALLOWED_PNNs are not allowed. */ static bool read_ctdb_public_ip_info_node(bool multi, + int numnodes, struct ctdb_public_ip_list **k, struct ctdb_public_ip_list *known) { @@ -104,6 +105,14 @@ static bool read_ctdb_public_ip_info_node(bool multi, tok = strtok(NULL, " \t#"); if (tok == NULL) { + if (! multi) { + for (n = 0; n < numnodes; n++) { + if (! add_ip(known, &known[n], + &addr, pnn)) { + goto fail; + } + } + } continue; } @@ -146,31 +155,18 @@ struct ctdb_public_ip_list * ipalloc_read_known_ips(TALLOC_CTX *ctx, if (multi) { for (n = 0; n < numnodes; n++) { - if (! read_ctdb_public_ip_info_node(multi, &k, known)) { + if (! read_ctdb_public_ip_info_node(multi, numnodes, + &k, known)) { goto fail; } known[n] = *k; } } else { - if (! read_ctdb_public_ip_info_node(multi, &k, known)) { + if (! read_ctdb_public_ip_info_node(multi, numnodes, + &k, known)) { goto fail; } - - /* Copy it to any nodes that don't have a - * list assigned - */ - for (n = 0; n < numnodes; n++) { - if (known[n].num == 0) { - known[n].num = k->num; - known[n].ip = talloc_memdup( - known, k->ip, - k->num * sizeof(struct ctdb_public_ip)); - if (known[n].ip == NULL) { - goto fail; - } - } - } } return known; diff --git a/ctdb/tests/takeover/lcp2.034.sh b/ctdb/tests/takeover/lcp2.034.sh new file mode 100755 index 00000000000..6cea2d5f626 --- /dev/null +++ b/ctdb/tests/takeover/lcp2.034.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +. "${TEST_SCRIPTS_DIR}/unit.sh" + +define_test "3 nodes, 1 without IP addresses" + +export CTDB_TEST_LOGLEVEL=ERR + +required_result <<EOF +192.168.140.4 0 +192.168.140.3 1 +192.168.140.2 0 +192.168.140.1 1 +EOF + +simple_test 0,0,0 <<EOF +192.168.140.1 -1 0,1 +192.168.140.2 -1 0,1 +192.168.140.3 -1 0,1 +192.168.140.4 -1 0,1 +EOF diff --git a/ctdb/tests/takeover_helper/030.sh b/ctdb/tests/takeover_helper/030.sh new file mode 100755 index 00000000000..e6411c5fc73 --- /dev/null +++ b/ctdb/tests/takeover_helper/030.sh @@ -0,0 +1,35 @@ +#!/bin/sh + +. "${TEST_SCRIPTS_DIR}/unit.sh" + +define_test "3 nodes, all ok, IPs defined on 2, IPs all unassigned" + +setup_ctdbd <<EOF +NODEMAP +0 192.168.20.41 0x0 CURRENT RECMASTER +1 192.168.20.42 0x0 +2 192.168.20.43 0x0 + +IFACES +:Name:LinkStatus:References: +:eth2:1:2: +:eth1:1:4: + +PUBLICIPS +10.0.0.31 -1 0,2 +10.0.0.32 -1 0,2 +10.0.0.33 -1 0,2 +10.0.0.34 -1 0,2 +EOF + +ok_null +test_takeover_helper + +required_result 0 <<EOF +Public IPs on ALL nodes +10.0.0.31 0 +10.0.0.32 2 +10.0.0.33 2 +10.0.0.34 0 +EOF +test_ctdb_ip_all |