/// <summary> /// Verifies the response of GetMeetingsInformation. /// </summary> /// <param name="result">The response information of GetMeetingsInformation</param> /// <param name="requestFlags">The flag of the request</param> private void VerifyGetMeetingsInformationResponse(GetMeetingsInformationResponseGetMeetingsInformationResult result, MeetingInfoTypes? requestFlags) { bool isResponseValid = ValidationResult.Success == SchemaValidation.ValidationResult; // If the server response pass the validation successfully, we can make sure that the server responds with a GetMeetingsInformationSoapOut response message. Site.CaptureRequirementIfIsTrue( isResponseValid, 168, @"[In GetMeetingsInformation]This operation[GetMeetingsInformation] is defined as follows. <wsdl:operation name=""GetMeetingsInformation""> <wsdl:input message=""GetMeetingsInformationSoapIn"" /> <wsdl:output message=""GetMeetingsInformationSoapOut"" /> </wsdl:operation>"); // If the server response pass the validation successfully, we can make sure that the server responds with a GetMeetingsInformationSoapOut response message. // Verifies MS-MEETS requirement: MS-MEETS_R170. Site.CaptureRequirementIfIsTrue( isResponseValid, 170, @"[In GetMeetingsInformation][if the client sends a GetMeetingsInformationSoapIn request message]and the protocol server responds with a GetMeetingsInformationSoapOut response message (section 3.1.4.5.1.2)."); // Verifies MS-MEETS requirement: MS-MEETS_R176. Site.CaptureRequirementIfIsTrue( this.ResponseExists(SchemaValidation.LastRawResponseXml, "GetMeetingsInformationResponse"), 176, @"[In GetMeetingsInformationSoapOut]The SOAP body contains a GetMeetingsInformationResponse element (section 3.1.4.5.2.2)."); // If the server response pass the validation successfully, we can make sure that the GetMeetingsInformationResponse is defined according to the schema. // Verifies MS-MEETS requirement: MS-MEETS_R188. Site.CaptureRequirementIfIsTrue( isResponseValid, 188, @"[In GetMeetingsInformationResponse]This element [GetMeetingsInformationResponse]is defined as follows. <s:element name=""GetMeetingsInformationResponse""> <s:complexType> <s:sequence> <s:element minOccurs=""0"" maxOccurs=""1"" name=""GetMeetingsInformationResult""> <s:complexType mixed=""true""> <s:sequence> <s:element name=""MeetingsInformation""> <s:complexType mixed=""true""> <s:element minOccurs=""0"" maxOccurs=""1"" name=""AllowCreate"" type=""tns:CaseInsensitiveTrueFalse"" /> <s:element name=""ListTemplateLanguages"" minOccurs=""0""> <s:complexType> <s:sequence> <s:element minOccurs=""0"" maxOccurs=""unbounded"" name=""LCID"" type=""s:string"" /> </s:sequence> </s:complexType> </s:element> <s:element name=""ListTemplates"" minOccurs=""0""> <s:complexType> <s:sequence> <s:element minOccurs=""0"" maxOccurs=""unbounded"" name=""Template"" type=""tns:Template"" /> </s:sequence> </s:complexType> </s:element> <s:element minOccurs=""0"" maxOccurs=""1"" name=""WorkspaceStatus"" type=""tns:WorkspaceStatus"" /> </s:complexType> </s:element> </s:sequence> </s:complexType> </s:element> </s:sequence> </s:complexType> </s:element>"); // If the GetMeetingsInformationResult element exist, check the following requirements. if (result != null) { // Check response xml content and requestFlags parameter relationship and capture related requirements if (requestFlags.HasValue && (requestFlags & MeetingInfoTypes.AllowCreate) != 0) { // If AllowCreate is exist and server response pass the validation successfully, MS-MEETS_R192 can be verified. Site.CaptureRequirementIfIsTrue( isResponseValid, 192, @"[In GetMeetingsInformationResponse][AllowCreate is defined as follows:] <s:element name=""AllowCreate"" type=""CaseInsensitiveTrueFalse"" minOccurs=""0""/>"); // If server response pass the validation successfully, MS-MEETS_R2931 can be verified. Site.CaptureRequirementIfIsTrue( isResponseValid, 2931, @"[In CaseInsensitiveTrueFalse]The definition of the CaseInsensitiveTrueFalse simple type is as follows: <s:simpleType name=""CaseInsensitiveTrueFalse""> <s:restriction base=""s:string""> <s:pattern value=""[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee]""/> </s:restriction> </s:simpleType>"); } if (requestFlags.HasValue && (requestFlags & MeetingInfoTypes.QueryLanguages) != 0) { // Verifies MS-MEETS requirement: MS-MEETS_R3041 Site.CaptureRequirementIfIsTrue( isResponseValid, 3041, @"[In GetMeetingsInformationResponse][ListTemplateLanguages is defined as follows:] <s:element name=""ListTemplateLanguages"" minOccurs=""0""> <s:complexType> <s:sequence> <s:element minOccurs=""0"" maxOccurs=""unbounded"" name=""LCID"" type=""s:string""/> </s:sequence> </s:complexType> </s:element>"); } if (requestFlags.HasValue && (requestFlags & MeetingInfoTypes.QueryTemplates) != 0) { // Verifies MS-MEETS requirement: MS-MEETS_R201 Site.CaptureRequirementIfIsTrue( isResponseValid, 201, @"[In GetMeetingsInformationResponse][ListTemplates is defined as:] <s:element name=""ListTemplates"" minOccurs=""0""> <s:complexType> <s:sequence> <s:element minOccurs=""0"" maxOccurs=""unbounded"" name=""Template"" type=""tns:Template""/> </s:sequence> </s:complexType> </s:element>"); if (this.ElementExists(SchemaValidation.LastRawResponseXml, "Template")) { // If Template element exist, and the server response pass the validation successfully, // we can make sure Template is defined according to the schema. Site.CaptureRequirementIfIsTrue( isResponseValid, 20101, @"[In GetMeetingsInformationResponse][Template complex type is defined as follows:] <s:complexType name=""Template""> <s:attribute name=""Name"" type=""s:string""/> <s:attribute name=""Title"" type=""s:string""/> <s:attribute name=""Id"" type=""s:int""/> <s:attribute name=""Description"" type=""s:string""/> <s:attribute name=""ImageUrl"" type=""s:string""/> </s:complexType>"); } } if (requestFlags.HasValue && (requestFlags & MeetingInfoTypes.QueryOthers) != 0) { // Verifies MS-MEETS requirement: MS-MEETS_R212. Site.CaptureRequirementIfIsTrue( this.ElementExists(SchemaValidation.LastRawResponseXml, "WorkspaceStatus"), 212, @"[In GetMeetingsInformationResponse]This element [WorkspaceStatus]is present in the response when bit flag 0x8 is specified inrequestFlags."); // Verifies MS-MEETS requirement: MS-MEETS_R21201. Site.CaptureRequirementIfIsTrue( isResponseValid, 21201, @"[In GetMeetingsInformationResponse][WorkspaceStatus element is defined as follows:] <s:element name=""WorkspaceStatus"" type=""tns: WorkspaceStatus"" minOccurs=""0""/> < s:complexType name = ""WorkspaceStatus"" > < s:attribute name = ""UniquePermissions"" type = ""tns:CaseInsensitiveTrueFalseOrEmpty"" /> < s:attribute name = ""MeetingCount"" type = ""tns:IntOrEmpty"" /> < s:attribute name = ""AnonymousAccess"" type = ""tns:CaseInsensitiveTrueFalseOrEmpty"" /> < s:attribute name = ""AllowAuthenticatedUsers"" type = ""tns:CaseInsensitiveTrueFalseOrEmpty"" /> </ s:complexType > </ s:element > "); // Verifies MS-MEETS requirement: MS-MEETS_R18801. Site.CaptureRequirementIfIsTrue( isResponseValid, 18801, @"[In GetMeetingsInformationResponse][WorkspaceStatus complex type is defined as follows:] <s:complexType name=""WorkspaceStatus""> <s:attribute name=""UniquePermissions"" type=""tns:CaseInsensitiveTrueFalseOrEmpty""/> <s:attribute name=""MeetingCount"" type=""tns:UnsignedIntOrEmpty""/> <s:attribute name=""AnonymousAccess"" type=""tns:CaseInsensitiveTrueFalseOrEmpty""/> <s:attribute name=""AllowAuthenticatedUsers"" type=""tns:CaseInsensitiveTrueFalseOrEmpty""/> </s:complexType>"); // Verifies MS-MEETS requirement: MS-MEETS_R2932. Site.CaptureRequirementIfIsTrue( isResponseValid, 2932, @"[In CaseInsensitiveTrueFalseOrEmpty]The definition of the CaseInsensitiveTrueFalseOrEmpty simple type is as follows: <s:simpleType name=""CaseInsensitiveTrueFalseOrEmpty""> <s:restriction base=""s:string""> <s:pattern value=""([Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])?""/> </s:restriction> </s:simpleType>"); // Verifies MS-MEETS requirement: MS-MEETS_R2933. Site.CaptureRequirementIfIsTrue( isResponseValid, 2933, @"[In IntOrEmpty]The definition of the IntOrEmpty simple type is as follows: <s:simpleType name=""IntOrEmpty""> < s:union memberTypes = ""s:Int tns:Empty"" /> </ s:simpleType > "); // Verifies MS-MEETS requirement: MS-MEETS_R2934. Site.CaptureRequirementIfIsTrue( isResponseValid, 2934, @"[In Empty]The definition of the Empty simple type is as follows. <s:simpleType name=""Empty""> <s:restriction base=""s:string""> <s:maxLength value=""0""/> </s:restriction> </s:simpleType>"); } // Since the situation of requestFlag set to 0x1(AllowCreate),0x2(QueryLanguages),0x4(QueryTemplates),0x8(QueryOthers) have verified in above capture code, so MS-MEETS_R191 can be captured directly. Site.CaptureRequirement( 191, @"[In GetMeetingsInformationResponse]An element [AllowCreate or ListTemplateLanguages or ListTemplates or WorkspaceStatus]is present, if its corresponding requestFlags was set as follows."); } }
/// <summary> /// Queries information from a Web site about meeting workspaces on it or information about a meeting workspace itself. /// </summary> /// <param name="requestFlags">Bit flags that specify what information to request from the Web site. Null if not specified.</param> /// <param name="lcid">The locale ID of the meeting workspace templates to return. Null if not specified.</param> /// <returns>The aggregation of GetMeetingsInformationResponseGetMeetingsInformationResult response or SoapException thrown.</returns> public SoapResult<GetMeetingsInformationResponseGetMeetingsInformationResult> GetMeetingsInformation(MeetingInfoTypes? requestFlags, uint? lcid) { GetMeetingsInformationResponseGetMeetingsInformationResult result = null; SoapException exception = null; try { // Call GetMeetingsInformation method. result = this.service.GetMeetingsInformation((uint)(requestFlags ?? 0), requestFlags.HasValue, lcid ?? 0, lcid.HasValue); // As response successfully returned, the transport related requirements can be captured. this.CaptureTransportRelatedRequirements(); this.ValidateAndCaptureCommonMessageSyntax(); this.VerifyGetMeetingsInformationResponse(result, requestFlags); } catch (SoapException ex) { exception = ex; // As response successfully returned, the transport related requirements can be captured. this.CaptureTransportRelatedRequirements(); // Validate soap fault message structure and capture related requirements. this.ValidateAndCaptureSoapFaultRequirements(exception); } return new SoapResult<GetMeetingsInformationResponseGetMeetingsInformationResult>(result, exception); }