/* * 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.actmgmt.jbossas.actsvrrest; import java.net.HttpURLConnection; import java.net.URL; import java.util.Properties; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.EmptyAsset; 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 org.overlord.rtgov.activity.model.ActivityType; import org.overlord.rtgov.activity.model.ActivityUnit; import org.overlord.rtgov.activity.model.soa.RequestSent; import org.overlord.rtgov.activity.server.ActivityStoreFactory; import org.overlord.rtgov.activity.server.QuerySpec; import org.overlord.rtgov.activity.store.mem.MemActivityStore; import org.overlord.rtgov.activity.util.ActivityUtil; import org.overlord.rtgov.common.util.RTGovProperties; import org.overlord.rtgov.common.util.RTGovPropertiesProvider; import static org.junit.Assert.*; @RunWith(Arquillian.class) public class ActivityServerRESTTest { private static final String MVEL_FORMAT = "mvel"; private static final ObjectMapper MAPPER=new ObjectMapper(); static { MAPPER.enable(SerializationFeature.INDENT_OUTPUT); } @Deployment public static WebArchive createDeployment() { String rtgovversion=System.getProperty("rtgov.version"); String jacksonversion=System.getProperty("jackson.version"); String mvelversion=System.getProperty("mvel.version"); String configversion=System.getProperty("commons-configuration.version"); String commonsversion=System.getProperty("overlord-commons.version"); return ShrinkWrap.create(WebArchive.class, "overlord-rtgov.war") .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") .setWebXML("web.xml") .addAsLibraries( Maven.resolver().resolve("org.overlord.rtgov.activity-management:activity:"+rtgovversion).withoutTransitivity().asSingleFile(), Maven.resolver().resolve("org.overlord.rtgov.activity-management:activity-server-jee:"+rtgovversion).withoutTransitivity().asSingleFile(), Maven.resolver().resolve("org.overlord.rtgov.activity-management:collector-activity-server:"+rtgovversion).withoutTransitivity().asSingleFile(), Maven.resolver().resolve("org.overlord.rtgov.common:rtgov-common:"+rtgovversion).withoutTransitivity().asSingleFile(), Maven.resolver().resolve("org.overlord.rtgov.integration:rtgov-jbossas:"+rtgovversion).withoutTransitivity().asSingleFile(), Maven.resolver().resolve("org.overlord.rtgov.activity-management:activity-store-mem:"+rtgovversion).withoutTransitivity().asSingleFile(), Maven.resolver().resolve("org.overlord.rtgov.activity-management:activity-server-rests:"+rtgovversion).withoutTransitivity().asSingleFile(), Maven.resolver().resolve("commons-configuration:commons-configuration:"+configversion).withoutTransitivity().asSingleFile(), Maven.resolver().resolve("com.fasterxml.jackson.core:jackson-core:"+jacksonversion).withoutTransitivity().asSingleFile(), Maven.resolver().resolve("com.fasterxml.jackson.core:jackson-databind:"+jacksonversion).withoutTransitivity().asSingleFile(), Maven.resolver().resolve("com.fasterxml.jackson.core:jackson-annotations:"+jacksonversion).withoutTransitivity().asSingleFile(), Maven.resolver().resolve("org.mvel:mvel2:"+mvelversion).withoutTransitivity().asSingleFile()) .addAsLibraries(Maven.resolver().resolve("org.overlord:overlord-commons-config:"+commonsversion).withTransitivity().asFile()) .addAsLibraries(Maven.resolver().resolve("org.overlord:overlord-commons-services:"+commonsversion).withTransitivity().asFile()); } @org.junit.Before public void init() { final java.util.Properties props=new java.util.Properties(); props.put(ActivityStoreFactory.ACTIVITY_STORE_CLASS, MemActivityStore.class.getName()); RTGovPropertiesProvider provider=new RTGovPropertiesProvider() { public String getProperty(String name) { return props.getProperty(name); } public Properties getProperties() { return props; } }; RTGovProperties.setPropertiesProvider(provider); } @Test public void queryAll() { org.overlord.rtgov.activity.server.ActivityStore activityStore= ActivityStoreFactory.getActivityStore(); if (activityStore == null) { fail("Activity Store has not been initialized"); } else if (activityStore instanceof MemActivityStore) { ((MemActivityStore)activityStore).clear(); } else { fail("Activity Store unexpected type"); } try { // Check if any activity types already exist java.util.List<ActivityType> result=activityStore.query( new QuerySpec().setFormat(MVEL_FORMAT).setExpression("true")); if (result == null) { fail("Initial query result is null"); } if (result.size() != 0) { fail("Initial query result should be empty"); } // Add two entries ActivityUnit au1=new ActivityUnit(); au1.setId("au1"); RequestSent rs1=new RequestSent(); rs1.setOperation("op1"); au1.getActivityTypes().add(rs1); ActivityUnit au2=new ActivityUnit(); au2.setId("au2"); RequestSent rs2=new RequestSent(); rs2.setOperation("op2"); au2.getActivityTypes().add(rs2); java.util.List<ActivityUnit> aulist=new java.util.ArrayList<ActivityUnit>(); aulist.add(au1); aulist.add(au2); activityStore.store(aulist); // Query via REST interface QuerySpec query=new QuerySpec().setFormat(MVEL_FORMAT).setExpression("true"); URL queryUrl = new URL("http://localhost:8080/overlord-rtgov/activity/query"); HttpURLConnection connection = (HttpURLConnection) queryUrl.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setAllowUserInteraction(false); connection.setRequestProperty("Content-Type", "application/json"); java.io.OutputStream os=connection.getOutputStream(); byte[] b=ActivityUtil.serializeQuerySpec(query); os.write(b); os.flush(); os.close(); java.io.InputStream is=connection.getInputStream(); b = new byte[is.available()]; is.read(b); System.out.println(">>>> JSON="+new String(b)); result = ActivityUtil.deserializeActivityTypeList(b); is.close(); System.out.println("RETRIEVED RESULTS="+result); if (result == null) { fail("Follow-up query result is null"); } if (result.size() != 2) { fail("Follow-up query result should have 2 items: "+result.size()); } } catch(Exception e) { e.printStackTrace(); fail("Failed to access activity server: "+e); } } @Test public void getActivityUnitId() { org.overlord.rtgov.activity.server.ActivityStore activityStore= ActivityStoreFactory.getActivityStore(); if (activityStore == null) { fail("Activity Store has not been initialized"); } else if (activityStore instanceof MemActivityStore) { ((MemActivityStore)activityStore).clear(); } else { fail("Activity Store unexpected type"); } try { java.util.List<ActivityType> atypes=activityStore.query( new QuerySpec().setFormat(MVEL_FORMAT).setExpression("true")); if (atypes == null) { fail("Initial query result is null"); } if (atypes.size() != 0) { fail("Initial query result should be empty"); } // Add two entries ActivityUnit au1=new ActivityUnit(); au1.setId("au1"); RequestSent rs1=new RequestSent(); rs1.setOperation("op1"); au1.getActivityTypes().add(rs1); ActivityUnit au2=new ActivityUnit(); au2.setId("au2"); RequestSent rs2=new RequestSent(); rs2.setOperation("op2"); au2.getActivityTypes().add(rs2); java.util.List<ActivityUnit> aulist=new java.util.ArrayList<ActivityUnit>(); aulist.add(au1); aulist.add(au2); activityStore.store(aulist); // Query via REST interface URL getUrl = new URL("http://localhost:8080/overlord-rtgov/activity/unit?id="+au2.getId()); HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection(); connection.setRequestMethod("GET"); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setAllowUserInteraction(false); connection.setRequestProperty("Content-Type", "application/json"); java.io.InputStream is=connection.getInputStream(); byte[] b=new byte[is.available()]; is.read(b); is.close(); ActivityUnit auresult=ActivityUtil.deserializeActivityUnit(b); System.out.println("RETRIEVED RESULTS="+auresult); if (auresult == null) { fail("Follow-up query result is null"); } if (!auresult.getId().equals("au2")) { fail("Incorrect activity unit"); } } catch(Exception e) { fail("Failed to access activity server: "+e); } } @Test public void queryActivityTypes() { org.overlord.rtgov.activity.server.ActivityStore activityStore= ActivityStoreFactory.getActivityStore(); if (activityStore == null) { fail("Activity Store has not been initialized"); } else if (activityStore instanceof MemActivityStore) { ((MemActivityStore)activityStore).clear(); } else { fail("Activity Store unexpected type"); } try { java.util.List<ActivityType> result=activityStore.query( new QuerySpec().setFormat(MVEL_FORMAT).setExpression("true")); if (result == null) { fail("Initial query result is null"); } if (result.size() != 0) { fail("Initial query result should be empty"); } // Add two entries ActivityUnit au1=new ActivityUnit(); au1.setId("au1"); RequestSent rs1=new RequestSent(); rs1.setOperation("op1"); au1.getActivityTypes().add(rs1); ActivityUnit au2=new ActivityUnit(); au2.setId("au2"); RequestSent rs2=new RequestSent(); rs2.setOperation("op2"); au2.getActivityTypes().add(rs2); java.util.List<ActivityUnit> aulist=new java.util.ArrayList<ActivityUnit>(); aulist.add(au1); aulist.add(au2); activityStore.store(aulist); // Query via REST interface URL getUrl = new URL("http://localhost:8080/overlord-rtgov/activity/query"); HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setAllowUserInteraction(false); connection.setRequestProperty("Content-Type", "application/json"); java.io.OutputStream os=connection.getOutputStream(); QuerySpec qs=new QuerySpec().setFormat(MVEL_FORMAT).setExpression("true"); byte[] b=ActivityUtil.serializeQuerySpec(qs); os.write(b); os.flush(); os.close(); java.io.InputStream is=connection.getInputStream(); b = new byte[is.available()]; is.read(b); is.close(); result = ActivityUtil.deserializeActivityTypeList(b); System.out.println("RETRIEVED RESULTS="+result); if (result == null) { fail("Follow-up query result is null"); } if (result.size() != 2) { fail("Follow-up query result should have 2 items: "+result.size()); } if (!((RequestSent)result.get(0)).getOperation().equals("op1")) { fail("Incorrect activity unit 1"); } if (!((RequestSent)result.get(1)).getOperation().equals("op2")) { fail("Incorrect activity unit 2"); } } catch(Exception e) { e.printStackTrace(); fail("Failed to access activity server: "+e); } } @Test public void storeAndQuery() { org.overlord.rtgov.activity.server.ActivityStore activityStore= ActivityStoreFactory.getActivityStore(); if (activityStore == null) { fail("Activity Store has not been initialized"); } else if (activityStore instanceof MemActivityStore) { ((MemActivityStore)activityStore).clear(); } else { fail("Activity Store unexpected type"); } try { java.util.List<ActivityType> result=activityStore.query( new QuerySpec().setFormat(MVEL_FORMAT).setExpression("true")); if (result == null) { fail("Initial query result is null"); } if (result.size() != 0) { fail("Initial query result should be 0: "+result.size()); } URL getUrl = new URL("http://localhost:8080/overlord-rtgov/activity/store"); HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setAllowUserInteraction(false); connection.setRequestProperty("Content-Type", "application/json"); java.io.OutputStream os=connection.getOutputStream(); ActivityUnit au1=new ActivityUnit(); au1.setId("au1"); RequestSent rs1=new RequestSent(); rs1.setOperation("op1"); au1.getActivityTypes().add(rs1); ActivityUnit au2=new ActivityUnit(); au2.setId("au2"); RequestSent rs2=new RequestSent(); rs2.setOperation("op2"); au2.getActivityTypes().add(rs2); java.util.List<ActivityUnit> aulist=new java.util.ArrayList<ActivityUnit>(); aulist.add(au1); aulist.add(au2); byte[] aus=ActivityUtil.serializeActivityUnitList(aulist); os.write(aus); os.flush(); os.close(); java.io.InputStream is=connection.getInputStream(); byte[] b=new byte[is.available()]; is.read(b); is.close(); System.out.println("RESULT="+new String(b)); // Re-issue query result = activityStore.query( new QuerySpec().setFormat(MVEL_FORMAT).setExpression("true")); if (result == null) { fail("Follow-up query result is null"); } if (result.size() != 2) { fail("Follow-up query result should have 2 items: "+result.size()); } } catch(Exception e) { fail("Failed to access activity server: "+e); } } }