summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2012-01-15 14:54:14 +1100
committerMartin Schwenke <martin@meltin.net>2012-02-06 16:00:24 +1100
commited9eecb6bbfb8abe4c476b3117be89854cbe4765 (patch)
treecff6d94a4a7920f6684ac206e26a5d4ec793df4d
parent31487f31df154e29bdc8060cc8dfce4b436c6bf0 (diff)
downloadsamba-ed9eecb6bbfb8abe4c476b3117be89854cbe4765.tar.gz
samba-ed9eecb6bbfb8abe4c476b3117be89854cbe4765.tar.xz
samba-ed9eecb6bbfb8abe4c476b3117be89854cbe4765.zip
Tests: libctdb stubs should fail when current node disconnected
Signed-off-by: Martin Schwenke <martin@meltin.net> (This used to be ctdb commit f96954b42b03f810f7b1732b5fe00c5dab2d8cb8)
-rw-r--r--ctdb/tests/src/libctdb_test.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/ctdb/tests/src/libctdb_test.c b/ctdb/tests/src/libctdb_test.c
index 8bedb4bfe9..73ba155a29 100644
--- a/ctdb/tests/src/libctdb_test.c
+++ b/ctdb/tests/src/libctdb_test.c
@@ -289,11 +289,35 @@ void libctdb_test_fake_setup(struct ctdb_connection *ctdb)
}
}
+/* Support... */
+static bool current_node_is_connected (struct ctdb_connection *ctdb)
+{
+ int i;
+ for (i = 0; i < ctdb->nodemap->num; i++) {
+ if (ctdb->nodemap->nodes[i].pnn == ctdb->current_node) {
+ if (ctdb->nodemap->nodes[i].flags &
+ (NODE_FLAGS_DISCONNECTED | NODE_FLAGS_DELETED)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ }
+
+ /* Shouldn't really happen, so fag an error */
+ return false;
+}
+
/* Stubs... */
bool ctdb_getnodemap(struct ctdb_connection *ctdb,
uint32_t destnode, struct ctdb_node_map **nodemap)
{
+ if (!current_node_is_connected(ctdb)) {
+ *nodemap = NULL;
+ return false;
+ }
+
*nodemap = ctdb->nodemap;
return true;
}
@@ -306,6 +330,11 @@ void ctdb_free_nodemap(struct ctdb_node_map *nodemap)
bool ctdb_getifaces(struct ctdb_connection *ctdb,
uint32_t destnode, struct ctdb_ifaces_list **ifaces)
{
+ if (!current_node_is_connected(ctdb)) {
+ *ifaces = NULL;
+ return false;
+ }
+
*ifaces = ctdb->ifaces;
return true;
}
@@ -319,6 +348,10 @@ bool ctdb_getpnn(struct ctdb_connection *ctdb,
uint32_t destnode,
uint32_t *pnn)
{
+ if (!current_node_is_connected(ctdb)) {
+ return false;
+ }
+
if (destnode == CTDB_CURRENT_NODE) {
*pnn = ctdb->current_node;
} else {
@@ -331,6 +364,10 @@ bool ctdb_getrecmode(struct ctdb_connection *ctdb,
uint32_t destnode,
uint32_t *recmode)
{
+ if (!current_node_is_connected(ctdb)) {
+ return false;
+ }
+
*recmode = 0;
return true;
}
@@ -339,6 +376,10 @@ bool ctdb_getrecmaster(struct ctdb_connection *ctdb,
uint32_t destnode,
uint32_t *recmaster)
{
+ if (!current_node_is_connected(ctdb)) {
+ return false;
+ }
+
*recmaster = ctdb->recmaster;
return true;
}
@@ -346,6 +387,11 @@ bool ctdb_getrecmaster(struct ctdb_connection *ctdb,
bool ctdb_getvnnmap(struct ctdb_connection *ctdb,
uint32_t destnode, struct ctdb_vnn_map **vnnmap)
{
+ if (!current_node_is_connected(ctdb)) {
+ *vnnmap = NULL;
+ return false;
+ }
+
*vnnmap = ctdb->vnnmap;
return true;
}