/* * 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.customevents; import java.net.HttpURLConnection; import java.net.URL; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPConnection; import javax.xml.soap.SOAPConnectionFactory; import javax.xml.soap.SOAPMessage; import com.fasterxml.jackson.databind.ObjectMapper; 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 JBossASCustomEventsResultsTest { private static final String ORDER_SERVICE_URL = "http://127.0.0.1:8080/demo-orders/OrderService"; private static final ObjectMapper MAPPER=new ObjectMapper(); @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="epn", order=3) public static WebArchive createDeployment3() { String version=System.getProperty("rtgov.version"); java.io.File archiveFile=Maven.resolver().resolve("org.overlord.rtgov.tests:tests-custom-events-epn:war:"+version) .withoutTransitivity().asSingleFile(); return ShrinkWrap.createFromZipFile(WebArchive.class, archiveFile); } @Deployment(name="acs", order=4) public static WebArchive createDeployment4() { String version=System.getProperty("rtgov.version"); java.io.File archiveFile=Maven.resolver().resolve("org.overlord.rtgov.tests:tests-custom-events-acs:war:"+version) .withoutTransitivity().asSingleFile(); return ShrinkWrap.createFromZipFile(WebArchive.class, copyToTmpFile(archiveFile,"tests-custom-events-acs.war")); } @Deployment(name="av", order=5) public static WebArchive createDeployment5() { String version=System.getProperty("rtgov.version"); java.io.File archiveFile=Maven.resolver().resolve("org.overlord.rtgov.tests:tests-custom-events-av:war:"+version) .withoutTransitivity().asSingleFile(); return ShrinkWrap.createFromZipFile(WebArchive.class, archiveFile); } @Deployment(name="monitor", order=6) public static WebArchive createDeployment6() { String version=System.getProperty("rtgov.version"); java.io.File archiveFile=Maven.resolver().resolve("org.overlord.rtgov.tests:tests-custom-events-monitor:war:"+version) .withoutTransitivity().asSingleFile(); return ShrinkWrap.createFromZipFile(WebArchive.class, copyToTmpFile(archiveFile,"custom-events-monitor.war")); } private static java.io.File copyToTmpFile(java.io.File source, String filename) { String tmpdir=System.getProperty("java.io.tmpdir"); java.io.File dir=new java.io.File(tmpdir+java.io.File.separator+"rtgovtests"+System.currentTimeMillis()); dir.mkdir(); dir.deleteOnExit(); java.io.File ret=new java.io.File(dir, filename); ret.deleteOnExit(); // Copy contents to the tmp file try { java.io.FileInputStream fis=new java.io.FileInputStream(source); java.io.FileOutputStream fos=new java.io.FileOutputStream(ret); byte[] b=new byte[10240]; int len=0; while ((len=fis.read(b)) > 0) { fos.write(b, 0, len); } fis.close(); fos.flush(); fos.close(); } catch (Exception e) { e.printStackTrace(); fail("Failed to copy file '"+filename+"': "+e); } return(ret); } /** * This method deserializes the events into a list of hashmaps. The * actual objects are not deserialized, as this would require the * domain objects to be included in all deployments, which would * make verifying classloading/isolation difficult. * * @return The list of objects representing events * @throws Exception Failed to deserialize the events */ protected java.util.List<?> getEvents() throws Exception { java.util.List<?> ret=null; URL getUrl = new URL("http://localhost:8080/custom-events-monitor/monitor/events"); HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection(); connection.setRequestMethod("GET"); System.out.println("Content-Type: " + connection.getContentType()); java.io.InputStream is=connection.getInputStream(); ret = MAPPER.readValue(is, java.util.List.class); return (ret); } /** * This method deserializes the events into a list of hashmaps. The * actual objects are not deserialized, as this would require the * domain objects to be included in all deployments, which would * make verifying classloading/isolation difficult. * * @return The list of objects representing events * @throws Exception Failed to deserialize the events */ protected java.util.List<?> getACSEvents() throws Exception { java.util.List<?> ret=null; URL getUrl = new URL("http://localhost:8080/custom-events-monitor/monitor/acsresults"); HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection(); connection.setRequestMethod("GET"); System.out.println("Content-Type: " + connection.getContentType()); java.io.InputStream is=connection.getInputStream(); ret = MAPPER.readValue(is, java.util.List.class); System.out.println("ACS EVENTS="+ret); return (ret); } @Test @OperateOnDeployment(value="orders-app") public void testActivityEventsResults() { try { // Reset event list getEvents(); java.util.List<?> acsresults=getACSEvents(); int acsSize=acsresults.size(); SOAPConnectionFactory factory=SOAPConnectionFactory.newInstance(); SOAPConnection con=factory.createConnection(); java.net.URL url=new java.net.URL(ORDER_SERVICE_URL); String mesg="<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-13739-ABC</orderId>"+ " <itemId>JAM</itemId>"+ " <quantity>50</quantity>"+ " <customer>Fred</customer>"+ " </order>"+ " </orders:submitOrder>"+ " </soap:Body>"+ "</soap:Envelope>"; java.io.InputStream is=new java.io.ByteArrayInputStream(mesg.getBytes()); SOAPMessage request=MessageFactory.newInstance().createMessage(null, is); is.close(); SOAPMessage response=con.call(request, url); java.io.ByteArrayOutputStream baos=new java.io.ByteArrayOutputStream(); response.writeTo(baos); String resp=baos.toString(); baos.close(); if (!resp.contains("<accepted>true</accepted>")) { fail("Order was not accepted: "+resp); } // Wait for events to propagate Thread.sleep(5000); java.util.List<?> events=getEvents(); if (events == null) { fail("No events returned"); } // Should be 10 processed events and 1 result if (events.size() != 11) { fail("11 events expected, but got: "+events.size()); } acsresults = getACSEvents(); if (acsresults == null) { fail("No acsresults returned"); } if (acsresults.size() != acsSize+1) { fail("Size of acs results should be 1 more: was " +acsSize+" now "+acsresults.size()); } } catch (Exception e) { fail("Failed to invoke service via SOAP: "+e); } } @Test @OperateOnDeployment(value="orders-app") public void testActivityEventsProcessed() { try { // Pre-request events, to initialize the rest service and // reset the event list getEvents(); java.util.List<?> acsresults=getACSEvents(); int acsSize=acsresults.size(); SOAPConnectionFactory factory=SOAPConnectionFactory.newInstance(); SOAPConnection con=factory.createConnection(); java.net.URL url=new java.net.URL(ORDER_SERVICE_URL); String mesg="<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 is=new java.io.ByteArrayInputStream(mesg.getBytes()); SOAPMessage request=MessageFactory.newInstance().createMessage(null, is); is.close(); SOAPMessage response=con.call(request, url); java.io.ByteArrayOutputStream baos=new java.io.ByteArrayOutputStream(); response.writeTo(baos); String resp=baos.toString(); baos.close(); if (!resp.contains("<accepted>true</accepted>")) { fail("Order was not accepted: "+resp); } // Wait for events to propagate Thread.sleep(5000); java.util.List<?> events=getEvents(); if (events == null) { fail("No events returned"); } if (events.size() != 10) { fail("10 events expected, but got: "+events.size()); } acsresults = getACSEvents(); if (acsresults == null) { fail("No acsresults returned"); } if (acsresults.size() != acsSize) { fail("Size if acs results should not have changed: was " +acsSize+" now "+acsresults.size()); } } catch (Exception e) { fail("Failed to invoke service via SOAP: "+e); } } }