private void ValidateLoginResponse(LoginResult result)
{
XmlElement xmlResponse = SchemaValidation.LastRawResponseXml;
bool isResponseValid = SchemaValidation.ValidationResult == ValidationResult.Success;
// If the server response is validated successfully, we can make sure that the server responds with an LoginSoapOut response message, MS-AUTHWS_49, MS-AUTHWS_51, MS-AUTHWS_57 and MS-AUTHWS_40 can be verified.
Site.CaptureRequirementIfIsTrue(
isResponseValid,
49,
@"[In Login] [The Login operation is defined as follow:]
<wsdl:operation name=""Login"">
<wsdl:input message=""tns:LoginSoapIn"" />
<wsdl:output message=""tns:LoginSoapOut"" />
</wsdl:operation>");
Site.CaptureRequirementIfIsTrue(
isResponseValid,
51,
@"[In Login] [If the protocol client sends a LoginSoapIn request WSDL message] and the protocol server responds with a LoginSoapOut response WSDL message, as specified in section 3.1.4.1.1.2.");
Site.CaptureRequirementIfIsTrue(
isResponseValid,
57,
@"[In LoginSoapOut] The LoginSoapOut message is the response WSDL message that is used by a protocol server when logging on a user in response to a LoginSoapIn request message.");
Site.CaptureRequirementIfIsTrue(
isResponseValid,
40,
@"[In Message Processing Events and Sequencing Rules] The following table summarizes the list of WSDL operations[Login, Mode] that are defined by this protocol.");
// If the server response is validated successfully, and the LoginResponse has returned, MS-AUTHWS_59 can be verified.
Site.CaptureRequirementIfIsTrue(
this.ResponseExists(xmlResponse, "LoginResponse"),
59,
@"[In LoginSoapOut] The SOAP body contains a LoginResponse element, as specified in section 3.1.4.1.2.2.");
// If the server response is validated successfully, we can make sure that the server responds with LoginResponse, MS-AUTHWS_66 can be verified.
Site.CaptureRequirementIfIsTrue(
isResponseValid,
66,
@"[In LoginResponse] [The LoginResponse element is defined as follows:]
<s:element name=""LoginResponse"">
<s:complexType>
<s:sequence>
<s:element name=""LoginResult"" type=""tns:LoginResult""/>
</s:sequence>
</s:complexType>
</s:element>");
if (result != null)
{
// If LoginResult element exist, and the server response pass the validation successfully, we can make sure LoginResult is defined according to the schema, MS-AUTHWS_71, MS-AUTHWS_67, MS-AUTHWS_69 can be verified.
Site.CaptureRequirementIfIsTrue(
isResponseValid,
71,
@"[In LoginResult] [The LoginResult complex type is defined as follows:]
<s:complexType name=""LoginResult"">
<s:sequence>
<s:element name=""CookieName"" type=""s:string"" minOccurs=""0""/>
<s:element name=""ErrorCode"" type=""tns:LoginErrorCode""/>
<s:element name=""TimeoutSeconds"" type=""s:int"" minOccurs=""0"" maxOccurs=""1""/>
</s:sequence>
</s:complexType>");
Site.CaptureRequirementIfIsTrue(
isResponseValid,
67,
@"[In LoginResponse] LoginResult: A LoginResult complex type, as specified in section 3.1.4.1.3.1.");
Site.CaptureRequirementIfIsTrue(
isResponseValid,
69,
@"[In LoginResult] The LoginResult complex type contains an error code.");
// If LoginResult element exist, and the server response pass the validation successfully, we can make sure LoginErrorCode is defined according to the schema, MS-AUTHWS_79, MS-AUTHWS_75 and MS-AUTHWS_80 can be verified.
Site.CaptureRequirementIfIsTrue(
isResponseValid,
79,
@"[In LoginErrorCode] [The LoginErrorCode simple type is defined as follows:]
<s:simpleType name=""LoginErrorCode"">
<s:restriction base=""s:string"">
<s:enumeration value=""NoError""/>
<s:enumeration value=""NotInFormsAuthenticationMode""/>
<s:enumeration value=""PasswordNotMatch""/>
</s:restriction>
</s:simpleType>");
Site.CaptureRequirementIfIsTrue(
isResponseValid,
75,
@"[In LoginResult] ErrorCode: An error code, as specified in section 3.1.4.1.4.1.");
Site.CaptureRequirementIfIsTrue(
isResponseValid,
80,
@"[In LoginErrorCode] The LoginErrorCode field has three allowable values: [NoError, NotInFormsAuthenticationMode, PasswordNotMatch].");
}
this.ValidateAndCaptureCommonMessageSyntax();
}