#define ctdb_cmdline_client(x, y) \
ctdb_cmdline_client_stub(x, y)
+#define tevent_context_init(x) \
+ tevent_context_init_stub(x)
#define ctdb_ctrl_getnodemap(ctdb, timelimit, pnn, tmp_ctx, nodemap) \
ctdb_ctrl_getnodemap_stub(ctdb, timelimit, pnn, tmp_ctx, nodemap)
#define ctdb_ctrl_get_ifaces(ctdb, timelimit, pnn, tmp_ctx, ifaces) \
ctdb_client_check_message_handlers_stub(ctdb, ids, argc, result)
#define ctdb_ctrl_getcapabilities(ctdb, timeout, destnode, capabilities) \
ctdb_ctrl_getcapabilities_stub(ctdb, timeout, destnode, capabilities)
+#define ctdb_sys_have_ip(addr) \
+ ctdb_sys_have_ip_stub(addr)
#include "tools/ctdb.c"
#endif /* CTDB_TEST_USE_MAIN */
#undef ctdb_cmdline_client
+#undef tevent_context_init
+/* This is called in client/ctdb_client.c so needs a declaration... */
+struct tevent_context *tevent_context_init(TALLOC_CTX *mem_ctx);
#include "common/cmdline.c"
#undef ctdb_ctrl_getdebseqnum
#undef ctdb_client_check_message_handlers
#undef ctdb_ctrl_getcapabilities
+#undef ctdb_sys_have_ip
#undef TIMELIMIT
#include "tools/ctdb_vacuum.c"
along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
+/* Useful for functions that don't get struct ctdb_context passed */
+static struct ctdb_context *ctdb_global;
+
/* Read a nodemap from stdin. Each line looks like:
* <PNN> <FLAGS> [RECMASTER] [CURRENT] [CAPABILITIES]
* EOF or a blank line terminates input.
struct ctdb_context *ctdb_cmdline_client_stub(struct tevent_context *ev,
struct timeval req_timeout)
+{
+ return ctdb_global;
+}
+
+struct tevent_context *tevent_context_init_stub(TALLOC_CTX *mem_ctx)
{
struct ctdb_context *ctdb;
ctdb_test_stubs_fake_setup(ctdb);
- return ctdb;
+ ctdb_global = ctdb;
+
+ return tevent_context_init_byname(mem_ctx, NULL);
}
/* Copied from ctdb_recover.c */
*capabilities = ctdb->nodes[destnode]->capabilities;
return 0;
}
+
+/* This is to support testing ctdb xpnn */
+
+bool ctdb_sys_have_ip_stub(ctdb_sock_addr *addr)
+{
+ int i;
+ struct ctdb_context *ctdb = ctdb_global;
+
+ for (i = 0; i < ctdb->num_nodes; i++) {
+ ctdb_sock_addr node_addr;
+
+ if (ctdb->pnn == ctdb->nodes[i]->pnn) {
+ if (!parse_ip(ctdb->nodes[i]->address.address, NULL, 0,
+ &node_addr)) {
+ continue;
+ }
+ if (ctdb_same_ip(addr, &node_addr)) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
cat >"$CTDB_NATGW_NODES"
}
+setup_nodes ()
+{
+ debug "Setting up CTDB_NODES"
+
+ # These will accumulate, 1 per test... but will be cleaned up at
+ # the end.
+ export CTDB_NODES=$(mktemp --tmpdir="$TEST_VAR_DIR")
+
+ cat >"$CTDB_NODES"
+}
+
simple_test ()
{
_out=$($VALGRIND $test_prog "$@" 2>&1)
--- /dev/null
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "missing nodes file"
+
+setup_nodes <<EOF
+192.168.20.41
+192.168.20.42
+192.168.20.43
+EOF
+
+rm -f "$CTDB_NODES"
+
+required_result 255 <<EOF
+DATE TIME [PID]: Failed to read nodes file
+EOF
+
+simple_test <<EOF
+EOF
--- /dev/null
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "missing nodes file"
+
+setup_nodes <<EOF
+192.168.20.41
+192.168.20.42
+192.168.20.43
+EOF
+
+required_result 0 <<EOF
+192.168.20.41
+192.168.20.42
+192.168.20.43
+EOF
+
+simple_test <<EOF
+EOF
--- /dev/null
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "3 nodes, current is 0"
+
+setup_nodes <<EOF
+192.168.20.41
+192.168.20.42
+192.168.20.43
+EOF
+
+required_result 0 "PNN:0"
+
+simple_test <<EOF
+NODEMAP
+0 192.168.20.41 0x0 CURRENT
+1 192.168.20.42 0x0
+2 192.168.20.43 0x0
+EOF
--- /dev/null
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "3 nodes, current is 2"
+
+setup_nodes <<EOF
+192.168.20.41
+192.168.20.42
+192.168.20.43
+EOF
+
+required_result 0 "PNN:2"
+
+simple_test <<EOF
+NODEMAP
+0 192.168.20.41 0x0
+1 192.168.20.42 0x0
+2 192.168.20.43 0x0 CURRENT
+EOF
--- /dev/null
+#!/bin/sh
+
+. "${TEST_SCRIPTS_DIR}/unit.sh"
+
+define_test "missing nodes file"
+
+setup_nodes <<EOF
+192.168.20.41
+192.168.20.42
+192.168.20.43
+EOF
+
+rm -f "$CTDB_NODES"
+
+required_result 255 <<EOF
+DATE TIME [PID]: Failed to read nodes file
+EOF
+
+simple_test <<EOF
+NODEMAP
+0 192.168.20.41 0x0 CURRENT
+1 192.168.20.42 0x0
+2 192.168.20.43 0x0
+EOF