예제 #1
0
        private void DRSUpdateRefs_Success_AddThenDel(DrsUpdateRefs_Versions ver)
        {
            uint ret = drsTestClient.DrsBind(EnvironmentConfig.Machine.WritableDC1, EnvironmentConfig.User.ParentDomainAdmin, DRS_EXTENSIONS_IN_FLAGS.DRS_EXT_BASE);

            try
            {
                BaseTestSite.Log.Add(LogEntryKind.Checkpoint, "Try to delete replication destination from repsTo for later testing. It MAY fails if there is no such record to delete");
                drsTestClient.DrsUpdateRefs(
                    EnvironmentConfig.Machine.WritableDC1,
                    ver,
                    (DsServer)EnvironmentConfig.MachineStore[EnvironmentConfig.Machine.WritableDC2],
                    DRS_OPTIONS.DRS_DEL_REF);
            }
            catch
            {
                BaseTestSite.Log.Add(LogEntryKind.Checkpoint, "No similar record to delete in repsTo. It's OK to continue");
            }

            drsTestClient.DrsUpdateRefs(
                EnvironmentConfig.Machine.WritableDC1,
                ver,
                (DsServer)EnvironmentConfig.MachineStore[EnvironmentConfig.Machine.WritableDC2],
                DRS_OPTIONS.DRS_ADD_REF);

            drsTestClient.DrsUpdateRefs(
                EnvironmentConfig.Machine.WritableDC1,
                ver,
                (DsServer)EnvironmentConfig.MachineStore[EnvironmentConfig.Machine.WritableDC2],
                DRS_OPTIONS.DRS_DEL_REF);
        }
        private void DRSUpdateRefs_NONExist_NC(DrsUpdateRefs_Versions ver)
        {
            uint ret = drsTestClient.DrsBind(EnvironmentConfig.Machine.WritableDC1, EnvironmentConfig.User.ParentDomainAdmin, DRS_EXTENSIONS_IN_FLAGS.DRS_EXT_BASE);

            DRS_MSG_UPDREFS req;

            EnvironmentConfig.Machine machine = EnvironmentConfig.Machine.WritableDC1;
            DsServer    dest = (DsServer)EnvironmentConfig.MachineStore[EnvironmentConfig.Machine.WritableDC2];
            DRS_OPTIONS options;

            try
            {
                BaseTestSite.Log.Add(LogEntryKind.Checkpoint, "Try to delete replication destination from repsTo for later testing. It MAY fails if there is no such record to delete");

                options = DRS_OPTIONS.DRS_DEL_REF;

                req = drsTestClient.CreateRequestForDrsUpdateRef(
                    machine,
                    ver,
                    dest,
                    options
                    );
                ret = drsTestClient.DRSClient.DrsUpdateRefs(EnvironmentConfig.DrsContextStore[machine], (uint)ver, req);
            }
            catch
            {
                BaseTestSite.Log.Add(LogEntryKind.Checkpoint, "No similar record to delete in repsTo. It's OK to continue");
            }


            options = DRS_OPTIONS.DRS_ADD_REF;
            req     = drsTestClient.CreateRequestForDrsUpdateRef(
                machine,
                ver,
                dest,
                options,
                NamingContext.None         // invalid value
                );
            ret = drsTestClient.DRSClient.DrsUpdateRefs(EnvironmentConfig.DrsContextStore[machine], (uint)ver, req);
            BaseTestSite.Assert.AreEqual <uint>((uint)Win32ErrorCode_32.ERROR_DS_DRA_BAD_NC, ret, "the server should return ERROR_DS_DRA_BAD_NC");

            options = DRS_OPTIONS.DRS_DEL_REF;
            req     = drsTestClient.CreateRequestForDrsUpdateRef(
                machine,
                ver,
                dest,
                options
                );
            ret = drsTestClient.DRSClient.DrsUpdateRefs(EnvironmentConfig.DrsContextStore[machine], (uint)ver, req);
        }
        private void DRSUpdateRefs_uuidDsaObjDest_NULL(DrsUpdateRefs_Versions ver)
        {
            uint ret = drsTestClient.DrsBind(EnvironmentConfig.Machine.WritableDC1, EnvironmentConfig.User.ParentDomainAdmin, DRS_EXTENSIONS_IN_FLAGS.DRS_EXT_BASE);

            DRS_MSG_UPDREFS req;

            EnvironmentConfig.Machine machine = EnvironmentConfig.Machine.WritableDC1;
            DsServer    dest = (DsServer)EnvironmentConfig.MachineStore[EnvironmentConfig.Machine.WritableDC2];
            DRS_OPTIONS options;

            try
            {
                BaseTestSite.Log.Add(LogEntryKind.Checkpoint, "Try to delete replication destination from repsTo for later testing. It MAY fails if there is no such record to delete");

                options = DRS_OPTIONS.DRS_DEL_REF;

                req = drsTestClient.CreateRequestForDrsUpdateRef(
                    machine,
                    ver,
                    dest,
                    options
                    );
                ret = drsTestClient.DRSClient.DrsUpdateRefs(EnvironmentConfig.DrsContextStore[machine], (uint)ver, req);
            }
            catch
            {
                BaseTestSite.Log.Add(LogEntryKind.Checkpoint, "No similar record to delete in repsTo. It's OK to continue");
            }

            options = DRS_OPTIONS.DRS_ADD_REF;
            req     = drsTestClient.CreateRequestForDrsUpdateRef(
                machine,
                ver,
                dest,
                options
                );

            // Invalid value
            switch (ver)
            {
            case DrsUpdateRefs_Versions.V1:
                req.V1.uuidDsaObjDest = Guid.Empty;
                break;

            case DrsUpdateRefs_Versions.V2:
                req.V2.uuidDsaObjDest = Guid.Empty;
                break;

            default:
                BaseTestSite.Assert.Fail("The version {0} is not supported.", ver);
                break;
            }

            ret = drsTestClient.DRSClient.DrsUpdateRefs(EnvironmentConfig.DrsContextStore[machine], (uint)ver, req);
            BaseTestSite.Assert.AreEqual <uint>((uint)Win32ErrorCode_32.ERROR_DS_DRA_INVALID_PARAMETER, ret, "the server should return ERROR_DS_DRA_INVALID_PARAMETER");
            options = DRS_OPTIONS.DRS_DEL_REF;
            req     = drsTestClient.CreateRequestForDrsUpdateRef(
                machine,
                ver,
                dest,
                options
                );
            ret = drsTestClient.DRSClient.DrsUpdateRefs(EnvironmentConfig.DrsContextStore[machine], (uint)ver, req);
        }
예제 #4
0
        // <summary>
        // the function is used to create a DrsUpdateRef request
        // </summary>
        public DRS_MSG_UPDREFS CreateRequestForDrsUpdateRef(
            EnvironmentConfig.Machine machine,
            DrsUpdateRefs_Versions reqVer,
            DsServer dest,
            DRS_OPTIONS options,
            NamingContext nc = NamingContext.ConfigNC)
        {
            string nc_name = null;
            Guid   nc_guid = Guid.Empty;
            string nc_sid  = null;
            DSNAME nc_obj;

            switch (nc)
            {
            case NamingContext.ConfigNC:
                nc_obj = dest.Domain.ConfigNC;
                break;

            case NamingContext.SchemaNC:
                nc_obj = dest.Domain.SchemaNC;
                break;

            case NamingContext.AppNC:
                if (EnvironmentConfig.TestDS)
                {
                    nc_obj = ((AddsDomain)dest.Domain).OtherNCs[0];
                }
                else
                {
                    nc_obj = ((AdldsDomain)dest.Domain).AppNCs[0];
                }
                break;

            case NamingContext.DomainNC:
                if (!EnvironmentConfig.TestDS)
                {
                    nc_obj = new DSNAME();
                }
                nc_obj = ((AddsDomain)dest.Domain).DomainNC;
                break;

            default:
                nc_obj = new DSNAME();
                break;
            }

            nc_name = LdapUtility.ConvertUshortArrayToString(nc_obj.StringName);
            nc_guid = nc_obj.Guid;
            nc_sid  = convertSidToString(nc_obj.Sid);

            DRS_MSG_UPDREFS?req = CreateUpdateRefsRequest(
                reqVer,
                nc_name,
                nc_guid,
                nc_sid,
                dest.DsaNetworkAddress,
                dest.NtdsDsaObjectGuid,
                options);

            return((DRS_MSG_UPDREFS)req);
        }