/* * 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.internal.activity.server.jee; import static org.junit.Assert.*; import java.util.List; import org.junit.Test; import org.overlord.rtgov.activity.model.ActivityType; import org.overlord.rtgov.activity.model.ActivityUnit; import org.overlord.rtgov.activity.model.Context; import org.overlord.rtgov.activity.model.bpm.ProcessCompleted; import org.overlord.rtgov.activity.model.bpm.ProcessStarted; import org.overlord.rtgov.activity.model.soa.RequestReceived; import org.overlord.rtgov.activity.model.soa.RequestSent; import org.overlord.rtgov.activity.model.soa.ResponseReceived; import org.overlord.rtgov.activity.model.soa.ResponseSent; import org.overlord.rtgov.activity.server.ActivityNotifier; import org.overlord.rtgov.activity.server.ActivityStore; import org.overlord.rtgov.activity.server.QuerySpec; import org.overlord.rtgov.internal.activity.server.jee.JEEActivityServer; public class JEEActivityServerTest { private static final String PROC_TYPE = "ProcType"; private static final String INST_ID = "InstId"; private static final String RESP_ID = "respId"; private static final String REQ_ID = "reqId"; private static final String TEST_ID = "TestID"; @Test public void testStoreAndNotify() { JEEActivityServer as=new JEEActivityServer(); TestStore store=new TestStore(); TestNotifier notifier1=new TestNotifier(); TestNotifier notifier2=new TestNotifier(); as.setActivityStore(store); as.getActivityNotifiers().add(notifier1); as.getActivityNotifiers().add(notifier2); java.util.List<ActivityUnit> list1=new java.util.Vector<ActivityUnit>(); list1.add(new ActivityUnit()); list1.add(new ActivityUnit()); list1.add(new ActivityUnit()); java.util.List<ActivityUnit> list2=new java.util.Vector<ActivityUnit>(); list2.add(new ActivityUnit()); list2.add(new ActivityUnit()); try { as.store(list1); if (store.getActivityEvents().size() != list1.size()) { fail("Store does not have correct number of events"); } if (notifier1.getActivityEvents().size() != list1.size()) { fail("Notifier 1 does not have correct number of events"); } if (notifier2.getActivityEvents().size() != list1.size()) { fail("Notifier 2 does not have correct number of events"); } as.store(list2); if (store.getActivityEvents().size() != (list1.size()+list2.size())) { fail("Store does not have correct number of events"); } if (notifier1.getActivityEvents().size() != (list1.size()+list2.size())) { fail("Notifier 1 does not have correct number of events"); } if (notifier2.getActivityEvents().size() != (list1.size()+list2.size())) { fail("Notifier 2 does not have correct number of events"); } } catch(Exception e) { e.printStackTrace(); fail("Failed to store: "+e); } } @Test public void testStoreFault() { JEEActivityServer as=new JEEActivityServer(); TestStore store=new TestStore(); TestNotifier notifier1=new TestNotifier(); TestNotifier notifier2=new TestNotifier(); as.setActivityStore(store); as.getActivityNotifiers().add(notifier1); as.getActivityNotifiers().add(notifier2); java.util.List<ActivityUnit> list1=new java.util.Vector<ActivityUnit>(); list1.add(new ActivityUnit()); list1.add(new ActivityUnit()); list1.add(new ActivityUnit()); java.util.List<ActivityUnit> list2=new java.util.Vector<ActivityUnit>(); list2.add(new ActivityUnit()); list2.add(new ActivityUnit()); try { as.store(list1); if (store.getActivityEvents().size() != list1.size()) { fail("Store does not have correct number of events"); } if (notifier1.getActivityEvents().size() != list1.size()) { fail("Notifier 1 does not have correct number of events"); } if (notifier2.getActivityEvents().size() != list1.size()) { fail("Notifier 2 does not have correct number of events"); } store.fault(); try { as.store(list2); fail("Should have thrown exception"); } catch(Exception f) { // Ignore } } catch(Exception e) { fail("Failed to store: "+e); } } @Test public void testNotifierFault() { JEEActivityServer as=new JEEActivityServer(); TestStore store=new TestStore(); TestNotifier notifier1=new TestNotifier(); TestNotifier notifier2=new TestNotifier(); as.setActivityStore(store); as.getActivityNotifiers().add(notifier1); as.getActivityNotifiers().add(notifier2); java.util.List<ActivityUnit> list1=new java.util.Vector<ActivityUnit>(); list1.add(new ActivityUnit()); list1.add(new ActivityUnit()); list1.add(new ActivityUnit()); java.util.List<ActivityUnit> list2=new java.util.Vector<ActivityUnit>(); list2.add(new ActivityUnit()); list2.add(new ActivityUnit()); try { as.store(list1); if (store.getActivityEvents().size() != list1.size()) { fail("Store does not have correct number of events"); } if (notifier1.getActivityEvents().size() != list1.size()) { fail("Notifier 1 does not have correct number of events"); } if (notifier2.getActivityEvents().size() != list1.size()) { fail("Notifier 2 does not have correct number of events"); } notifier2.fault(); try { as.store(list2); fail("Should have thrown exception"); } catch(Exception f) { // Ignore } } catch(Exception e) { fail("Failed to store: "+e); } } @Test public void testProcessActivityIdAssignedIfMissing() { JEEActivityServer as=new JEEActivityServer(); ActivityUnit au=new ActivityUnit(); if (au.getId() != null) { fail("ActivityUnit id should be null"); } as.processActivityUnit(au); if (au.getId() == null) { fail("ActivityUnit id should NOT be null"); } } @Test public void testProcessActivityIdPreservedIfExists() { JEEActivityServer as=new JEEActivityServer(); ActivityUnit au=new ActivityUnit(); au.setId(TEST_ID); as.processActivityUnit(au); if (!au.getId().equals(TEST_ID)) { fail("ActivityUnit id has changed: "+au.getId()); } } @Test public void testProcessActivityAssignActivityUnitIdToTypesAndIndex() { JEEActivityServer as=new JEEActivityServer(); ActivityUnit au=new ActivityUnit(); au.setId(TEST_ID); RequestSent rqs=new RequestSent(); rqs.setMessageId(REQ_ID); au.getActivityTypes().add(rqs); RequestReceived rqr=new RequestReceived(); rqr.setMessageId(rqs.getMessageId()); au.getActivityTypes().add(rqr); ResponseSent rps=new ResponseSent(); rps.setMessageId(RESP_ID); rps.setReplyToId(rqs.getMessageId()); au.getActivityTypes().add(rps); ResponseReceived rpr=new ResponseReceived(); rpr.setMessageId(rps.getMessageId()); rpr.setReplyToId(rqs.getMessageId()); au.getActivityTypes().add(rpr); as.processActivityUnit(au); int pos=0; for (ActivityType at : au.getActivityTypes()) { if (!at.getUnitId().equals(au.getId())) { fail("Activity type's unit id invalid: "+at.getUnitId()); } if (at.getUnitIndex() != pos) { fail("Activity type's unit index ("+pos+") incorrect: "+at.getUnitIndex()); } pos++; } } @Test public void testProcessActivityExtractIdWithDuplicates() { JEEActivityServer as=new JEEActivityServer(); ActivityUnit au=new ActivityUnit(); au.setId(TEST_ID); RequestSent rqs=new RequestSent(); rqs.setMessageId(REQ_ID); au.getActivityTypes().add(rqs); RequestReceived rqr=new RequestReceived(); rqr.setMessageId(rqs.getMessageId()); au.getActivityTypes().add(rqr); ProcessStarted ps=new ProcessStarted(); ps.setInstanceId(INST_ID); ps.setProcessType(PROC_TYPE); au.getActivityTypes().add(ps); ProcessCompleted pc=new ProcessCompleted(); pc.setInstanceId(INST_ID); pc.setProcessType(PROC_TYPE); au.getActivityTypes().add(pc); ResponseSent rps=new ResponseSent(); rps.setMessageId(RESP_ID); rps.setReplyToId(rqs.getMessageId()); au.getActivityTypes().add(rps); ResponseReceived rpr=new ResponseReceived(); rpr.setMessageId(rps.getMessageId()); rpr.setReplyToId(rqs.getMessageId()); au.getActivityTypes().add(rpr); as.processActivityUnit(au); java.util.Set<Context> ctxs=au.contexts(); if (ctxs.size() != 3) { fail("Unexpected number of context entries (3): "+ctxs.size()); } if (!ctxs.contains(new Context(Context.Type.Message,REQ_ID))) { fail("Expecting context Message="+REQ_ID); } if (!ctxs.contains(new Context(Context.Type.Message,RESP_ID))) { fail("Expecting context Message="+RESP_ID); } if (!ctxs.contains(new Context(Context.Type.Endpoint,PROC_TYPE+":"+INST_ID))) { fail("Expecting context Endpoint="+PROC_TYPE+":"+INST_ID); } } public class TestStore implements ActivityStore { private List<ActivityUnit> _store=new java.util.Vector<ActivityUnit>(); private boolean _fault=false; public void fault() { _fault = true; } public void store(List<ActivityUnit> activities) throws Exception { if (_fault) { throw new Exception("Fault in notifier"); } _store.addAll(activities); } public ActivityUnit getActivityUnit(String id) throws Exception { // TODO Auto-generated method stub return null; } public List<ActivityType> getActivityTypes(Context context) throws Exception { // TODO Auto-generated method stub return null; } public List<ActivityType> getActivityTypes(Context context, long from, long to) throws Exception { // TODO Auto-generated method stub return null; } public List<ActivityType> query(QuerySpec query) throws Exception { // TODO Auto-generated method stub return null; } public List<ActivityUnit> getActivityEvents() { return (_store); } } public class TestNotifier implements ActivityNotifier { private List<ActivityUnit> _store=new java.util.Vector<ActivityUnit>(); private boolean _fault=false; public List<ActivityUnit> getActivityEvents() { return (_store); } public void fault() { _fault = true; } public void notify(List<ActivityUnit> activities) throws Exception { if (_fault) { throw new Exception("Fault in notifier"); } _store.addAll(activities); } } }