public void MSOXCROPS_S06_TC04_TestRopsQuery() { this.CheckTransportIsSupported(); this.cropsAdapter.RpcConnect( Common.GetConfigurationPropertyValue("SutComputerName", this.Site), ConnectionType.PrivateMailboxServer, Common.GetConfigurationPropertyValue("UserEssdn", this.Site), Common.GetConfigurationPropertyValue("Domain", this.Site), Common.GetConfigurationPropertyValue("AdminUserName", this.Site), Common.GetConfigurationPropertyValue("PassWord", this.Site)); // Step 1: Send the RopQueryNamedProperties request and verify the success response. #region RopQueryNamedProperties success response // Log on to the private mailbox. RopLogonResponse logonResponse = Logon(LogonType.Mailbox, this.userDN, out inputObjHandle); // Call GetCreatedMessageHandle to create message and get the created message handle. uint messageHandle = GetCreatedMessageHandle(logonResponse.FolderIds[4], inputObjHandle); RopQueryNamedPropertiesRequest queryNamedPropertiesRequest = new RopQueryNamedPropertiesRequest(); RopQueryNamedPropertiesResponse queryNamedPropertiesResponse; queryNamedPropertiesRequest.RopId = (byte)RopId.RopQueryNamedProperties; queryNamedPropertiesRequest.LogonId = TestSuiteBase.LogonId; queryNamedPropertiesRequest.InputHandleIndex = TestSuiteBase.InputHandleIndex0; queryNamedPropertiesRequest.QueryFlags = (byte)QueryFlags.NoStrings; queryNamedPropertiesRequest.HasGuid = Convert.ToByte(TestSuiteBase.Zero); queryNamedPropertiesRequest.PropertyGuid = null; // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Step 1: Begin to send the RopQueryNamedProperties request."); // Send the RopQueryNamedProperties request and verify the success response. this.responseSOHs = cropsAdapter.ProcessSingleRop( queryNamedPropertiesRequest, messageHandle, ref this.response, ref this.rawData, RopResponseType.SuccessResponse); queryNamedPropertiesResponse = (RopQueryNamedPropertiesResponse)response; Site.Assert.AreEqual<uint>( TestSuiteBase.SuccessReturnValue, queryNamedPropertiesResponse.ReturnValue, "if ROP succeeds, ReturnValue of its response will be 0 (success)"); #endregion // Step 2: Send the RopQueryNamedProperties request and verify the failure response. #region RopQueryNamedProperties failure response queryNamedPropertiesRequest.InputHandleIndex = TestSuiteBase.InputHandleIndex1; // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Step 2: Begin to send the RopQueryNamedProperties request."); // Send the RopQueryNamedProperties request and verify the failure response. this.responseSOHs = cropsAdapter.ProcessSingleRop( queryNamedPropertiesRequest, messageHandle, ref this.response, ref this.rawData, RopResponseType.FailureResponse); queryNamedPropertiesResponse = (RopQueryNamedPropertiesResponse)response; Site.Assert.AreNotEqual<uint>( TestSuiteBase.SuccessReturnValue, queryNamedPropertiesResponse.ReturnValue, "if ROP failure, ReturnValue of its response will not be 0 (success)"); Site.Assert.AreNotEqual<uint>( MS_OXCROPSAdapter.ReturnValueForRopQueryNamedProperties, queryNamedPropertiesResponse.ReturnValue, "if ROP failure, ReturnValue of its response will not be 0x00040380 (success)"); #endregion // Step 3: Send the RopGetPropertyIdsFromNames request and verify the success response. #region RopGetPropertyIdsFromNames success response RopGetPropertyIdsFromNamesRequest getPropertyIdsFromNamesRequest; RopGetPropertyIdsFromNamesResponse getPropertyIdsFromNamesResponse; getPropertyIdsFromNamesRequest.RopId = (byte)RopId.RopGetPropertyIdsFromNames; getPropertyIdsFromNamesRequest.LogonId = TestSuiteBase.LogonId; getPropertyIdsFromNamesRequest.InputHandleIndex = TestSuiteBase.InputHandleIndex0; getPropertyIdsFromNamesRequest.Flags = (byte)GetPropertyIdsFromNamesFlags.Create; // Call CreatePropertyNameArray method to create propertyName array. PropertyName[] propertyNameArray = this.CreatePropertyNameArray(3); getPropertyIdsFromNamesRequest.PropertyNameCount = (ushort)propertyNameArray.Length; getPropertyIdsFromNamesRequest.PropertyNames = propertyNameArray; // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Step 3: Begin to send the RopQueryNamedProperties request."); // Send the RopGetPropertyIdsFromNames request and verify the success response. this.responseSOHs = cropsAdapter.ProcessSingleRop( getPropertyIdsFromNamesRequest, this.inputObjHandle, ref this.response, ref this.rawData, RopResponseType.SuccessResponse); getPropertyIdsFromNamesResponse = (RopGetPropertyIdsFromNamesResponse)response; Site.Assert.AreEqual<uint>( TestSuiteBase.SuccessReturnValue, getPropertyIdsFromNamesResponse.ReturnValue, "If RopGetPropertyIdsFromNames succeeds, its response contains ReturnValue 0 (success)"); #endregion // Step 4: Send the RopGetPropertyIdsFromNames request and verify the failure response. #region RopGetPropertyIdsFromNames failure response getPropertyIdsFromNamesRequest.InputHandleIndex = TestSuiteBase.InputHandleIndex1; // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Step 4: Begin to send the RopGetPropertyIdsFromNames request."); this.responseSOHs = cropsAdapter.ProcessSingleRop( getPropertyIdsFromNamesRequest, this.inputObjHandle, ref this.response, ref this.rawData, RopResponseType.FailureResponse); #endregion // Step 5: Send the RopGetNamesFromPropertyIds request and verify the success response. #region RopGetNamesFromPropertyIds success response RopGetNamesFromPropertyIdsRequest getNamesFromPropertyIdsRequest; RopGetNamesFromPropertyIdsResponse getNamesFromPropertyIdsResponse; getNamesFromPropertyIdsRequest.RopId = (byte)RopId.RopGetNamesFromPropertyIds; getNamesFromPropertyIdsRequest.LogonId = TestSuiteBase.LogonId; getNamesFromPropertyIdsRequest.InputHandleIndex = TestSuiteBase.InputHandleIndex0; getNamesFromPropertyIdsRequest.PropertyIdCount = getPropertyIdsFromNamesResponse.PropertyIdCount; getNamesFromPropertyIdsRequest.PropertyIds = getPropertyIdsFromNamesResponse.PropertyIds; // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Step 5: Begin to send the RopGetNamesFromPropertyIds request."); // Send the RopGetNamesFromPropertyIds request and verify the success response. this.responseSOHs = cropsAdapter.ProcessSingleRop( getNamesFromPropertyIdsRequest, this.inputObjHandle, ref this.response, ref this.rawData, RopResponseType.SuccessResponse); getNamesFromPropertyIdsResponse = (RopGetNamesFromPropertyIdsResponse)response; #endregion // Step 6: Send the RopGetNamesFromPropertyIds request and verify the failure response. #region RopGetNamesFromPropertyIds failure response // Refer to MS-OXCROPS endnote<14>: For some ROPs, Exchange 2003 and Exchange 2007 use different methods to resolve the // server object and, therefore, do not fail the ROP if the index is invalid. if (Common.IsRequirementEnabled(4713, this.Site)) { getNamesFromPropertyIdsRequest.InputHandleIndex = TestSuiteBase.InputHandleIndex1; PropertyId propertyId = new PropertyId { ID = TestSuiteBase.PropertyId }; getNamesFromPropertyIdsRequest.PropertyIdCount = TestSuiteBase.PropertyIdCount; getNamesFromPropertyIdsRequest.PropertyIds = new PropertyId[1] { propertyId }; // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Step 6: Begin to send the RopGetNamesFromPropertyIds request."); // Send the RopGetNamesFromPropertyIds request and verify the failure response. this.responseSOHs = cropsAdapter.ProcessSingleRop( getNamesFromPropertyIdsRequest, this.inputObjHandle, ref this.response, ref this.rawData, RopResponseType.FailureResponse); getNamesFromPropertyIdsResponse = (RopGetNamesFromPropertyIdsResponse)response; Site.Assert.AreEqual<uint>( TestSuiteBase.SuccessReturnValue, getNamesFromPropertyIdsResponse.ReturnValue, "<14> Section 3.2.5.1: For some ROPs, Exchange 2003 and Exchange 2007 use different methods to resolve the Server object and, therefore, do not fail the ROP if the index is invalid."); } else { // Verify the response on server other than Exchange 2007. getNamesFromPropertyIdsRequest.InputHandleIndex = TestSuiteBase.InputHandleIndex1; PropertyId propertyId = new PropertyId { ID = TestSuiteBase.PropertyId }; getNamesFromPropertyIdsRequest.PropertyIdCount = TestSuiteBase.PropertyIdCount; getNamesFromPropertyIdsRequest.PropertyIds = new PropertyId[1] { propertyId }; // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Step 6: Begin to send the RopGetNamesFromPropertyIds request."); // Send the RopGetNamesFromPropertyIds request and verify the failure response. this.responseSOHs = cropsAdapter.ProcessSingleRop( getNamesFromPropertyIdsRequest, this.inputObjHandle, ref this.response, ref this.rawData, RopResponseType.FailureResponse); getNamesFromPropertyIdsResponse = (RopGetNamesFromPropertyIdsResponse)response; Site.Assert.AreNotEqual<uint>( TestSuiteBase.SuccessReturnValue, getNamesFromPropertyIdsResponse.ReturnValue, "For this response, this field SHOULD be set to a value other than 0x00000000."); } #endregion }