s4-torture: add test for CreateResTypeEnum().
authorGünther Deschner <gd@samba.org>
Tue, 3 May 2016 22:39:48 +0000 (00:39 +0200)
committerJeremy Allison <jra@samba.org>
Wed, 7 Sep 2016 21:56:16 +0000 (23:56 +0200)
Guenther

Signed-off-by: Guenther Deschner <gd@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source4/torture/rpc/clusapi.c

index d806dfb436e958ec39006c9ff6e3e2260eadcffa..f8779f3b4292a3f1e1feb0db1c352d45b4d0a285 100644 (file)
@@ -2540,6 +2540,105 @@ static bool test_ClusterControl(struct torture_context *tctx,
        return ret;
 }
 
+static bool test_CreateResTypeEnum(struct torture_context *tctx,
+                                  void *data)
+{
+       struct torture_clusapi_context *t =
+               talloc_get_type_abort(data, struct torture_clusapi_context);
+       struct dcerpc_binding_handle *b = t->p->binding_handle;
+       struct clusapi_CreateResTypeEnum r;
+       uint32_t dwType[] = {
+               CLUSTER_RESOURCE_TYPE_ENUM_NODES,
+               CLUSTER_RESOURCE_TYPE_ENUM_RESOURCES
+       };
+       uint32_t dwType_invalid[] = {
+               0x00000040,
+               0x00000080,
+               0x00000100 /* and many more ... */
+       };
+       const char *valid_names[] = {
+               "Physical Disk",
+               "Storage Pool"
+       };
+       const char *invalid_names[] = {
+               "INVALID_TYPE_XXXX"
+       };
+       struct ENUM_LIST *ReturnEnum;
+       WERROR rpc_status;
+       int i, s;
+
+       for (s = 0; s < ARRAY_SIZE(valid_names); s++) {
+
+               r.in.lpszTypeName = valid_names[s];
+
+               for (i=0; i < ARRAY_SIZE(dwType); i++) {
+
+                       r.in.dwType = dwType[i];
+                       r.out.ReturnEnum = &ReturnEnum;
+                       r.out.rpc_status = &rpc_status;
+
+                       torture_assert_ntstatus_ok(tctx,
+                               dcerpc_clusapi_CreateResTypeEnum_r(b, tctx, &r),
+                               "CreateResTypeEnum failed");
+                       torture_assert_werr_ok(tctx,
+                               r.out.result,
+                               "CreateResTypeEnum failed");
+               }
+
+               for (i=0; i < ARRAY_SIZE(dwType_invalid); i++) {
+
+                       r.in.dwType = dwType_invalid[i];
+                       r.out.ReturnEnum = &ReturnEnum;
+                       r.out.rpc_status = &rpc_status;
+
+                       torture_assert_ntstatus_ok(tctx,
+                               dcerpc_clusapi_CreateResTypeEnum_r(b, tctx, &r),
+                               "CreateResTypeEnum failed");
+                       torture_assert_werr_ok(tctx,
+                               r.out.result,
+                               "CreateResTypeEnum failed");
+               }
+       }
+
+       for (s = 0; s < ARRAY_SIZE(invalid_names); s++) {
+
+               r.in.lpszTypeName = invalid_names[s];
+
+               for (i=0; i < ARRAY_SIZE(dwType); i++) {
+
+                       r.in.dwType = dwType[i];
+                       r.out.ReturnEnum = &ReturnEnum;
+                       r.out.rpc_status = &rpc_status;
+
+                       torture_assert_ntstatus_ok(tctx,
+                               dcerpc_clusapi_CreateResTypeEnum_r(b, tctx, &r),
+                               "CreateResTypeEnum failed");
+                       torture_assert_werr_equal(tctx,
+                               r.out.result,
+                               WERR_CLUSTER_RESOURCE_TYPE_NOT_FOUND,
+                               "CreateResTypeEnum failed");
+               }
+
+               for (i=0; i < ARRAY_SIZE(dwType_invalid); i++) {
+
+                       r.in.dwType = dwType_invalid[i];
+                       r.out.ReturnEnum = &ReturnEnum;
+                       r.out.rpc_status = &rpc_status;
+
+                       torture_assert_ntstatus_ok(tctx,
+                               dcerpc_clusapi_CreateResTypeEnum_r(b, tctx, &r),
+                               "CreateResTypeEnum failed");
+                       torture_assert_werr_equal(tctx,
+                               r.out.result,
+                               WERR_CLUSTER_RESOURCE_TYPE_NOT_FOUND,
+                               "CreateResTypeEnum failed");
+               }
+       }
+
+
+       return true;
+}
+
 static bool test_OpenNetwork_int(struct torture_context *tctx,
                                 struct dcerpc_pipe *p,
                                 const char *lpszNetworkName,
@@ -3556,6 +3655,8 @@ void torture_tcase_cluster(struct torture_tcase *tcase)
                                      test_SetServiceAccountPassword);
        torture_tcase_add_simple_test(tcase, "ClusterControl",
                                      test_ClusterControl);
+       torture_tcase_add_simple_test(tcase, "CreateResTypeEnum",
+                                     test_CreateResTypeEnum);
 
 }