/* * 2012-3 Red Hat Inc. and/or its affiliates and other contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.overlord.rtgov.tests.platforms.jbossas.policy.async; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPConnection; import javax.xml.soap.SOAPConnectionFactory; import javax.xml.soap.SOAPMessage; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.OperateOnDeployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.spec.JavaArchive; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.shrinkwrap.resolver.api.maven.Maven; import org.junit.Test; import org.junit.runner.RunWith; import static org.junit.Assert.*; @RunWith(Arquillian.class) public class JBossASPolicyAsyncTest { private static final String ORDER_SERVICE_URL = "http://127.0.0.1:8080/demo-orders/OrderService"; @Deployment(name="orders-app", order=1) public static JavaArchive createDeployment1() { String version=System.getProperty("rtgov.version"); java.io.File archiveFile=Maven.resolver().resolve("org.overlord.rtgov.samples.jbossas.ordermgmt:samples-jbossas-ordermgmt-app:"+version) .withoutTransitivity().asSingleFile(); return ShrinkWrap.createFromZipFile(JavaArchive.class, archiveFile); } @Deployment(name="orders-ip", order=2) public static WebArchive createDeployment2() { String version=System.getProperty("rtgov.version"); java.io.File archiveFile=Maven.resolver().resolve("org.overlord.rtgov.samples.jbossas.ordermgmt:samples-jbossas-ordermgmt-ip:war:"+version) .withoutTransitivity().asSingleFile(); return ShrinkWrap.createFromZipFile(WebArchive.class, archiveFile); } @Deployment(name="policy-async-av", order=3) public static WebArchive createDeployment3() { String version=System.getProperty("rtgov.version"); java.io.File archiveFile=Maven.resolver().resolve("org.overlord.rtgov.samples.jbossas.policy:samples-jbossas-policy-async-av:war:"+version) .withoutTransitivity().asSingleFile(); return ShrinkWrap.createFromZipFile(WebArchive.class, archiveFile); } @Deployment(name="policy-async-epn", order=4) public static WebArchive createDeployment4() { String version=System.getProperty("rtgov.version"); java.io.File archiveFile=Maven.resolver().resolve("org.overlord.rtgov.samples.jbossas.policy:samples-jbossas-policy-async-epn:war:"+version) .withoutTransitivity().asSingleFile(); return ShrinkWrap.createFromZipFile(WebArchive.class, archiveFile); } @Test @OperateOnDeployment("orders-app") public void testEnforcePolicy() { try { SOAPConnectionFactory factory=SOAPConnectionFactory.newInstance(); SOAPConnection con=factory.createConnection(); java.net.URL url=new java.net.URL(ORDER_SERVICE_URL); String mesg1="<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"+ " <soap:Body>"+ " <orders:submitOrder xmlns:orders=\"urn:switchyard-quickstart-demo:orders:1.0\">"+ " <order>"+ " <orderId>PO-19838-XYZ</orderId>"+ " <itemId>BUTTER</itemId>"+ " <quantity>200</quantity>"+ " <customer>Fred</customer>"+ " </order>"+ " </orders:submitOrder>"+ " </soap:Body>"+ "</soap:Envelope>"; java.io.InputStream is1=new java.io.ByteArrayInputStream(mesg1.getBytes()); SOAPMessage request1=MessageFactory.newInstance().createMessage(null, is1); is1.close(); SOAPMessage response1=con.call(request1, url); java.io.ByteArrayOutputStream baos1=new java.io.ByteArrayOutputStream(); response1.writeTo(baos1); String resp1=baos1.toString(); baos1.close(); if (!resp1.contains("<accepted>true</accepted>")) { fail("Order was not accepted: "+resp1); } // Wait for events to propagate Thread.sleep(4000); String mesg2="<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"+ " <soap:Body>"+ " <orders:submitOrder xmlns:orders=\"urn:switchyard-quickstart-demo:orders:1.0\">"+ " <order>"+ " <orderId>PO-19838-XYZ</orderId>"+ " <itemId>BUTTER</itemId>"+ " <quantity>200</quantity>"+ " <customer>Fred</customer>"+ " </order>"+ " </orders:submitOrder>"+ " </soap:Body>"+ "</soap:Envelope>"; java.io.InputStream is2=new java.io.ByteArrayInputStream(mesg2.getBytes()); SOAPMessage request2=MessageFactory.newInstance().createMessage(null, is2); is2.close(); SOAPMessage response2=con.call(request2, url); java.io.ByteArrayOutputStream baos2=new java.io.ByteArrayOutputStream(); response2.writeTo(baos2); String resp2=baos2.toString(); baos2.close(); if (resp2.contains("<accepted>true</accepted>")) { fail("Order should not be accepted, due to customer suspension: "+resp2); } String mesg3="<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"+ " <soap:Body>"+ " <orders:makePayment xmlns:orders=\"urn:switchyard-quickstart-demo:orders:1.0\">"+ " <payment>"+ " <amount>200</amount>"+ " <customer>Fred</customer>"+ " </payment>"+ " </orders:makePayment>"+ " </soap:Body>"+ "</soap:Envelope>"; java.io.InputStream is3=new java.io.ByteArrayInputStream(mesg3.getBytes()); SOAPMessage request3=MessageFactory.newInstance().createMessage(null, is3); is2.close(); SOAPMessage response3=con.call(request3, url); java.io.ByteArrayOutputStream baos3=new java.io.ByteArrayOutputStream(); response3.writeTo(baos3); String resp3=baos3.toString(); baos3.close(); if (!resp3.contains("<receipt>")) { fail("Receipt was not returned: "+resp3); } // Wait for events to propagate Thread.sleep(4000); // Repeat first request, which should now be accepted again String mesg4="<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"+ " <soap:Body>"+ " <orders:submitOrder xmlns:orders=\"urn:switchyard-quickstart-demo:orders:1.0\">"+ " <order>"+ " <orderId>PO-19838-XYZ</orderId>"+ " <itemId>BUTTER</itemId>"+ " <quantity>200</quantity>"+ " <customer>Fred</customer>"+ " </order>"+ " </orders:submitOrder>"+ " </soap:Body>"+ "</soap:Envelope>"; java.io.InputStream is4=new java.io.ByteArrayInputStream(mesg4.getBytes()); SOAPMessage request4=MessageFactory.newInstance().createMessage(null, is4); is4.close(); SOAPMessage response4=con.call(request4, url); java.io.ByteArrayOutputStream baos4=new java.io.ByteArrayOutputStream(); response4.writeTo(baos4); String resp4=baos4.toString(); baos4.close(); if (!resp4.contains("<accepted>true</accepted>")) { fail("Order was not accepted following unsuspension: "+resp4); } // Wait for events to propagate Thread.sleep(4000); } catch (Exception e) { fail("Failed to invoke service: "+e); } } }