/// <summary>
        /// Verify RopOptionsData Failure Response
        /// </summary>
        /// <param name="ropOptionsDataResponse">The failure response of RopOptionsData request</param>
        /// <param name="inputHandleIndex">The field of InputHandleIndex in RopOptionsData request</param>
        private void VerifyRopOptionsDataFailureResponse(RopOptionsDataResponse ropOptionsDataResponse, byte inputHandleIndex)
        {
            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R4640");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R4640
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropOptionsDataResponse.RopId.GetType(),
                4640,
                @"[In RopOptionsData ROP Failure Response Buffer]RopId (1 byte): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R4642");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R4642
            Site.CaptureRequirementIfAreEqual<byte>(
                (byte)RopId.RopOptionsData,
                ropOptionsDataResponse.RopId,
                4642,
                @"[In RopOptionsData ROP Failure Response Buffer]RopId (1 byte): For this operation[RopOptionsData], this field is set to 0x6F.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R4643");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R4643
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropOptionsDataResponse.InputHandleIndex.GetType(),
                4643,
                @"[In RopOptionsData ROP Failure Response Buffer]InputHandleIndex (1 byte): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R4644");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R4644
            Site.CaptureRequirementIfAreEqual<byte>(
                inputHandleIndex,
                ropOptionsDataResponse.InputHandleIndex,
                4644,
                @"[In RopOptionsData ROP Failure Response Buffer]InputHandleIndex (1 byte): This index MUST be set to the value specified in the InputHandleIndex field in the request.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R4645");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R4645
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(uint),
                ropOptionsDataResponse.ReturnValue.GetType(),
                4645,
                @"[In RopOptionsData ROP Failure Response Buffer]ReturnValue (4 bytes): An unsigned integer.");

            if (Common.IsRequirementEnabled(4691, this.Site))
            {
                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R4691,the actual value of the returnValue is {0}", ropOptionsDataResponse.ReturnValue);

                // Verify MS-OXCROPS requirement: MS-OXCROPS_R4691
                Site.CaptureRequirementIfAreNotEqual<uint>(
                    SuccessReturnValue,
                    ropOptionsDataResponse.ReturnValue,
                    4691,
                    @"[In Appendix B: Product Behavior] ReturnValue (4 bytes): For this response[Failure Response], Implementation does set this field to a value other than 0x00000000. (Microsoft Exchange Server 2010 and above follow this behavior.)");
            }

            if (Common.IsRequirementEnabled(4690, this.Site))
            {
                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R4690");

                // Verify MS-OXCROPS requirement: MS-OXCROPS_R4690
                Site.CaptureRequirementIfAreEqual<uint>(
                    SuccessReturnValue,
                    ropOptionsDataResponse.ReturnValue,
                    4690,
                    @"[In Appendix B: Product Behavior] Implementation does set the ReturnValue field for the RopOptionsData ROP response (section 2.2.7.9) to 0x00000000 regardless of the failure of the ROP. (<8> Section 2.2.7.9.3: Exchange 2007 sets the ReturnValue field for the RopOptionsData ROP response (section 2.2.7.9) to 0x00000000 regardless of the failure of the ROP.)");
            }
        }
        /// <summary>
        /// Verify RopOptionsData Success Response
        /// </summary>
        /// <param name="ropOptionsDataResponse">The success response of RopOptionsData request</param>
        /// <param name="inputHandleIndex">The field of InputHandleIndex in RopOptionsData request</param>
        private void VerifyRopOptionsDataSuccessResponse(RopOptionsDataResponse ropOptionsDataResponse, byte inputHandleIndex)
        {
            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2562");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2562
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropOptionsDataResponse.RopId.GetType(),
                2562,
                @"[In RopOptionsData ROP Success Response Buffer]RopId (1 byte): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2564");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2564
            Site.CaptureRequirementIfAreEqual<byte>(
                (byte)RopId.RopOptionsData,
                ropOptionsDataResponse.RopId,
                2564,
                @"[In RopOptionsData ROP Success Response Buffer,RopId (1 byte)]For this operation[RopOptionsData], this field is set to 0x6F.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2565");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2565
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropOptionsDataResponse.InputHandleIndex.GetType(),
                2565,
                @"[In RopOptionsData ROP Success Response Buffer]InputHandleIndex (1 byte): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2566");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2566
            Site.CaptureRequirementIfAreEqual<byte>(
                inputHandleIndex,
                ropOptionsDataResponse.InputHandleIndex,
                2566,
                @"[In RopOptionsData ROP Success Response Buffer,InputHandleIndex (1 byte)]This index MUST be set to the value specified in the InputHandleIndex field in the request.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2568");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2568
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(uint),
                ropOptionsDataResponse.ReturnValue.GetType(),
                2568,
                @"[In RopOptionsData ROP Success Response Buffer]ReturnValue (4 bytes): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R4687");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R4687
            Site.CaptureRequirementIfAreEqual<uint>(
                SuccessReturnValue,
                ropOptionsDataResponse.ReturnValue,
                4687,
                @"[In RopOptionsData ROP Success Response Buffer]ReturnValue (4 bytes):For this response, this field is set to 0x00000000.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2570");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2570
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte),
                ropOptionsDataResponse.Reserved.GetType(),
                2570,
                @"[In  RopOptionsData ROP Success Response Buffer]Reserved (1 byte): Reserved.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2571");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2571
            Site.CaptureRequirementIfAreEqual<byte>(
                (byte)ResponseFlags.Reserved,
                ropOptionsDataResponse.Reserved,
                2571,
                @"[In RopOptionsData ROP Success Response Buffer,Reserved (1 byte)]This field MUST be set to 0x01.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2572");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2572
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(ushort),
                ropOptionsDataResponse.OptionsInfoSize.GetType(),
                2572,
                @"[In RopOptionsData ROP Success Response Buffer]OptionsInfoSize (2 bytes): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2574");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2574
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte[]),
                ropOptionsDataResponse.OptionsInfo.GetType(),
                2574,
                @"[In RopOptionsData ROP Success Response Buffer]OptionsInfo (variable): An array of bytes.");

            if (Common.IsRequirementEnabled(2578, this.Site))
            {
                bool isVerifyR2578 = true;

                if (ropOptionsDataResponse.OptionsInfo.Length != 0)
                {
                    foreach (byte item in ropOptionsDataResponse.OptionsInfo)
                    {
                        if (item != 0)
                        {
                            isVerifyR2578 = false;
                            break;
                        }
                    }
                }

                // Add the comment information for debugging
                Site.Log.Add(LogEntryKind.Comment, "Verify MS-OXCROPS_R2578,OptionsInfo.Length:{0}", ropOptionsDataResponse.OptionsInfo.Length);

                // Verify MS-OXCROPS requirement: 2578
                Site.CaptureRequirementIfIsTrue(
                    isVerifyR2578,
                    2578,
                    @"[In Appendix B: Product Behavior] Implementation does return this field[OptionsInfo] as an empty array. (Microsoft Exchange Server 2013 follow this behavior.)");
            }

            if (Common.IsRequirementEnabled(2928, this.Site))
            {
                // Add the debug information
                Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2928, the actual length of the OptionsInfo is {0}", ropOptionsDataResponse.OptionsInfo.Length);

                // Verify MS-OXCROPS requirement: MS-OXCROPS_R2928
                bool isVerifyR2928 = ropOptionsDataResponse.OptionsInfo.Length > 0;

                Site.CaptureRequirementIfIsTrue(
                    isVerifyR2928,
                    2928,
                    @"[In Appendix B: Product Behavior] Implementation does not return [OptionsInfo (variable) field as] an empty array in the OptionsInfo field. (<7> Section 2.2.7.9.2: Exchange 2007, and Exchange 2010 do not return an empty array in the OptionsInfo field.)");
            }

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2580");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2580
            // SUT is exchange 2007 and exchange 2010 if program go through here, OptionsInfo does not return an empty array
            Site.CaptureRequirementIfAreEqual<ushort>(
                ropOptionsDataResponse.OptionsInfoSize,
                (ushort)ropOptionsDataResponse.OptionsInfo.Length,
                2580,
                @"[In RopOptionsData ROP Success Response Buffer,OptionsInfo (variable)]The size of this field, in bytes, is specified by the OptionsInfoSize field.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2581");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2581
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(ushort),
                ropOptionsDataResponse.HelpFileSize.GetType(),
                2581,
                @"[In RopOptionsData ROP Success Response Buffer]HelpFileSize (2 bytes): An unsigned integer.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2583");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2583
            Site.CaptureRequirementIfAreEqual<Type>(
                typeof(byte[]),
                ropOptionsDataResponse.HelpFile.GetType(),
                2583,
                @"[In RopOptionsData ROP Success Response Buffer]HelpFile (variable): An array of bytes.");

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXCROPS_R2585");

            // Verify MS-OXCROPS requirement: MS-OXCROPS_R2585
            Site.CaptureRequirementIfAreEqual<ushort>(
                ropOptionsDataResponse.HelpFileSize,
                (ushort)ropOptionsDataResponse.HelpFile.Length,
                2585,
                @"[In RopOptionsData ROP Success Response Buffer,HelpFile (variable)]The size of this field, in bytes, is specified by the HelpFileSize field.");
        }