Skip to content

Commit

Permalink
ctdb-tests: Populate per-node known IPs inline
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Amitay Isaacs <[email protected]>
  • Loading branch information
martin-schwenke authored and Martin Schwenke committed Feb 24, 2017
1 parent 5bb6ec6 commit 58296e3
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 17 deletions.
30 changes: 13 additions & 17 deletions ctdb/tests/src/ipalloc_read_known_ips.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
Expand Down
21 changes: 21 additions & 0 deletions ctdb/tests/takeover/lcp2.034.sh
Original file line number Diff line number Diff line change
@@ -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
35 changes: 35 additions & 0 deletions ctdb/tests/takeover_helper/030.sh
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 58296e3

Please sign in to comment.