Author: gd
Date: 2007-10-16 14:33:34 +0000 (Tue, 16 Oct 2007)
New Revision: 25670

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=25670

Log:
Add torture test for frsapi_IsPathReplicated().

Guenther

Modified:
   branches/SAMBA_4_0/source/librpc/idl/frsapi.idl
   branches/SAMBA_4_0/source/torture/rpc/frsapi.c


Changeset:
Modified: branches/SAMBA_4_0/source/librpc/idl/frsapi.idl
===================================================================
--- branches/SAMBA_4_0/source/librpc/idl/frsapi.idl     2007-10-16 14:09:49 UTC 
(rev 25669)
+++ branches/SAMBA_4_0/source/librpc/idl/frsapi.idl     2007-10-16 14:33:34 UTC 
(rev 25670)
@@ -71,13 +71,19 @@
 
        /****************/
        /* Function 0x08 */
+       typedef [v1_enum] enum {
+               FRSAPI_REPLICA_SET_TYPE_0       = 0x00000000,
+               FRSAPI_REPLICA_SET_TYPE_DOMAIN  = 0x00000002,
+               FRSAPI_REPLICA_SET_TYPE_DFS     = 0x00000003
+       } frsapi_ReplicaSetType;
+
        WERROR frsapi_IsPathReplicated(
                [in,unique] [string,charset(UTF16)] uint16 *path,
-               [in] uint32 unknown,
+               [in] frsapi_ReplicaSetType replica_set_type,
                [out] uint32 *unknown1,
                [out] uint32 *unknown2,
                [out] uint32 *unknown3,
-               [out] GUID *guid
+               [out] GUID *replica_set_guid
        );
 
        /****************/

Modified: branches/SAMBA_4_0/source/torture/rpc/frsapi.c
===================================================================
--- branches/SAMBA_4_0/source/torture/rpc/frsapi.c      2007-10-16 14:09:49 UTC 
(rev 25669)
+++ branches/SAMBA_4_0/source/torture/rpc/frsapi.c      2007-10-16 14:33:34 UTC 
(rev 25670)
@@ -105,6 +105,83 @@
        return true;
 }
 
+static bool test_IsPathReplicated_err(struct torture_context *tctx,
+                                     struct dcerpc_pipe *p,
+                                     const char *path,
+                                     uint32_t type,
+                                     WERROR werr)
+{
+       struct frsapi_IsPathReplicated r;
+       struct GUID guid;
+       uint32_t unknown1, unknown2, unknown3 = 0;
+
+       ZERO_STRUCT(r);
+
+       r.in.path = path;
+       r.in.replica_set_type = type;
+       r.out.unknown1 = &unknown1;
+       r.out.unknown2 = &unknown2;
+       r.out.unknown3 = &unknown3;
+       r.out.replica_set_guid = &guid;
+
+       torture_assert_ntstatus_ok(tctx,
+               dcerpc_frsapi_IsPathReplicated(p, tctx, &r),
+               "IsPathReplicated failed");
+
+       torture_assert_werr_equal(tctx, r.out.result, werr,
+                                 "GetDsPollingIntervalW failed");
+
+       return true;
+}
+
+static bool _test_IsPathReplicated(struct torture_context *tctx,
+                                 struct dcerpc_pipe *p,
+                                 const char *path,
+                                 uint32_t type)
+{
+       return test_IsPathReplicated_err(tctx, p, path, type, WERR_OK);
+}
+
+static bool test_IsPathReplicated(struct torture_context *tctx,
+                                 struct dcerpc_pipe *p)
+{
+       const uint32_t lvls[] = {
+               FRSAPI_REPLICA_SET_TYPE_0,
+               FRSAPI_REPLICA_SET_TYPE_DOMAIN,
+               FRSAPI_REPLICA_SET_TYPE_DFS };
+       int i;
+
+       if (!test_IsPathReplicated_err(tctx, p, NULL, 0,
+                                      WERR_FRS_INVALID_SERVICE_PARAMETER)) {
+               return false;
+       }
+
+       for (i=0; i<ARRAY_SIZE(lvls); i++) {
+               if (!_test_IsPathReplicated(tctx, p, dcerpc_server_name(p),
+                                           lvls[i])) {
+                       return false;
+               }
+       }
+
+       for (i=0; i<ARRAY_SIZE(lvls); i++) {
+               const char *path = talloc_asprintf(tctx, "\\\\%s\\SYSVOL",
+                                                  dcerpc_server_name(p));
+               if (!_test_IsPathReplicated(tctx, p, path, lvls[i])) {
+                       return false;
+               }
+       }
+
+       for (i=0; i<ARRAY_SIZE(lvls); i++) {
+               if (!_test_IsPathReplicated(tctx, p,
+                                           "C:\\windows\\sysvol\\domain",
+                                           lvls[i])) {
+                       return false;
+               }
+       }
+
+       return true;
+}
+
 struct torture_suite *torture_rpc_frsapi(TALLOC_CTX *mem_ctx)
 {
        struct torture_rpc_tcase *tcase;
@@ -117,5 +194,8 @@
        test = torture_rpc_tcase_add_test(tcase, "DsPollingIntervalW",
                                          test_DsPollingIntervalW);
 
+       test = torture_rpc_tcase_add_test(tcase, "IsPathReplicated",
+                                         test_IsPathReplicated);
+
        return suite;
 }

Reply via email to