s4-torture: add test for ClusterControl to clusapi testsuite.
authorGünther Deschner <gd@samba.org>
Thu, 9 Jul 2015 13:44:41 +0000 (15:44 +0200)
committerJosé A. Rivera <jarrpa@samba.org>
Tue, 14 Jul 2015 22:25:38 +0000 (00:25 +0200)
Guenther

Signed-off-by: Günther Deschner <gd@samba.org>
Reviewed-by: Jose A. Rivera <jarrpa@samba.org>
Autobuild-User(master): José A. Rivera <jarrpa@samba.org>
Autobuild-Date(master): Wed Jul 15 00:25:38 CEST 2015 on sn-devel-104

source4/torture/rpc/clusapi.c

index 3bf57ff695b66a8999f57afe4d576c28e6d3aeda..f6f3ff5b9b6dc4f971f8104b1c39277ae82d9003 100644 (file)
@@ -1805,6 +1805,73 @@ static bool test_SetServiceAccountPassword(struct torture_context *tctx,
        return true;
 }
 
+static bool test_ClusterControl_int(struct torture_context *tctx,
+                                   struct dcerpc_pipe *p,
+                                   struct policy_handle *Cluster)
+{
+       struct dcerpc_binding_handle *b = p->binding_handle;
+       struct clusapi_ClusterControl r;
+       uint32_t lpBytesReturned;
+       uint32_t lpcbRequired;
+       WERROR rpc_status;
+
+       r.in.hCluster = *Cluster;
+       r.in.dwControlCode = 0;
+       r.in.lpInBuffer = NULL;
+       r.in.nInBufferSize = 0;
+       r.in.nOutBufferSize = 0;
+       r.out.lpOutBuffer = NULL;
+       r.out.lpBytesReturned = &lpBytesReturned;
+       r.out.lpcbRequired = &lpcbRequired;
+       r.out.rpc_status = &rpc_status;
+
+       torture_assert_ntstatus_ok(tctx,
+               dcerpc_clusapi_ClusterControl_r(b, tctx, &r),
+               "ClusterControl failed");
+       torture_assert_werr_equal(tctx,
+               r.out.result,
+               WERR_INVALID_FUNCTION,
+               "ClusterControl failed");
+
+       r.in.dwControlCode = CLUSCTL_CLUSTER_GET_RO_COMMON_PROPERTIES;
+
+       torture_assert_ntstatus_ok(tctx,
+               dcerpc_clusapi_ClusterControl_r(b, tctx, &r),
+               "ClusterControl failed");
+
+       if (W_ERROR_EQUAL(r.out.result, WERR_MORE_DATA)) {
+               r.out.lpOutBuffer = talloc_zero_array(tctx, uint8_t, *r.out.lpcbRequired);
+               r.in.nOutBufferSize = *r.out.lpcbRequired;
+               torture_assert_ntstatus_ok(tctx,
+                       dcerpc_clusapi_ClusterControl_r(b, tctx, &r),
+                       "ClusterControl failed");
+       }
+       torture_assert_werr_ok(tctx,
+               r.out.result,
+               "ClusterControl failed");
+
+       return true;
+}
+
+static bool test_ClusterControl(struct torture_context *tctx,
+                               void *data)
+{
+       struct torture_clusapi_context *t =
+               talloc_get_type_abort(data, struct torture_clusapi_context);
+       struct policy_handle Cluster;
+       bool ret;
+
+       if (!test_OpenCluster_int(tctx, t->p, &Cluster)) {
+               return false;
+       }
+
+       ret = test_ClusterControl_int(tctx, t->p, &Cluster);
+
+       test_CloseCluster_int(tctx, t->p, &Cluster);
+
+       return ret;
+}
+
 static bool test_OpenNetwork_int(struct torture_context *tctx,
                                 struct dcerpc_pipe *p,
                                 const char *lpszNetworkName,
@@ -2817,6 +2884,9 @@ void torture_tcase_cluster(struct torture_tcase *tcase)
                                      test_BackupClusterDatabase);
        torture_tcase_add_simple_test(tcase, "SetServiceAccountPassword",
                                      test_SetServiceAccountPassword);
+       torture_tcase_add_simple_test(tcase, "ClusterControl",
+                                     test_ClusterControl);
+
 }
 
 void torture_tcase_resource(struct torture_tcase *tcase)