From 3af858e6f4990599c23b54d05c42187400fd1426 Mon Sep 17 00:00:00 2001 From: Martin Schwenke Date: Tue, 18 Feb 2014 11:34:11 +1100 Subject: [PATCH] ctdb-tests: Support fake capabilities in CTDB tool stub ... and add a test to make sure it works. Signed-off-by: Martin Schwenke Reviewed-by: Amitay Isaacs --- ctdb/tests/src/ctdb_test_stubs.c | 24 +++++++++-- ctdb/tests/tool/stubby.getcapabilities.004.sh | 57 +++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 4 deletions(-) create mode 100755 ctdb/tests/tool/stubby.getcapabilities.004.sh diff --git a/ctdb/tests/src/ctdb_test_stubs.c b/ctdb/tests/src/ctdb_test_stubs.c index 456b1fdc0ce..3ca7b9112ea 100644 --- a/ctdb/tests/src/ctdb_test_stubs.c +++ b/ctdb/tests/src/ctdb_test_stubs.c @@ -18,8 +18,14 @@ */ /* Read a nodemap from stdin. Each line looks like: - * [RECMASTER] [CURRENT] + * [RECMASTER] [CURRENT] [CAPABILITIES] * EOF or a blank line terminates input. + * + * By default, capablities for each node are + * CTDB_CAP_RECMASTER|CTDB_CAP_LMASTER|CTDB_CAP_NATGW. These 3 + * capabilities can be faked off by adding, for example, + * -CTDB_CAP_RECMASTER. LVS can be faked on by adding + * CTDB_CAP_LVS. */ void ctdb_test_stubs_read_nodemap(struct ctdb_context *ctdb) { @@ -33,7 +39,7 @@ void ctdb_test_stubs_read_nodemap(struct ctdb_context *ctdb) while ((fgets(line, sizeof(line), stdin) != NULL) && (line[0] != '\n')) { - uint32_t pnn, flags; + uint32_t pnn, flags, capabilities; char *tok, *t; const char *ip; ctdb_sock_addr saddr; @@ -70,6 +76,7 @@ void ctdb_test_stubs_read_nodemap(struct ctdb_context *ctdb) continue; } flags = (uint32_t)strtoul(tok, NULL, 0); + capabilities = CTDB_CAP_RECMASTER|CTDB_CAP_LMASTER|CTDB_CAP_NATGW; tok = strtok(NULL, " \t"); while (tok != NULL) { @@ -77,6 +84,14 @@ void ctdb_test_stubs_read_nodemap(struct ctdb_context *ctdb) ctdb->pnn = pnn; } else if (strcmp(tok, "RECMASTER") == 0) { ctdb->recovery_master = pnn; + } else if (strcmp(tok, "-CTDB_CAP_RECMASTER") == 0) { + capabilities &= ~CTDB_CAP_RECMASTER; + } else if (strcmp(tok, "-CTDB_CAP_LMASTER") == 0) { + capabilities &= ~CTDB_CAP_LMASTER; + } else if (strcmp(tok, "-CTDB_CAP_NATGW") == 0) { + capabilities &= ~CTDB_CAP_NATGW; + } else if (strcmp(tok, "CTDB_CAP_LVS") == 0) { + capabilities |= CTDB_CAP_LVS; } tok = strtok(NULL, " \t"); } @@ -98,6 +113,7 @@ void ctdb_test_stubs_read_nodemap(struct ctdb_context *ctdb) ctdb->nodes[ctdb->num_nodes]->address.address = ip; ctdb->nodes[ctdb->num_nodes]->address.port = 0; ctdb->nodes[ctdb->num_nodes]->flags = flags; + ctdb->nodes[ctdb->num_nodes]->capabilities = capabilities; ctdb->num_nodes++; } } @@ -524,6 +540,6 @@ int ctdb_ctrl_getcapabilities_stub(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t *capabilities) { - *capabilities = CTDB_CAP_RECMASTER|CTDB_CAP_LMASTER|CTDB_CAP_NATGW; - return 0; + *capabilities = ctdb->nodes[destnode]->capabilities; + return 0; } diff --git a/ctdb/tests/tool/stubby.getcapabilities.004.sh b/ctdb/tests/tool/stubby.getcapabilities.004.sh new file mode 100755 index 00000000000..d3e24b492a7 --- /dev/null +++ b/ctdb/tests/tool/stubby.getcapabilities.004.sh @@ -0,0 +1,57 @@ +#!/bin/sh + +. "${TEST_SCRIPTS_DIR}/unit.sh" + +define_test "3 nodes, all ok, non-default capabilities" + +set -e + +input="\ +NODEMAP +0 192.168.20.41 0x0 CURRENT RECMASTER CTDB_CAP_LVS +1 192.168.20.42 0x0 -CTDB_CAP_LMASTER +2 192.168.20.43 0x0 -CTDB_CAP_RECMASTER -CTDB_CAP_NATGW + +IFACES +:Name:LinkStatus:References: +:eth2:1:2: +:eth1:1:4: + +VNNMAP +654321 +0 +1 +2" + +required_result 0 <