<?xml version="1.0"?>
<!-- 
    Web Services Addressing WSDL Binding Test Cases
    $Date: 2006/07/28 16:55:55 $
-->
<!--

  - Add XPaths for inputs and output processing
  - CR status: REQUIRED, OPTIONAL, INFORMATIONAL
  - CR documents covered: CORE, SOAP, WSDL
  - generic tagging of tests

-->

<testcases xmlns="http://www.w3.org/2002/ws/addr/testsuite/testcases/">

  <ns prefix="wsa" uri="http://www.w3.org/2005/08/addressing"/>
  <ns prefix="wsaw" uri="http://www.w3.org/2006/05/addressing/wsdl"/>
  <ns prefix="soap11" uri="http://schemas.xmlsoap.org/soap/envelope/"/>
  <ns prefix="soap12" uri="http://www.w3.org/2003/05/soap-envelope"/>
  <ns prefix="wsdl11" uri="http://schemas.xmlsoap.org/wsdl/"/>
  <ns prefix="wsdl20" uri="http://www.w3.org/2006/01/wsdl"/>
  <ns prefix="xs" uri="http://www.w3.org/2001/XMLSchema"/>
  <ns prefix="customer" uri="http://example.org/customer"/>
  <ns prefix="notify" uri="http://example.org/notify"/>
  <ns prefix="echo" uri="http://example.org/echo"/>
  <ns prefix="alertcontrol" uri="http://example.org/alertcontrol"/>
  <ns prefix="log" uri="http://www.w3.org/2002/ws/addressing/logs/"/>

    <testcase xml:id="test11010"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - UsingAddressing on binding, required=true, client send addressing headers</title>
      <description><![CDATA[UsingAddressing appear as child of wsdl:binding and wsdl:required attribute is set to true.
							The presence of WS-A headers is tested in request and response message.]]></description>
	  <port>wsaTestPortTypePortAddressingRequired</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B" document="echo/soap11/message0.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoRequest'"/>
      </message>
      <message from="B" to="A" document="echo/soap11/message1.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoResponse'"/>
      </message>
      </message-exchange>
    </testcase>

    <testcase xml:id="test11020"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - UsingAddressing on binding, required=true, client does not send addressing headers</title>
      <description><![CDATA[UsingAddressing appear as child of wsdl:binding and wsdl:required attribute is set to true.
							The WS-A headers are absent on the request message and a fault message is returned on the HTTP response.]]></description>
	  <port>wsaTestPortTypePortAddressingRequired</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B" document="echo/soap11/message7.xml" name="message">
          <assert test="count(soap11:Envelope/soap11:Header/wsa:Action) = 0"/>
      </message>
      <message from="B" to="A" document="echo/soap11/message8.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://www.w3.org/2005/08/addressing/fault'"/>
		  <assert test="soap11:Envelope/soap11:Body/soap11:Fault/faultcode/(resolve-QName(.,.) = xs:QName('wsa:MessageAddressingHeaderRequired'))"/>
      </message>
      </message-exchange>
    </testcase>

    <testcase xml:id="test11030"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - UsingAddressing on port, required=true, client send addressing headers</title>
      <description><![CDATA[UsingAddressing appear as child of wsdl:port and wsdl:required attribute is set to true.
							The presence of WS-A headers is tested in request and response message.]]></description>
      <port>wsaTestPortTypePortAddressingRequiredOnPort</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B" document="echo/soap11/message0.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoRequest'"/>
      </message>
      <message from="B" to="A" document="echo/soap11/message1.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoResponse'"/>
      </message>
      </message-exchange>
    </testcase>

    <testcase xml:id="test11040"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - UsingAddressing on port, required=true, client does not send addressing headers</title>
      <description><![CDATA[UsingAddressing appear as child of wsdl:port and wsdl:required attribute is set to true.
							The WS-A headers are absent on the request message and a fault is returned on the HTTP response.]]></description>
      <port>wsaTestPortTypePortAddressingRequiredOnPort</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B" document="echo/soap11/message7.xml" name="message">
          <assert test="count(soap11:Envelope/soap11:Header/wsa:Action) = 0"/>
      </message>
      <message from="B" to="A" document="echo/soap11/message8.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://www.w3.org/2005/08/addressing/fault'"/>
		  <assert test="soap11:Envelope/soap11:Body/soap11:Fault/faultcode/(resolve-QName(.,.) = xs:QName('wsa:MessageAddressingHeaderRequired'))"/>
      </message>
      </message-exchange>
    </testcase>

    <testcase xml:id="test11050"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - UsingAddressing on binding, required=false, client send addressing headers</title>
      <description><![CDATA[UsingAddressing appear as child of wsdl:binding and wsdl:required attribute is set to false.
							The presence of WS-A headers is tested in request and response message.]]></description>
      <port>wsaTestPortTypePortAddressingNotRequired</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
          <message from="A" to="B" document="echo/soap11/message0.xml" name="message">
              <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoRequest'"/>
          </message>
          <message from="B" to="A" document="echo/soap11/message1.xml" name="message">
              <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoResponse'"/>
          </message>
      </message-exchange>
    </testcase>

    <testcase xml:id="test11060"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - UsingAddressing on binding, required=false, client does not send addressing headers</title>
      <description><![CDATA[UsingAddressing appear as child of wsdl:binding and wsdl:required attribute is set to false.
							The WS-A headers are absent on the request message. A response message is returned on the HTTP response.
							If WS-A headers are present in response then they must not be marked mustUnderstand=true.]]></description>
      <port>wsaTestPortTypePortAddressingNotRequired</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B" document="echo/soap11/message8.xml" name="message">
          <assert test="count(soap11:Envelope/soap11:Header/wsa:Action) = 0"/>
      </message>
      <message from="B" to="A" document="echo/soap11/message9.xml" name="message">
          <assert test="(count(soap11:Envelope/soap11:Header/wsa:Action) = 0) or (soap11:Envelope/soap11:Header/wsa:Action != 'http://www.w3.org/2005/08/addressing/fault')"/>
          <assert test="(count(soap11:Envelope/soap11:Header/wsa:Action/@soap11:mustUnderstand) = 0) or (soap11:Envelope/soap11:Header/wsa:Action/@soap11:mustUnderstand = false())"/>
      </message>
      </message-exchange>
    </testcase>

    <testcase xml:id="test11070"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - UsingAddressing on port, required=false, client send addressing headers</title>
      <description><![CDATA[UsingAddressing appear as child of wsdl:port and wsdl:required attribute is set to false.
							The presence of WS-A headers is tested in request and response message.]]></description>
      <port>wsaTestPortTypePortAddressingNotRequiredOnPort</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
          <message from="A" to="B" document="echo/soap11/message0.xml" name="message">
              <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoRequest'"/>
          </message>
          <message from="B" to="A" document="echo/soap11/message1.xml" name="message">
              <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoResponse'"/>
          </message>
      </message-exchange>
    </testcase>

    <testcase xml:id="test11080"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - UsingAddressing on port, required=false, client does not send addressing headers</title>
      <description><![CDATA[UsingAddressing appear as child of wsdl:port and wsdl:required attribute is set to false.
							The WS-A headers are absent on the request message. A response message is returned on the HTTP response.
							If WS-A headers are present in response then they must not be marked mustUnderstand=true.]]></description>
      <port>wsaTestPortTypePortAddressingNotRequiredOnPort</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B" document="echo/soap11/message8.xml" name="message">
          <assert test="count(soap11:Envelope/soap11:Header/wsa:Action) = 0"/>
      </message>
      <message from="B" to="A" document="echo/soap11/message9.xml" name="message">
          <assert test="(count(soap11:Envelope/soap11:Header/wsa:Action) = 0) or (soap11:Envelope/soap11:Header/wsa:Action != 'http://www.w3.org/2005/08/addressing/fault')"/>
          <assert test="(count(soap11:Envelope/soap11:Header/wsa:Action/@soap11:mustUnderstand) = 0) or (soap11:Envelope/soap11:Header/wsa:Action/@soap11:mustUnderstand = false())"/>
      </message>
      </message-exchange>
    </testcase>

    <testcase xml:id="test11090"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - explicit action</title>
      <description><![CDATA[An explicit wsaw:Action is specified on the input and output message.
							The presence of correct Action header is checked on the request and response message.]]></description>
      <port>wsaTestPortTypePortExplicitAction</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B" document="echo/soap11/message2.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/action/echoIn'"/>
      </message>
      <message from="B" to="A" document="echo/soap11/message3.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/action/echoOut'"/>
      </message>
      </message-exchange>
    </testcase>

    <testcase xml:id="test11100"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - explicit action - fault if incorrect action received</title>
      <description><![CDATA[An explicit wsaw:Action is specified on the input and output message.
							The request message contains an incorrect Action header.
							A fault message is returned on the HTTP response indicating the nature of fault.]]></description>
      <port>wsaTestPortTypePortExplicitAction</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B" document="echo/soap11/message4.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action != 'http://example.org/action/echoIn'"/>
      </message>
      <message from="B" to="A" document="echo/soap11/message5.xml" name="message">
          <!-- TODO: Do we need to add check for cause of the fault ? -->
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://www.w3.org/2005/08/addressing/fault'"/>
		  <assert test="soap11:Envelope/soap11:Body/soap11:Fault/faultcode/(resolve-QName(.,.) = xs:QName('wsa:ActionNotSupported'))"/>
      </message>
      </message-exchange>
    </testcase>

    <testcase xml:id="test11101"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - explicit fault action</title>
      <description><![CDATA[An explicit wsaw:Action is specified on the input and fault message.
							Application fault message is returned on the HTTP response.
							The presence of correct Action header is checked on the request and fault message.]]></description>
      <port>wsaTestPortTypePortExplicitAction</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B" document="echo/soap11/message2.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/action/echoIn'"/>
      </message>
      <message from="B" to="A" document="echo/soap11/message6.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/action/echoFault'"/>
		  <assert test="soap11:Envelope/soap11:Body/soap11:Fault/detail/echo:echoFault"/>
      </message>
      </message-exchange>
    </testcase>

    <testcase xml:id="test11110"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - action based dispatch - explicit action</title>
      <description><![CDATA[The wsdl:portType contain two request-response operations with same message body for the request message,
							different wsaw:Action values and different message bodies for the response message.
							assertion: confirm that the correct response body is returned based on the specified action value]]></description>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/action/echoIn'"/>
      </message>
      <message from="B" to="A">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/action/echoOut'"/>
      </message>
      </message-exchange>
    </testcase>

  <testcase xml:id="test11120"
    origin=""
    cr="REQUIRED">
    <title>request-response operation - action based dispatch - default action pattern</title>
    <description><![CDATA[wsdl port type containing two req/resp operations the message body for the request is the same with default action and different response message bodies.
						  assertion: confirm that the correct response body is returned based on the specified action value]]></description>
    <port>wsaTestPortTypePortAddressingRequired</port>
    <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
	<message from="A" to="B">
	    <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoRequest'"/>
	</message>
    <message from="B" to="A">
		<assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoResponse'"/>
    </message>
    </message-exchange>
  </testcase>

    <testcase xml:id="test11130"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - default action pattern</title>
      <description><![CDATA[No wsaw:Action on the input and output message of the operation. The presence of implicit Action is checked on the request and response message.]]></description>
	  <port>wsaTestPortTypePortAddressingRequired</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B" document="echo/soap11/message0.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoRequest'"/>
      </message>
      <message from="B" to="A" document="echo/soap11/message1.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoResponse'"/>
      </message>
      </message-exchange>
    </testcase>

    <testcase xml:id="test11131"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - default action pattern - fault if incorrect action received</title>
      <description><![CDATA[No wsaw:Action on the input and output message of the operation. The request message contains an incorrect Action header.
							A fault message is returned on the HTTP response indicating the nature of fault.]]></description>
  	  <port>wsaTestPortTypePortAddressingRequired</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B" document="echo/soap11/message4.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action != 'http://example.org/wsaTestService2/wsaTestPortType/echoRequest'"/>
      </message>
      <message from="B" to="A" document="echo/soap11/message5.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://www.w3.org/2005/08/addressing/fault'"/>
		  <assert test="soap11:Envelope/soap11:Body/soap11:Fault/faultcode/(resolve-QName(.,.) = xs:QName('wsa:ActionNotSupported'))"/>
      </message>
      </message-exchange>
    </testcase>

    <testcase xml:id="test11132"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - default fault action pattern</title>
      <description><![CDATA[No wsaw:Action on the input and fault message of the operation. Application fault message is returned on the HTTP response.
							The presence of correct Action header is checked on the request and fault message.]]></description>
  	  <port>wsaTestPortTypePortAddressingRequired</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B" document="echo/soap11/message4.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoRequest'"/>
      </message>
      <message from="B" to="A" document="echo/soap11/message10.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echo/Fault/echoFaultName'"/>
			<assert test="soap11:Envelope/soap11:Body/soap11:Fault/detail/echo:echoFault"/>
      </message>
      </message-exchange>
    </testcase>

    <testcase xml:id="test11133"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - default action pattern using SOAPAction</title>
      <description><![CDATA[Normal WSDL (same as we have been using) with no action value specified and SOAPAction specified in binding.
							assertion: client sends action value the same as SOAPAction and server responds with correct response]]></description>
      <port>wsaTestPortTypePortSoapAction</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B" document="echo/soap11/message11.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService/echo'"/>
      </message>
      <message from="B" to="A" document="echo/soap11/message1.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoResponse'"/>
      </message>
      </message-exchange>
    </testcase>

    <testcase xml:id="test11134"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - default action pattern using SOAPAction - fault if incorrect action received</title>
      <description><![CDATA[Normal WSDL (same as we have been using) with no action value specified and SOAPAction specified in binding.
							assertion: client sends action incorrect action and server returns appropriate fault]]></description>
      <port>wsaTestPortTypePortSoapAction</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B" document="echo/soap11/message4.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action != 'http://example.org/wsaTestService/echo'"/>
      </message>
      <message from="B" to="A" document="echo/soap11/message5.xml" name="message">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://www.w3.org/2005/08/addressing/fault'"/>
		  <assert test="soap11:Envelope/soap11:Body/soap11:Fault/faultcode/(resolve-QName(.,.) = xs:QName('wsa:ActionNotSupported'))"/>
      </message>
      </message-exchange>
    </testcase>

<testcase xml:id="test11135"
    origin=""
    cr="REQUIRED">
    <title>request-response operation - default action pattern - URN target namespace</title>
    <description><![CDATA[The WSDL has a target namespace using urn scheme. The presence of correction Action header is checked on the request and response message.]]></description>
    <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
	<message from="A" to="B">
	    <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'urn:example.org:wsaTestService2:wsaTestPortType:echoRequest'"/>
	</message>
    <message from="B" to="A">
		<assert test="soap11:Envelope/soap11:Header/wsa:Action = 'urn:example.org:wsaTestService2:wsaTestPortType:echoResponse'"/>
    </message>
    </message-exchange>
  </testcase>

<testcase xml:id="test11140"
    origin=""
    cr="OPTIONAL">
    <title>request-response operation - default action pattern - URN target namespace - fault if incorrect action received</title>
    <description><![CDATA[The WSDL has a target namespace using urn scheme. No wsaw:action is specified on the input and output message.
						  The request message contains an incorrect Action header.
						  A fault message is received on the HTTP response with approrpiate fault code/subcode.]]></description>
    <port>wsaTestPortTypePortAddressingRequired</port>
    <message-exchange type="SOAP11-HTTP-In-Out-Fault" addr-binding="soap11">
	<message from="A" to="B">
	    <assert test="soap11:Envelope/soap11:Header/wsa:Action != 'urn:example.org:wsaTestService2:wsaTestPortType:echoRequest'"/>
	</message>
    <message from="B" to="A">
		<assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://www.w3.org/2005/08/addressing/fault'"/>
		<assert test="soap11:Envelope/soap11:Body/soap11:Fault/faultcode/(resolve-QName(.,.) = xs:QName('wsa:ActionNotSupported'))"/>
	    <assert test="soap11:Envelope/soap11:Header/wsa:FaultDetail/wsa:ProblemAction/wsa:Action"/>
    </message>
    </message-exchange>
  </testcase>

    <testcase xml:id="test11141"
      origin=""
      cr="REQUIRED">
      <title>request-response operation - default fault action pattern - URN target namespace</title>
      <description><![CDATA[The WSDL has a target namespace using urn scheme. No wsaw:Action on the input and fault message of the operation.
							Application fault message is returned on the HTTP response. The presence of correct Action header is checked on the response message.]]></description>
  	  <port>wsaTestPortTypePortAddressingRequired</port>
      <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
      <message from="A" to="B">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'urn:example.org:wsaTestService2:wsaTestPortType:echoRequest'"/>
      </message>
      <message from="B" to="A">
          <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'urn:example.org:wsaTestService2:wsaTestPortType:echo:Fault:echoFaultName'"/>
			<assert test="soap11:Envelope/soap11:Body/soap11:Fault/detail/echo:echoFault"/>
      </message>
      </message-exchange>
    </testcase>

<testcase xml:id="test11150"
    origin=""
    cr="REQUIRED">
    <title>request-response operation - anonymous=required in WSDL, wsa:ReplyTo/wsa:Address=anonymous</title>
    <description><![CDATA[The binding of a request-response operation specify wsaw:Anonymous=required.
						  The request message contains anonymous ReplyTo. A response message is returned on the HTTP response.]]></description>
    <port>wsaTestPortTypePortAnonymousRequired</port>
    <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
	<message from="A" to="B">
	    <assert test="soap11:Envelope/soap11:Header/wsa:ReplyTo/wsa:Address = 'http://www.w3.org/2005/08/addressing/anonymous'"/>
	</message>
    <message from="B" to="A">
		<!--  simply prove that there is a non-fault message in the back channel -->
		<assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoResponse'"/>
    </message>
    </message-exchange>
  </testcase>

<testcase xml:id="test11160"
    origin=""
    cr="REQUIRED">
    <title>request-response operation - anonymous=required in WSDL, wsa:ReplyTo/wsa:Address=non-anonymous</title>
    <description><![CDATA[The binding of a request-response operation specify wsaw:Anonymous=required.
						  The request message contains non-anonymous ReplyTo.
						  A fault message is returned on the HTTP response with approrpiate fault code/subcode.]]></description>
    <port>wsaTestPortTypePortAnonymousRequired</port>
    <message-exchange type="SOAP11-HTTP-In-Out-Fault" addr-binding="soap11">
	<message from="A" to="B">
	    <assert test="not(soap11:Envelope/soap11:Header/wsa:ReplyTo/wsa:Address = '')"/>
	    <assert test="not(soap11:Envelope/soap11:Header/wsa:ReplyTo/wsa:Address = 'http://www.w3.org/2005/08/addressing/anonymous')"/>
	</message>
    <message from="B" to="A">
		<assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://www.w3.org/2005/08/addressing/fault'"/>
		<assert test="soap11:Envelope/soap11:Body/soap11:Fault/faultcode/(resolve-QName(.,.) = xs:QName('wsa:InvalidAddressingHeader'))
						or soap11:Envelope/soap11:Body/soap11:Fault/faultcode/(resolve-QName(.,.) = xs:QName('wsa:OnlyAnonymousAddressSupported'))"/>
    </message>
    </message-exchange>
  </testcase>

    <testcase xml:id="test11161"
        origin=""
        cr="REQUIRED">
        <title>request-response operation - anonymous=required in WSDL, wsa:FaultTo/wsa:Address=non-anonymous</title>
        <description><![CDATA[The binding of a request-response operation specify wsaw:Anonymous=required.
							  The request message contains non-anonymous FaultTo.
							  A fault message is returned on the HTTP response with approrpiate fault code/subcode.]]></description>
        <port>wsaTestPortTypePortAnonymousRequired</port>
        <message-exchange type="SOAP11-HTTP-In-Out-Fault" addr-binding="soap11">
        <message from="A" to="B">
            <assert test="not(soap11:Envelope/soap11:Header/wsa:FaultTo/wsa:Address = '')"/>
            <assert test="not(soap11:Envelope/soap11:Header/wsa:FaultTo/wsa:Address = 'http://www.w3.org/2005/08/addressing/anonymous')"/>
        </message>
        <message from="B" to="A">
            <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://www.w3.org/2005/08/addressing/fault'"/>
            <assert test="soap11:Envelope/soap11:Body/soap11:Fault/faultcode/(resolve-QName(.,.) = xs:QName('wsa:InvalidAddressingHeader'))
                            or soap11:Envelope/soap11:Body/soap11:Fault/faultcode/(resolve-QName(.,.) = xs:QName('wsa:OnlyAnonymousAddressSupported'))"/>
        </message>
        </message-exchange>
      </testcase>


    <testcase xml:id="test11170"
        origin=""
        cr="REQUIRED">
        <title>request-response operation - anonymous=prohibited in WSDL, wsa:ReplyTo/wsa:Address=non-anonymous</title>
        <description><![CDATA[The binding of a request-response operation specify wsaw:Anonymous=prohibited.
							  The request message contains non-anonymous ReplyTo. A response message is returned on the ReplyTo address.]]></description>
        <port>wsaTestPortTypePortAnonymousProhibited</port>
        <message-exchange type="SOAP11-HTTP-In-Out-Callback" addr-binding="soap11">
        <message from="A" to="B">
            <assert test="not(soap11:Envelope/soap11:Header/wsa:ReplyTo/wsa:Address = '')"/>
            <assert test="not(soap11:Envelope/soap11:Header/wsa:ReplyTo/wsa:Address = 'http://www.w3.org/2005/08/addressing/anonymous')"/>
        </message>
        <message from="B" to="A" />
        <message from="B" to="A">
            <!--  simply prove that there is a non-fault message in a non-backchannel message -->
            <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoResponse'"/>
        </message>
        </message-exchange>
      </testcase>

<testcase xml:id="test11180"
    origin=""
    cr="REQUIRED">
    <title>request-response operation - anonymous=prohibited in WSDL, wsa:ReplyTo/wsa:Address=anon, wsa:FaultTo/wsa:Address=non-anon</title>
    <description><![CDATA[The binding of a request-response operation specify wsaw:Anonymous=prohibited.
						  The request message contains an anonymous ReplyTo and non-anonymous FaultTo. A fault message is returned on the FaultTo address.]]></description>
    <port>wsaTestPortTypePortAnonymousProhibited</port>
    <message-exchange type="SOAP11-HTTP-In-Out-Callback" addr-binding="soap11">
	<message from="A" to="B">
        <assert test="not(soap11:Envelope/soap11:Header/wsa:ReplyTo/wsa:Address) or (soap11:Envelope/soap11:Header/wsa:ReplyTo/wsa:Address = 'http://www.w3.org/2005/08/addressing/anonymous')"/>
	    <assert test="not(soap11:Envelope/soap11:Header/wsa:FaultTo/wsa:Address = '')"/>
	    <assert test="not(soap11:Envelope/soap11:Header/wsa:FaultTo/wsa:Address = 'http://www.w3.org/2005/08/addressing/anonymous')"/>
	</message>
	<message from="B" to="A" />
    <message from="B" to="A">
		<assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://www.w3.org/2005/08/addressing/fault'"/>
		<assert test="soap11:Envelope/soap11:Body/soap11:Fault/faultcode/(resolve-QName(.,.) = xs:QName('wsa:InvalidAddressingHeader'))
						or soap11:Envelope/soap11:Body/soap11:Fault/faultcode/(resolve-QName(.,.) = xs:QName('wsa:OnlyNonAnonymousAddressSupported'))"/>
    </message>
    </message-exchange>
  </testcase>

<testcase xml:id="test11190"
    origin=""
    cr="REQUIRED">
    <title>request-response operation - anonymous=prohibited in WSDL, wsa:ReplyTo/wsa:Address=anonymous, wsa:FaultTo/wsa:Address=anon</title>
    <description><![CDATA[The binding of a request-response operation specify wsaw:Anonymous=prohibited.
							The request message contains anonymous ReplyTo and FaultTo. A fault message is returned on the TBD.]]></description>

    <port>wsaTestPortTypePortAnonymousProhibited</port>
    <message-exchange type="SOAP11-HTTP-In-Out-Callback" addr-binding="soap11">
	<message from="A" to="B">
		<assert test=" not(soap11:Envelope/soap11:Header/wsa:ReplyTo/wsa:Address)
						or soap11:Envelope/soap11:Header/wsa:ReplyTo/wsa:Address = ''
						or soap11:Envelope/soap11:Header/wsa:ReplyTo/wsa:Address = 'http://www.w3.org/2005/08/addressing/anonymous'"/>
	    <assert test=" not(soap11:Envelope/soap11:Header/wsa:FaultTo/wsa:Address)
						or soap11:Envelope/soap11:Header/wsa:FaultTo/wsa:Address = ''
						or soap11:Envelope/soap11:Header/wsa:FaultTo/wsa:Address = 'http://www.w3.org/2005/08/addressing/anonymous'"/>
	</message>
	<message from="B" to="A" />
    <message from="B" to="A">
		<assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://www.w3.org/2005/08/addressing/fault'"/>
		<assert test="soap11:Envelope/soap11:Body/soap11:Fault/faultcode/(resolve-QName(.,.) = xs:QName('wsa:InvalidAddressingHeader'))
						or soap11:Envelope/soap11:Body/soap11:Fault/faultcode/(resolve-QName(.,.) = xs:QName('wsa:OnlyAnonymousAddressSupported'))"/>
    </message>
    </message-exchange>
  </testcase>

    <testcase xml:id="test11191"
        origin=""
        cr="REQUIRED">
        <title>request-response operation - anonymous=prohibited in WSDL, wsa:ReplyTo/wsa:Address=anonymous</title>
        <description><![CDATA[The binding of a request-response operation specify wsaw:Anonymous=prohibited. The request message contains anonymous ReplyTo.]]></description>
        <port>wsaTestPortTypePortAnonymousProhibited</port>
        <message-exchange type="SOAP11-HTTP-In-Out-Callback" addr-binding="soap11">
        <message from="A" to="B">
            <assert test="soap11:Envelope/soap11:Header/wsa:ReplyTo/wsa:Address = 'http://www.w3.org/2005/08/addressing/anonymous'"/>
        </message>
        <message from="B" to="A" >
            <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://www.w3.org/2005/08/addressing/fault'"/>
        </message>
        </message-exchange>
      </testcase>

    <testcase xml:id="test11200"
        origin=""
        cr="REQUIRED">
        <title>request-response operation - anonymous=optional in WSDL, wsa:ReplyTo/wsa:Address=nonanonymous</title>
        <description><![CDATA[The binding of a request-response operation specify wsaw:Anonymous=optional.
							  The request message contains non-anonymous ReplyTo. A response message is returned on the ReplyTo address.]]></description>
        <port>wsaTestPortTypePortAnonymousOptional</port>
        <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
        <message from="A" to="B">
            <assert test="not(soap11:Envelope/soap11:Header/wsa:ReplyTo/wsa:Address = '')"/>
            <assert test="not(soap11:Envelope/soap11:Header/wsa:ReplyTo/wsa:Address = 'http://www.w3.org/2005/08/addressing/anonymous')"/>
        </message>
        <message from="B" to="A" />
        <message from="B" to="A">
            <!--  simply prove that there is a non-fault message in a callback -->
            <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoResponse'"/>
        </message>
        </message-exchange>
      </testcase>

    <testcase xml:id="test11201"
        origin=""
        cr="REQUIRED">
        <title>request-response operation - anonymous=optional in WSDL, wsa:FaultTo/wsa:Address=nonanonymous</title>
        <description><![CDATA[The binding of a request-response operation specify wsaw:Anonymous=optional. The request message contains non-anonymous FaultTo.
							  Application fault message is returned on the FaultTo address.]]></description>
        <port>wsaTestPortTypePortAnonymousOptional</port>
        <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
        <message from="A" to="B">
            <assert test="not(soap11:Envelope/soap11:Header/wsa:FaultTo/wsa:Address = '')"/>
            <assert test="not(soap11:Envelope/soap11:Header/wsa:FaultTo/wsa:Address = 'http://www.w3.org/2005/08/addressing/anonymous')"/>
        </message>
        <message from="B" to="A" />
        <message from="B" to="A">
            <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echo/Fault/echoFaultName'"/>
			<assert test="soap11:Envelope/soap11:Body/soap11:Fault/detail/echo:echoFault"/>
        </message>
        </message-exchange>
      </testcase>

<testcase xml:id="test11210"
    origin=""
    cr="REQUIRED">
    <title>request-response operation - anonymous=optional in WSDL, wsa:ReplyTo/wsa:Address=anonymous</title>
    <description><![CDATA[The binding of a request-response operation specify wsaw:Anonymous=optional. The request message contains anonymous ReplyTo.
							A response message is returned on the HTTP response.]]></description>
    <port>wsaTestPortTypePortAnonymousOptional</port>
    <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
	<message from="A" to="B">
	    <assert test="soap11:Envelope/soap11:Header/wsa:ReplyTo/wsa:Address = 'http://www.w3.org/2005/08/addressing/anonymous'"/>
	</message>
    <message from="B" to="A">
		<!--  simply prove that there is a non-fault message in the backchannel -->
		<assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echoResponse'"/>
    </message>
    </message-exchange>
  </testcase>

    <testcase xml:id="test11211"
        origin=""
        cr="REQUIRED">
        <title>request-response operation - anonymous=optional in WSDL, wsa:FaultTo/wsa:Address=anonymous</title>
        <description><![CDATA[The binding of a request-response operation specify wsaw:Anonymous=optional. The request message contains anonymous FaultTo.
							Application fault message is returned on the HTTP response.]]></description>
        <port>wsaTestPortTypePortAnonymousOptional</port>
        <message-exchange type="SOAP11-HTTP-In-Out" addr-binding="soap11">
        <message from="A" to="B">
            <assert test="soap11:Envelope/soap11:Header/wsa:FaultTo/wsa:Address = 'http://www.w3.org/2005/08/addressing/anonymous'"/>
        </message>
        <message from="B" to="A">
            <assert test="soap11:Envelope/soap11:Header/wsa:Action = 'http://example.org/wsaTestService2/wsaTestPortType/echo/Fault/echoFaultName'"/>
			<assert test="soap11:Envelope/soap11:Body/soap11:Fault/detail/echo:echoFault"/>
        </message>
        </message-exchange>
      </testcase>

</testcases>
