summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2017-02-03 14:41:57 +1100
committerMartin Schwenke <martins@samba.org>2017-02-24 07:47:11 +0100
commit58296e3eae4010270f3bcabd284fe3a2428a21a2 (patch)
treebe585da05f447f84132659f49de1d043e5bab25a
parent5bb6ec6af2359a5b463349df54c168741cb1aca3 (diff)
downloadsamba-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.c30
-rwxr-xr-xctdb/tests/takeover/lcp2.034.sh21
-rwxr-xr-xctdb/tests/takeover_helper/030.sh35
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