/// <summary> /// Verify the RopCopyProperties operation related requirements. /// </summary> /// <param name="ropCopyPropertiesResponse">The RopCopyProperties response buffer structure.</param> /// <param name="objectType">Indicates which object type the RopCopyProperties operation is acting on.</param> /// <param name="copyFlags">CopyFlags parameter in request of RopCopyProperties.</param> /// <param name="isPropertyFound">Indicates the property is found or not.</param> private void VerifyRopCopyProperties( RopCopyPropertiesResponse ropCopyPropertiesResponse, ServerObjectType objectType, CopyFlags copyFlags, bool isPropertyFound) { // Since the RopCopyProperties ROP response was parsed successfully, MS-OXCPRPT_R50003 can be captured directly. Site.CaptureRequirement( 50003, @"[In Processing RopCopyProperties] The server responds with a RopCopyProperties ROP response buffer."); if (ropCopyPropertiesResponse.ReturnValue.Equals((uint)CPRPTErrorCode.None)) { // The parser has ensured the field satisfied the format, otherwise the response cannot be received. Site.CaptureRequirement( 16801, @"[In RopCopyProperties ROP Response Buffer] DestHandleIndex: 4 bytes integer."); if (objectType == ServerObjectType.Message) { // If the object type this operation acting on is Message object and this operation is performed successfully, then the following requirement can be captured. Site.CaptureRequirement( 14901, @"[In RopCopyProperties ROP] This operation [RopCopyProperties ROP] is valid on Message objects."); } if (objectType == ServerObjectType.Folder) { // If the object type this operation acting on is Folder object and this operation is performed successfully, then the following requirement can be captured. Site.CaptureRequirement( 14902, @"[In RopCopyProperties ROP] This operation [RopCopyProperties ROP] is valid on Folder objects."); } if (objectType == ServerObjectType.Attachment) { // If the object type this operation acting on is Attachment object and this operation is performed successfully, then the following requirement can be captured. Site.CaptureRequirement( 14903, @"[In RopCopyProperties ROP] This operation [RopCopyProperties ROP] is valid on Attachment objects."); } // The parser has ensured the field satisfied the format, otherwise the response cannot be received. Site.CaptureRequirement( 165, @"[In RopCopyProperties ROP Response Buffer] propertyProblemCount: 2 bytes integer."); Site.CaptureRequirementIfAreEqual<ushort>( ropCopyPropertiesResponse.PropertyProblemCount, (ushort)ropCopyPropertiesResponse.PropertyProblems.Length, 16502, @"[In RopCopyProperties ROP Response Buffer] propertyProblemCount: An integer that specifies the number of elements contained in the PropertyProblems field. "); if (ropCopyPropertiesResponse.PropertyProblemCount != 0) { // The parser has ensured the field satisfied the format, otherwise the response cannot be received. Site.CaptureRequirement( 167, @"[In RopCopyProperties ROP Response Buffer] PropertyProblems (variable): An array of PropertyProblem structures ([MS-OXCDATA] section 2.7)."); for (int counter = 0; counter < ropCopyPropertiesResponse.PropertyProblems.Length; counter++) { this.VerifyPropertyProblemSturctureInCDATA(); } } Site.CaptureRequirementIfIsTrue( isPropertyFound, 500, @"[In Processing RopCopyProperties] The server MUST copy or move the properties specified from the source object to the destination object."); } if (ropCopyPropertiesResponse.ReturnValue == 0x80070057) { // The parser has ensured the field satisfied the format, otherwise the response cannot be received. Site.CaptureRequirement( "MS-OXCDATA", 904, @"[In Error Codes] The numeric value (hex) for error code InvalidParameter is 0x80070057, %x57.00.07.80."); } if (ropCopyPropertiesResponse.ReturnValue == 0x80040102) { // The parser has ensured the field satisfied the format, otherwise the response cannot be received. Site.CaptureRequirement( "MS-OXCDATA", 928, @"[In Error Codes] The numeric value (hex) for error code NotSupported is 0x80040102, %x02.01.04.80."); } if (ropCopyPropertiesResponse.ReturnValue.Equals((uint)CPRPTErrorCode.NullDestinationObject)) { // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCPRPT_R168"); // Verify MS-OXCPRPT requirement: MS-OXCPRPT_R168 // The value of DestHandleIndex is not 0 means this field is present. Site.CaptureRequirementIfAreNotEqual<uint>( 0, ropCopyPropertiesResponse.DestHandleIndex, 168, @"[In RopCopyProperties ROP Response Buffer] DestHandleIndex: The DestHandleIndex field MUST be set to the value of the DestHandleIndex field of the ROP request buffer. "); // Verify MS-OXCPRPT requirement: MS-OXCPRPT_R737 // The value of PropertyProblemCount is 0 means this field is not present. Site.CaptureRequirementIfAreEqual<ushort>( 0, ropCopyPropertiesResponse.PropertyProblemCount, 737, @"[In RopCopyProperties ROP Response Buffer] PropertyProblemCount: This field MUST NOT be present if the ReturnValue field is set to NullDestinationObject (0x00000503)."); // Verify MS-OXCPRPT requirement: MS-OXCPRPT_R738 // PropertyProblems is null means this field is not present. Site.CaptureRequirementIfIsNull( ropCopyPropertiesResponse.PropertyProblems, 738, @"[In RopCopyProperties ROP Response Buffer] propertyProblems: This field MUST NOT be present if the ReturnValue field is set to NullDestinationObject (0x00000503)."); } else { // Verify MS-OXCPRPT requirement: MS-OXCPRPT_R170 // The value of DestHandleIndex is 0 means this field is not present. Site.CaptureRequirementIfAreEqual<uint>( 0, ropCopyPropertiesResponse.DestHandleIndex, 170, @"[In RopCopyProperties ROP Response Buffer] DestHandleIndex: The DestHandleIndex field MUST NOT be present if the ReturnValue field is set to any value other than NullDestinationObject (0x00000503)."); } if ((objectType == ServerObjectType.Folder) && (copyFlags == CopyFlags.Move)) { if (Common.IsRequirementEnabled(882, this.Site)) { Site.CaptureRequirementIfAreEqual<uint>( (uint)CPRPTErrorCode.NotSupported, ropCopyPropertiesResponse.ReturnValue, 882, @"[In Processing RopCopyProperties] Implementation does return NotSupported error, if the original object is a Folder object and the CopyFlags field has the Move flag set.(Microsoft Exchange Server 2007 and above follow this behavior)"); } } }
/// <summary> /// Verify RopCopyProperties Null Destination Failure Response /// </summary> /// <param name="ropCopyPropertiesResponse">The null destination failure response of RopCopyProperties request</param> /// <param name="sourceHandleIndex">The field of SourceHandleIndex in RopCopyProperties request</param> /// <param name="destHandleIndex">The field of DestHandleIndex in RopCopyProperties request</param> private void VerifyRopCopyPropertiesNullDestinationFailureResponse(RopCopyPropertiesResponse ropCopyPropertiesResponse, byte sourceHandleIndex, uint destHandleIndex) { // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3038"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3038 Site.CaptureRequirementIfAreEqual<Type>( typeof(byte), ropCopyPropertiesResponse.RopId.GetType(), 3038, @"[In RopCopyProperties ROP Null Destination Failure Response Buffer]RopId (1 byte): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3040"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3040 Site.CaptureRequirementIfAreEqual<byte>( (byte)RopId.RopCopyProperties, ropCopyPropertiesResponse.RopId, 3040, @"[In RopCopyProperties ROP Null Destination Failure Response Buffer,RopId (1 byte)]For this operation[RopCopyProperties], this field is set to 0x67."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3041"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3041 Site.CaptureRequirementIfAreEqual<Type>( typeof(byte), ropCopyPropertiesResponse.SourceHandleIndex.GetType(), 3041, @"[In RopCopyProperties ROP Null Destination Failure Response Buffer]SourceHandleIndex (1 byte): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3042"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3042 Site.CaptureRequirementIfAreEqual<byte>( sourceHandleIndex, ropCopyPropertiesResponse.SourceHandleIndex, 3042, @"[In RopCopyProperties 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_R3044"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3044 Site.CaptureRequirementIfAreEqual<Type>( typeof(uint), ropCopyPropertiesResponse.ReturnValue.GetType(), 3044, @"[In RopCopyProperties ROP Null Destination Failure Response Buffer]ReturnValue (4 bytes): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3046"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3046 Site.CaptureRequirementIfAreEqual<uint>( ReturnValueForRopMoveFolderResponseAndMoveCopyMessage, ropCopyPropertiesResponse.ReturnValue, 3046, @"[In RopCopyProperties ROP Null Destination Failure Response Buffer,ReturnValue (4 bytes)]For this response[Null Destination Failure Response], this field is set to 0x00000503."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3047"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3047 Site.CaptureRequirementIfAreEqual<Type>( typeof(uint), ropCopyPropertiesResponse.DestHandleIndex.GetType(), 3047, @"[In RopCopyProperties ROP Null Destination Failure Response Buffer]DestHandleIndex (4 bytes): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3048"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3048 Site.CaptureRequirementIfAreEqual<uint>( destHandleIndex, ropCopyPropertiesResponse.DestHandleIndex, 3048, @"[In RopCopyProperties 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."); }
/// <summary> /// Verify RopCopyProperties Failure Response /// </summary> /// <param name="ropCopyPropertiesResponse">The failure response of RopCopyProperties request</param> /// <param name="sourceHandleIndex">The field of SourceHandleIndex in RopCopyProperties request</param> private void VerifyRopCopyPropertiesFailureResponse(RopCopyPropertiesResponse ropCopyPropertiesResponse, byte sourceHandleIndex) { // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3050"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3050 Site.CaptureRequirementIfAreEqual<Type>( typeof(byte), ropCopyPropertiesResponse.RopId.GetType(), 3050, @"[In RopCopyProperties ROP Failure Response Buffer]RopId (1 byte): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3052"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3052 Site.CaptureRequirementIfAreEqual<byte>( (byte)RopId.RopCopyProperties, ropCopyPropertiesResponse.RopId, 3052, @"[In RopCopyProperties ROP Failure Response Buffer,RopId (1 byte)]For this operation[RopCopyProperties], this field is set to 0x67."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3053"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3053 Site.CaptureRequirementIfAreEqual<Type>( typeof(byte), ropCopyPropertiesResponse.SourceHandleIndex.GetType(), 3053, @"[In RopCopyProperties ROP Failure Response Buffer]SourceHandleIndex (1 byte): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3054"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3054 Site.CaptureRequirementIfAreEqual<byte>( sourceHandleIndex, ropCopyPropertiesResponse.SourceHandleIndex, 3054, @"[In RopCopyProperties ROP 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_R3056"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3056 Site.CaptureRequirementIfAreEqual<Type>( typeof(uint), ropCopyPropertiesResponse.ReturnValue.GetType(), 3056, @"[In RopCopyProperties ROP Failure Response Buffer]ReturnValue (4 bytes): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3058,the ReturnValue:{0}", ropCopyPropertiesResponse.ReturnValue); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3058 bool isVerifyR3058 = (ropCopyPropertiesResponse.ReturnValue != SuccessReturnValue) && (ropCopyPropertiesResponse.ReturnValue != ReturnValueForRopMoveFolderResponseAndMoveCopyMessage); Site.CaptureRequirementIfIsTrue( isVerifyR3058, 3058, @"[In RopCopyProperties ROP Failure Response Buffer,ReturnValue (4 bytes)]For this response[Failure Response], this field is set to a value other than 0x00000000 or 0x00000503."); }
/// <summary> /// Verify RopCopyProperties Success Response /// </summary> /// <param name="ropCopyPropertiesResponse">The success response of RopCopyProperties request</param> /// <param name="sourceHandleIndex">The field of SourceHandleIndex in RopCopyProperties request</param> private void VerifyRopCopyPropertiesSuccessResponse(RopCopyPropertiesResponse ropCopyPropertiesResponse, byte sourceHandleIndex) { // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3024"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3024 Site.CaptureRequirementIfAreEqual<Type>( typeof(byte), ropCopyPropertiesResponse.RopId.GetType(), 3024, @"[In RopCopyProperties ROP Success Response Buffer]RopId (1 byte): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3026"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3026 Site.CaptureRequirementIfAreEqual<byte>( (byte)RopId.RopCopyProperties, ropCopyPropertiesResponse.RopId, 3026, @"[In RopCopyProperties ROP Success Response Buffer,RopId (1 byte)]For this operation[RopCopyProperties], this field is set to 0x67."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3027"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3027 Site.CaptureRequirementIfAreEqual<Type>( typeof(byte), ropCopyPropertiesResponse.SourceHandleIndex.GetType(), 3027, @"[In RopCopyProperties ROP Success Response Buffer]SourceHandleIndex (1 byte): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3028"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3028 Site.CaptureRequirementIfAreEqual<byte>( sourceHandleIndex, ropCopyPropertiesResponse.SourceHandleIndex, 3028, @"[In RopCopyProperties ROP Success Response Buffer,SourceHandleIndex (1 byte)]This index MUST be set to the value specified in the SourceHandleIndex field specified in the request."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3030"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3030 Site.CaptureRequirementIfAreEqual<Type>( typeof(uint), ropCopyPropertiesResponse.ReturnValue.GetType(), 3030, @"[In RopCopyProperties ROP Success Response Buffer]ReturnValue (4 bytes): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3032"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3032 Site.CaptureRequirementIfAreEqual<uint>( SuccessReturnValue, ropCopyPropertiesResponse.ReturnValue, 3032, @"[In RopCopyProperties ROP Success Response Buffer,ReturnValue (4 bytes) ]For this response[Success Response], this field is set to 0x00000000."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3033"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3033 Site.CaptureRequirementIfAreEqual<Type>( typeof(ushort), ropCopyPropertiesResponse.PropertyProblemCount.GetType(), 3033, @"[In RopCopyProperties ROP Success Response Buffer]PropertyProblemCount (2 bytes): An unsigned integer."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3035"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3035 Site.CaptureRequirementIfAreEqual<Type>( typeof(PropertyProblem[]), ropCopyPropertiesResponse.PropertyProblems.GetType(), 3035, @"[In RopCopyProperties ROP Success Response Buffer]PropertyProblems (variable): An array of PropertyProblem structures."); // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R3036"); // Verify MS-OXCROPS requirement: MS-OXCROPS_R3036 Site.CaptureRequirementIfAreEqual<int>( ropCopyPropertiesResponse.PropertyProblemCount, ropCopyPropertiesResponse.PropertyProblems.Length, 3036, @"[In RopCopyProperties ROP Success Response Buffer,PropertyProblems (variable)]The number of structures contained in this field[PropertyProblems (variable)] is specified by the PropertyProblemCount field."); }