*/
/* Read a nodemap from stdin. Each line looks like:
- * <PNN> <FLAGS> [RECMASTER] [CURRENT]
+ * <PNN> <FLAGS> [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)
{
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;
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) {
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");
}
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++;
}
}
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;
}
--- /dev/null
+#!/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 <<EOF
+RECMASTER: YES
+LMASTER: YES
+LVS: YES
+NATGW: YES
+EOF
+
+simple_test -n 0 <<EOF
+$input
+EOF
+
+required_result 0 <<EOF
+RECMASTER: YES
+LMASTER: NO
+LVS: NO
+NATGW: YES
+EOF
+
+simple_test -n 1 <<EOF
+$input
+EOF
+
+required_result 0 <<EOF
+RECMASTER: NO
+LMASTER: YES
+LVS: NO
+NATGW: NO
+EOF
+
+simple_test -n 2 <<EOF
+$input
+EOF