s4-torture: add test for ClusterControl to clusapi testsuite.
authorGünther Deschner <gd@samba.org>
Wed, 1 Jul 2015 13:14:19 +0000 (15:14 +0200)
committerJosé A. Rivera <jarrpa@samba.org>
Tue, 14 Jul 2015 19:21:20 +0000 (21:21 +0200)
Guenther

Signed-off-by: Günther Deschner <gd@samba.org>
Reviewed-by: Jose A. Rivera <jarrpa@samba.org>
source4/torture/rpc/witness.c

index f040e0b9ea4b314f559d19e15c747da98ed6beb5..150ba7680b03119cc063cd235d9f271b02fb1192 100644 (file)
@@ -587,7 +587,9 @@ static bool test_GetResourceState_int(struct torture_context *tctx,
 
 static bool toggle_cluster_resource_state(struct torture_context *tctx,
                                          struct dcerpc_pipe *p,
-                                         const char *resource_name)
+                                         const char *resource_name,
+                                         enum clusapi_ClusterResourceState *old_state,
+                                         enum clusapi_ClusterResourceState *new_state)
 {
        struct policy_handle hResource;
        enum clusapi_ClusterResourceState State;
@@ -599,6 +601,10 @@ static bool toggle_cluster_resource_state(struct torture_context *tctx,
                test_GetResourceState_int(tctx, p, &hResource, &State),
                "failed to query resource state");
 
+       if (old_state) {
+               *old_state = State;
+       }
+
        switch (State) {
        case ClusterResourceOffline:
                if (!test_OnlineResource_int(tctx, p, &hResource)) {
@@ -619,6 +625,14 @@ static bool toggle_cluster_resource_state(struct torture_context *tctx,
                break;
        }
 
+       torture_assert(tctx,
+               test_GetResourceState_int(tctx, p, &hResource, &State),
+               "failed to query resource state");
+
+       if (new_state) {
+               *new_state = State;
+       }
+
        test_CloseResource_int(tctx, p, &hResource);
 
        return true;
@@ -645,6 +659,7 @@ static bool test_witness_AsyncNotify(struct torture_context *tctx,
                struct witness_interfaceInfo interface = state->list->interfaces[i];
                struct witness_Register reg;
                struct tevent_req *req;
+               enum clusapi_ClusterResourceState old_state, new_state;
 
                if (!check_valid_interface(tctx, &interface)) {
                        continue;
@@ -675,8 +690,9 @@ static bool test_witness_AsyncNotify(struct torture_context *tctx,
                torture_assert(tctx, req, "failed to create request");
 
                torture_assert(tctx,
-                       toggle_cluster_resource_state(tctx, state->clusapi.p, state->net_name),
+                       toggle_cluster_resource_state(tctx, state->clusapi.p, state->net_name, &old_state, &new_state),
                        "failed to toggle cluster resource state");
+               torture_assert(tctx, old_state != new_state, "failed to change cluster resource state");
 
                torture_assert(tctx,
                        tevent_req_poll(req, tctx->ev),
@@ -691,6 +707,11 @@ static bool test_witness_AsyncNotify(struct torture_context *tctx,
                        "Failed to unregister");
 
                ZERO_STRUCT(state->context_handle);
+
+               torture_assert(tctx,
+                       toggle_cluster_resource_state(tctx, state->clusapi.p, state->net_name, &old_state, &new_state),
+                       "failed to toggle cluster resource state");
+               torture_assert(tctx, old_state != new_state, "failed to change cluster resource state");
        }
 
        return true;