/// <summary> /// Verify the response of RopMoveCopyMessages ROP operation. /// </summary> /// <param name="moveCopyMessagesResponse">The response of RopMoveCopyMessages operation</param> private void VerifyRopMoveCopyMessages(RopMoveCopyMessagesResponse moveCopyMessagesResponse) { // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R161"); // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R161 Site.CaptureRequirementIfAreEqual<uint>( Constants.SuccessCode, moveCopyMessagesResponse.ReturnValue, 161, @"[In RopMoveCopyMessages ROP Response Buffer] ReturnValue (4 bytes): The server returns 0x00000000 to indicate success."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R144"); // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R144 Site.CaptureRequirementIfAreEqual<uint>( Constants.SuccessCode, moveCopyMessagesResponse.ReturnValue, 144, @"[In RopMoveCopyMessages ROP] The RopMoveCopyMessages ROP ([MS-OXCROPS] section 2.2.4.6) moves or copies messages from a source folder to a destination folder."); }
/// <summary> /// Verify RopMoveCopyMessages Null Destination Failure Response /// </summary> /// <param name="ropMoveCopyMessageResponse">The null destination failure response of RopMoveCopyMessages request</param> /// <param name="sourceHandleIndex">The field of SourceHandleIndex in RopMoveCopyMessages request</param> /// <param name="destHandleIndex">The field of DestHandleIndex in RopMoveCopyMessages request</param> private void VerifyRopMoveCopyMessagesNullDestinationFailureResponse( RopMoveCopyMessagesResponse ropMoveCopyMessageResponse, byte sourceHandleIndex, uint destHandleIndex) { // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R781"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R781 Site.CaptureRequirementIfAreEqual<Type>( typeof(byte), ropMoveCopyMessageResponse.RopId.GetType(), 781, @"[In RopMoveCopyMessages ROP Null Destination Failure Response Buffer] RopId (1 byte): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R783"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R783 Site.CaptureRequirementIfAreEqual<byte>( (byte)RopId.RopMoveCopyMessages, ropMoveCopyMessageResponse.RopId, 783, @"[In RopMoveCopyMessages ROP Null Destination Failure Response Buffer] RopId (1 byte): For this operation[RopMoveCopyMessages], this field[RopId (1 byte)] is set to 0x33."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R784"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R784 Site.CaptureRequirementIfAreEqual<Type>( typeof(byte), ropMoveCopyMessageResponse.SourceHandleIndex.GetType(), 784, @"[In RopMoveCopyMessages ROP Null Destination Failure Response Buffer] SourceHandleIndex (1 byte): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R785"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R785 Site.CaptureRequirementIfAreEqual<byte>( sourceHandleIndex, ropMoveCopyMessageResponse.SourceHandleIndex, 785, @"[In RopMoveCopyMessages ROP Null Destination Failure Response Buffer] SourceHandleIndex (1 byte): This index MUST be set to the value specified in the SourceHandleIndex field in the request."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R786"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R786 Site.CaptureRequirementIfAreEqual<Type>( typeof(uint), ropMoveCopyMessageResponse.ReturnValue.GetType(), 786, @"[In RopMoveCopyMessages ROP Null Destination Failure Response Buffer] ReturnValue (4 bytes): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R789"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R789 Site.CaptureRequirementIfAreEqual<uint>( ReturnValueForRopMoveFolderResponseAndMoveCopyMessage, ropMoveCopyMessageResponse.ReturnValue, 789, @"[In RopMoveCopyMessages ROP Null Destination Failure Response Buffer] ReturnValue (4 bytes): For this response[Null Destination Failure Response], this field[ReturnValue (4 bytes)] is set to 0x00000503."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R790"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R790 Site.CaptureRequirementIfAreEqual<Type>( typeof(uint), ropMoveCopyMessageResponse.DestHandleIndex.GetType(), 790, @"[In RopMoveCopyMessages ROP Null Destination Failure Response Buffer] DestHandleIndex (4 bytes): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R791"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R791 Site.CaptureRequirementIfAreEqual<uint>( destHandleIndex, ropMoveCopyMessageResponse.DestHandleIndex, 791, @"[In RopMoveCopyMessages ROP Null Destination Failure Response Buffer] DestHandleIndex (4 bytes): This index MUST be set to the value specified in the DestHandleIndex field in the request."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R792,PartialCompletion:{0}", ropMoveCopyMessageResponse.PartialCompletion); // Verify MS-OXCROPS requirement: MS-OXCROPS_R792 // If PartialCompletion is byte type and can be boolean type representation, then verify R792 bool isVerifyR792 = (typeof(byte) == ropMoveCopyMessageResponse.PartialCompletion.GetType()) && ((Convert.ToBoolean(ropMoveCopyMessageResponse.PartialCompletion) == true) || (Convert.ToBoolean(ropMoveCopyMessageResponse.PartialCompletion) == false)); Site.CaptureRequirementIfIsTrue( isVerifyR792, 792, @"[In RopMoveCopyMessages ROP Null Destination Failure Response Buffer] PartialCompletion (1 byte): A Boolean."); }
public void MSOXCFOLD_S02_TC11_RopMoveCopyMessagesUseSearchFolderSuccess() { this.Adapter.DoConnect(ConnectionType.PrivateMailboxServer); this.GenericFolderInitialization(); #region Step 1. Call RopCreateFolder to create [MSOXCFOLDSubfolder1] under the root folder. ulong subfolderId1 = 0; uint subfolderHandle1 = 0; this.CreateFolder(this.RootFolderHandle, Constants.Subfolder1, ref subfolderId1, ref subfolderHandle1); #endregion #region Step 2. Create a message in the [MSOXCFOLDSubfolder1] folder created in step 1. uint messageHandle = 0; ulong messageId = 0; this.CreateSaveMessage(subfolderHandle1, subfolderId1, ref messageId, ref messageHandle); #endregion #region Step 3. Call RopCreateFolder to create [MSOXCFOLDSubfolder2] under the root folder. ulong subfolderId2 = 0; uint subfolderHandle2 = 0; this.CreateFolder(this.RootFolderHandle, Constants.Subfolder2, ref subfolderId2, ref subfolderHandle2); #endregion #region Step 4. Create a message in the [MSOXCFOLDSubfolder2] folder created in step 3. uint messageHandleInSubFolder2 = 0; ulong messageIdInSubFolder2 = 0; this.CreateSaveMessage(subfolderHandle2, subfolderId2, ref messageIdInSubFolder2, ref messageHandleInSubFolder2); #endregion #region Step 4. Call RopCreateFolder to create a search folder [MSOXCFOLDSearchFolder] under the root folder. RopCreateFolderRequest createFolderRequest = new RopCreateFolderRequest { RopId = (byte)RopId.RopCreateFolder, LogonId = Constants.CommonLogonId, InputHandleIndex = Constants.CommonInputHandleIndex, OutputHandleIndex = Constants.CommonOutputHandleIndex, FolderType = (byte)FolderType.Searchfolder, UseUnicodeStrings = 0x0, OpenExisting = 0x00, Reserved = 0x0, DisplayName = Encoding.ASCII.GetBytes(Constants.SearchFolder), Comment = Encoding.ASCII.GetBytes(Constants.SearchFolder) }; RopCreateFolderResponse createFolderResponse = this.Adapter.CreateFolder(createFolderRequest, this.RootFolderHandle, ref this.responseHandles); Site.Assert.AreEqual<uint>(Constants.SuccessCode, createFolderResponse.ReturnValue, "RopCreateFolder ROP operation performs successfully!"); uint searchFolderHandle = this.responseHandles[0][createFolderResponse.OutputHandleIndex]; #endregion #region Step 5. The client calls RopSetSearchCriteria to establish search criteria for [MSOXCFOLDSubFolder1]. RopSetSearchCriteriaRequest setSearchCriteriaRequest = new RopSetSearchCriteriaRequest { RopId = (byte)RopId.RopSetSearchCriteria, LogonId = Constants.CommonLogonId, InputHandleIndex = Constants.CommonInputHandleIndex }; PropertyTag propertyTag = new PropertyTag { PropertyId = (ushort)MessagePropertyId.PidTagMessageClass, PropertyType = (ushort)PropertyType.PtypString }; ExistRestriction existRestriction = new ExistRestriction { PropTag = propertyTag }; setSearchCriteriaRequest.RestrictionDataSize = (ushort)existRestriction.Size(); setSearchCriteriaRequest.RestrictionData = existRestriction.Serialize(); setSearchCriteriaRequest.FolderIds = new ulong[] { subfolderId1 }; setSearchCriteriaRequest.FolderIdCount = (ushort)setSearchCriteriaRequest.FolderIds.Length; setSearchCriteriaRequest.SearchFlags = (uint)SetSearchFlags.ContentIndexedSearch | (uint)SetSearchFlags.StaticSearch | (uint)SetSearchFlags.RestartSearch; RopSetSearchCriteriaResponse setSearchCriteriaResponse = this.Adapter.SetSearchCriteria(setSearchCriteriaRequest, searchFolderHandle, ref this.responseHandles); Site.Assert.AreEqual<uint>(Constants.SuccessCode, setSearchCriteriaResponse.ReturnValue, "RopSearchCriteria ROP operation performs successfully!"); #endregion #region Step 6. The client calls RopGetSearchCriteria to obtain the search criteria and the status of the search folder [MSOXCFOLDSubFolder1]. RopGetSearchCriteriaRequest getSearchCriteriaRequest = new RopGetSearchCriteriaRequest { RopId = (byte)RopId.RopGetSearchCriteria, LogonId = Constants.CommonLogonId, InputHandleIndex = Constants.CommonInputHandleIndex, UseUnicode = 0x00, IncludeRestriction = 0x01, IncludeFolders = 0x01 }; RopGetSearchCriteriaResponse getSearchCriteriaResponse = this.Adapter.GetSearchCriteria(getSearchCriteriaRequest, searchFolderHandle, ref this.responseHandles); Site.Assert.AreEqual<uint>(Constants.SuccessCode, getSearchCriteriaResponse.ReturnValue, "RopGetSearchCriteria ROP operation performs successfully!"); #endregion #region Step 7. The client calls RopGetContentsTable to get handle of the contents table in the search folder [MSOXCFOLDSearchFolder]. RopGetContentsTableRequest getContentsTableRequest = new RopGetContentsTableRequest(); RopGetContentsTableResponse getContentsTableResponse; getContentsTableRequest.RopId = (byte)RopId.RopGetContentsTable; getContentsTableRequest.LogonId = Constants.CommonLogonId; getContentsTableRequest.InputHandleIndex = Constants.CommonInputHandleIndex; getContentsTableRequest.OutputHandleIndex = Constants.CommonOutputHandleIndex; getContentsTableRequest.TableFlags = (byte)FolderTableFlags.None; int count = 0; uint tableHandle; do { getContentsTableResponse = this.Adapter.GetContentsTable(getContentsTableRequest, searchFolderHandle, ref this.responseHandles); Site.Assert.AreEqual<uint>(Constants.SuccessCode, getContentsTableResponse.ReturnValue, "RopGetContentsTable ROP operation performs successfully!"); tableHandle = this.responseHandles[0][getContentsTableResponse.OutputHandleIndex]; if (getContentsTableResponse.RowCount != 1) { Thread.Sleep(this.WaitTime); } else { break; } count++; } while (count < this.RetryCount); #endregion #region Step 8. Sets the properties PidTagMid visible on the content table. RopSetColumnsRequest setColumnsRequest; PropertyTag[] propertyTags = new PropertyTag[1]; propertyTags[0].PropertyId = (ushort)MessagePropertyId.PidTagMid; propertyTags[0].PropertyType = (ushort)PropertyType.PtypInteger64; setColumnsRequest.RopId = 0x12; setColumnsRequest.LogonId = 0x00; setColumnsRequest.InputHandleIndex = 0x00; setColumnsRequest.PropertyTagCount = (ushort)propertyTags.Length; setColumnsRequest.PropertyTags = propertyTags; setColumnsRequest.SetColumnsFlags = 0x00; // Sync object ropResponse = new object(); this.Adapter.DoRopCall(setColumnsRequest, tableHandle, ref ropResponse, ref this.responseHandles); #endregion #region Step 9. Gets the message ID in the search folder [MSOXCFOLDSearchFolder]. RopQueryRowsRequest queryRowsRequest; RopQueryRowsResponse queryRowsResponse; queryRowsRequest.RopId = 0x15; queryRowsRequest.LogonId = 0x00; queryRowsRequest.InputHandleIndex = 0x00; queryRowsRequest.QueryRowsFlags = 0x00; queryRowsRequest.ForwardRead = 0x01; queryRowsRequest.RowCount = 1; this.Adapter.DoRopCall(queryRowsRequest, tableHandle, ref ropResponse, ref this.responseHandles); queryRowsResponse = (RopQueryRowsResponse)ropResponse; ulong messageID = BitConverter.ToUInt64(queryRowsResponse.RowData.PropertyRows[0].PropertyValues[0].Value, 0); #endregion #region Step 10. Call RopMoveCopyMessages to copy the message in the [MSOXCFOLDSearchFolder] to root folder synchronously. ulong[] messageIds = new ulong[1]; messageIds[0] = messageID; List<uint> handlelist = new List<uint> { searchFolderHandle, this.RootFolderHandle }; RopMoveCopyMessagesRequest moveCopyMessagesRequest = new RopMoveCopyMessagesRequest { RopId = (byte)RopId.RopMoveCopyMessages, LogonId = Constants.CommonLogonId, SourceHandleIndex = 0x00, DestHandleIndex = 0x01, MessageIdCount = (ushort)messageIds.Length, MessageIds = messageIds, WantAsynchronous = 0x00, WantCopy = 0xFF }; // WantCopy is nonzero (TRUE) indicates this is a copy operation. RopMoveCopyMessagesResponse copyMessagesFromSearchFolderResponse = this.Adapter.MoveCopyMessages(moveCopyMessagesRequest, handlelist, ref this.responseHandles); Site.Assert.AreEqual<uint>(0, copyMessagesFromSearchFolderResponse.ReturnValue, "The RopMoveCopyMessages ROP operation performs successfully."); Site.Assert.AreEqual<uint>(0, copyMessagesFromSearchFolderResponse.PartialCompletion, "The ROP successes for all subsets of targets"); handlelist.Clear(); #endregion #region Step 11. Validate the message is copied successfully in above step 9. uint rootFolderContentsCountActual = this.GetContentsTable(FolderTableFlags.None, this.RootFolderHandle); // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R121702. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R121702: expected contents count of the root folder is {0}, actual contents count of the root folder is {1};", 1, rootFolderContentsCountActual); // The source folder is a search folder, so if the message was copied successfully from MSOXCFOLDSearchFolder to root folder, R121702 can be verified. Site.CaptureRequirementIfAreEqual<uint>( 1, rootFolderContentsCountActual, 121702, @"[In RopMoveCopyMessages ROP Request Buffer] SourceHandleIndex (1 byte): [The source Server object for this operation [RopMoveCopyMessages ROP] is a Folder object that represents the folder from which the messages will be copied] This folder can be a search folder."); #endregion #region Step 12. Call RopMoveCopyMessages to move the message in the [MSOXCFOLDSearchFolder] to root folder synchronously. messageIds = new ulong[1]; messageIds[0] = messageID; handlelist = new List<uint> { searchFolderHandle, this.RootFolderHandle }; moveCopyMessagesRequest = new RopMoveCopyMessagesRequest { RopId = (byte)RopId.RopMoveCopyMessages, LogonId = Constants.CommonLogonId, SourceHandleIndex = 0x00, DestHandleIndex = 0x01, MessageIdCount = (ushort)messageIds.Length, MessageIds = messageIds, WantAsynchronous = 0x00, WantCopy = 0x00 }; // WantCopy is zero (FALSE) indicates this is a move operation. RopMoveCopyMessagesResponse moveMessagesFromSearchFolderResponse = this.Adapter.MoveCopyMessages(moveCopyMessagesRequest, handlelist, ref this.responseHandles); Site.Assert.AreEqual<uint>(0, moveMessagesFromSearchFolderResponse.ReturnValue, "The RopMoveCopyMessages ROP operation performs successfully."); Site.Assert.AreEqual<uint>(0, moveMessagesFromSearchFolderResponse.PartialCompletion, "The ROP successes for all subsets of targets"); handlelist.Clear(); #endregion #region Step 13. Validate the message is moved successfully in above step 12. rootFolderContentsCountActual = this.GetContentsTable(FolderTableFlags.None, this.RootFolderHandle); // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R121701. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R121701: expected contents count of the root folder is {0}, actual contents count of the root folder is {1};", 2, rootFolderContentsCountActual); // The source folder is a search folder, so if the message was moved successfully from MSOXCFOLDSearchFolder to root folder, R121701 can be verified. Site.CaptureRequirementIfAreEqual<uint>( 2, rootFolderContentsCountActual, 121701, @"[In RopMoveCopyMessages ROP Request Buffer] SourceHandleIndex (1 byte): [The source Server object for this operation [RopMoveCopyMessages ROP] is a Folder object that represents the folder from which the messages will be moved] This folder can be a search folder."); #endregion #region Step 14. Call RopMoveCopyMessages to copy the message in the [MSOXCFOLDSubfolder2] to the [MSOXCFOLDSearchFolder] synchronously. RopMoveCopyMessagesResponse copyMessagesToSearchFolderResponse = new RopMoveCopyMessagesResponse(); if (Common.IsRequirementEnabled(1246, this.Site)) { messageIds[0] = messageIdInSubFolder2; handlelist = new List<uint> { subfolderHandle2, searchFolderHandle }; moveCopyMessagesRequest = new RopMoveCopyMessagesRequest { RopId = (byte)RopId.RopMoveCopyMessages, LogonId = Constants.CommonLogonId, SourceHandleIndex = 0x00, DestHandleIndex = 0x01, MessageIdCount = (ushort)messageIds.Length, MessageIds = messageIds, WantAsynchronous = 0x00, WantCopy = 0xFF }; // WantCopy is nonzero (TRUE) indicates this is a copy operation. copyMessagesToSearchFolderResponse = this.Adapter.MoveCopyMessages(moveCopyMessagesRequest, handlelist, ref this.responseHandles); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R121802: the PartialCompletion in the MoveCopyMessages response is {0}", copyMessagesToSearchFolderResponse.PartialCompletion); // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R121802 // If the ROP RopMoveCopyMessages fails to copy message, the value of PartialCompletion field is nonzero. this.Site.CaptureRequirementIfAreNotEqual<uint>( 0x00000000, copyMessagesToSearchFolderResponse.ReturnValue, 121802, @"[In RopMoveCopyMessages ROP Request Buffer] DestHandleIndex (1 byte): [The destination Server object for this operation [RopMoveCopyMessages ROP] is a Folder object that represents the folder to which the messages will be copied.] This folder cannot be a search folder."); } #endregion #region Step 15. Call RopMoveCopyMessages to move the message in the [MSOXCFOLDSubfolder2] to the [MSOXCFOLDSearchFolder] synchronously. RopMoveCopyMessagesResponse moveMessagesToSearchFolderResponse; if (Common.IsRequirementEnabled(1246, this.Site)) { messageIds[0] = messageIdInSubFolder2; handlelist = new List<uint> { subfolderHandle2, searchFolderHandle }; moveCopyMessagesRequest = new RopMoveCopyMessagesRequest { RopId = (byte)RopId.RopMoveCopyMessages, LogonId = Constants.CommonLogonId, SourceHandleIndex = 0x00, DestHandleIndex = 0x01, MessageIdCount = (ushort)messageIds.Length, MessageIds = messageIds, WantAsynchronous = 0x00, WantCopy = 0x00 }; // WantCopy is zero (FLASE) indicates this is a move operation. moveMessagesToSearchFolderResponse = this.Adapter.MoveCopyMessages(moveCopyMessagesRequest, handlelist, ref this.responseHandles); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R121801: the PartialCompletion in the MoveCopyMessages response is {0}", moveMessagesToSearchFolderResponse.PartialCompletion); // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R121801 // If the ROP RopMoveCopyMessages fails to move message, the value of PartialCompletion field is nonzero. this.Site.CaptureRequirementIfAreNotEqual<uint>( 0x00000000, moveMessagesToSearchFolderResponse.ReturnValue, 121801, @"[In RopMoveCopyMessages ROP Request Buffer] DestHandleIndex (1 byte): [The destination Server object for this operation [RopMoveCopyMessages ROP] is a Folder object that represents the folder to which the messages will be moved.] This folder cannot be a search folder."); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R1216"); // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R1216 bool isVerifiedR1216 = copyMessagesFromSearchFolderResponse.ReturnValue == 0x00000000 && moveMessagesFromSearchFolderResponse.ReturnValue == 0x00000000 && copyMessagesToSearchFolderResponse.ReturnValue != 0x00000000 && moveMessagesToSearchFolderResponse.ReturnValue != 0x00000000; this.Site.CaptureRequirementIfIsTrue( isVerifiedR1216, 1216, @"[In RopMoveCopyMessages ROP] The source folder can be a search folder, but the destination folder cannot."); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R1246: the return value is {0} when copy a message to a search folder and the return value is {1} when move a message to a search folder.", copyMessagesToSearchFolderResponse.ReturnValue, moveMessagesToSearchFolderResponse.ReturnValue); // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R1246 bool isVerifiedR1246 = copyMessagesToSearchFolderResponse.ReturnValue == 0x00000460 && moveMessagesToSearchFolderResponse.ReturnValue == 0x00000460; this.Site.CaptureRequirementIfIsTrue( isVerifiedR1246, 1246, @"[In Processing a RopMoveCopyMessages ROP Request] When the error code is ecSearchFolder, it indicates the destination object is a search folder. "); // Add the debug information this.Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCFOLD_R1245"); // Verify MS-OXCFOLD requirement: MS-OXCFOLD_R1245 this.Site.CaptureRequirementIfAreEqual<uint>( 0x00000460, copyMessagesToSearchFolderResponse.ReturnValue, 1245, @"[In Processing a RopMoveCopyMessages ROP Request] The value of error code ecSearchFolder is 0x00000460."); } #endregion }
/// <summary> /// Verify RopMoveCopyMessages Response /// </summary> /// <param name="ropMoveCopyMessageResponse">The response of RopMoveCopyMessages request</param> /// <param name="sourceHandleIndex">The field of SourceHandleIndex in RopMoveCopyMessages request</param> private void VerifyRopMoveCopyMessagesResponse(RopMoveCopyMessagesResponse ropMoveCopyMessageResponse, byte sourceHandleIndex) { // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R771"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R771 Site.CaptureRequirementIfAreEqual<Type>( typeof(byte), ropMoveCopyMessageResponse.RopId.GetType(), 771, @"[In RopMoveCopyMessages ROP Response Buffer] RopId (1 byte): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R773"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R773 Site.CaptureRequirementIfAreEqual<byte>( (byte)RopId.RopMoveCopyMessages, ropMoveCopyMessageResponse.RopId, 773, @"[In RopMoveCopyMessages ROP Response Buffer] RopId (1 byte): For this operation[RopMoveCopyMessages], this field[RopId (1 byte)] is set to 0x33."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R774"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R774 Site.CaptureRequirementIfAreEqual<Type>( typeof(byte), ropMoveCopyMessageResponse.SourceHandleIndex.GetType(), 774, @"[In RopMoveCopyMessages ROP Response Buffer] SourceHandleIndex (1 byte): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R775"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R775 Site.CaptureRequirementIfAreEqual<byte>( sourceHandleIndex, ropMoveCopyMessageResponse.SourceHandleIndex, 775, @"[In RopMoveCopyMessages ROP Response Buffer] SourceHandleIndex (1 byte): This index MUST be set to the value specified in the SourceHandleIndex field in the request."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R776"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R776 Site.CaptureRequirementIfAreEqual<Type>( typeof(uint), ropMoveCopyMessageResponse.ReturnValue.GetType(), 776, @"[In RopMoveCopyMessages ROP Response Buffer] ReturnValue (4 bytes): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R778"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R778 Site.CaptureRequirementIfAreNotEqual<uint>( ReturnValueForRopMoveFolderResponseAndMoveCopyMessage, ropMoveCopyMessageResponse.ReturnValue, 778, @"[In RopMoveCopyMessages ROP Response Buffer] ReturnValue (4 bytes): For this response[Response Buffer], this field[ReturnValue (4 bytes)] is set to a value other than 0x00000503."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R779,PartialCompletion:{0}", ropMoveCopyMessageResponse.PartialCompletion); // Verify MS-OXCROPS requirement: MS-OXCROPS_R779 // If PartialCompletion is byte type and can be boolean type representation, then verify R779 bool isVerifyR779 = (typeof(byte) == ropMoveCopyMessageResponse.PartialCompletion.GetType()) && ((Convert.ToBoolean(ropMoveCopyMessageResponse.PartialCompletion) == true) || (Convert.ToBoolean(ropMoveCopyMessageResponse.PartialCompletion) == false)); Site.CaptureRequirementIfIsTrue( isVerifyR779, 779, @"[In RopMoveCopyMessages ROP Response Buffer] PartialCompletion (1 byte): A Boolean."); }