/* * 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.analytics.util; import static org.junit.Assert.*; import org.junit.Test; import org.overlord.rtgov.activity.model.ActivityUnit; import org.overlord.rtgov.activity.model.Context; 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.analytics.service.InterfaceDefinition; import org.overlord.rtgov.analytics.service.InvocationDefinition; import org.overlord.rtgov.analytics.service.InvocationMetric; import org.overlord.rtgov.analytics.service.OperationDefinition; import org.overlord.rtgov.analytics.service.RequestFaultDefinition; import org.overlord.rtgov.analytics.service.RequestResponseDefinition; import org.overlord.rtgov.analytics.service.ServiceDefinition; import org.overlord.rtgov.analytics.util.ServiceDefinitionUtil; public class ServiceDefinitionUtilTest { private static final String FAULT_1 = "fault1"; private static final String OPERATION_1 = "op1"; private static final String OPERATION_2 = "op2"; private static final String INTERFACE_1="intf1"; private static final String INTERFACE_2="intf2"; private static final String SERVICE_TYPE_1="st1"; private static final String SERVICE_TYPE_2="st2"; @Test public void testSerializeServiceDefiniton() { ServiceDefinition st1=new ServiceDefinition(); st1.setServiceType(SERVICE_TYPE_1); InterfaceDefinition intf1=new InterfaceDefinition(); intf1.setInterface(INTERFACE_1); st1.getInterfaces().add(intf1); OperationDefinition op1=new OperationDefinition(); intf1.getOperations().add(op1); op1.setName(OPERATION_1); RequestResponseDefinition nrd1=new RequestResponseDefinition(); nrd1.getMetrics().setCount(10); nrd1.getMetrics().setAverage(1000); nrd1.getMetrics().setMin(500); nrd1.getMetrics().setMax(1500); nrd1.getMetrics().setCountChange(+5); nrd1.getMetrics().setAverageChange(+2); nrd1.getMetrics().setMinChange(-5); nrd1.getMetrics().setMaxChange(+20); op1.setRequestResponse(nrd1); InvocationDefinition id1=new InvocationDefinition(); id1.setInterface(INTERFACE_2); id1.setOperation(OPERATION_2); id1.getMetrics().setCount(10); id1.getMetrics().setAverage(500); id1.getMetrics().setMin(250); id1.getMetrics().setMax(750); nrd1.getInvocations().add(id1); RequestFaultDefinition frd1=new RequestFaultDefinition(); frd1.setFault("fault1"); frd1.getMetrics().setCount(20); frd1.getMetrics().setFaults(20); frd1.getMetrics().setAverage(2000); frd1.getMetrics().setMin(1500); frd1.getMetrics().setMax(2500); frd1.getMetrics().setCountChange(-10); frd1.getMetrics().setAverageChange(+6); frd1.getMetrics().setMinChange(0); frd1.getMetrics().setMaxChange(+10); op1.getRequestFaults().add(frd1); try { byte[] b = ServiceDefinitionUtil.serializeServiceDefinition(st1); System.out.println("SERVICE DEFINITION: "+new String(b)); } catch (Exception e) { e.printStackTrace(); fail("Failed to serialize"); } } @Test public void testDeserializeServiceDefiniton() { ServiceDefinition st1=new ServiceDefinition(); st1.setServiceType(SERVICE_TYPE_1); InterfaceDefinition intf1=new InterfaceDefinition(); intf1.setInterface(INTERFACE_1); st1.getInterfaces().add(intf1); OperationDefinition op1=new OperationDefinition(); intf1.getOperations().add(op1); op1.setName(OPERATION_1); RequestResponseDefinition nrd1=new RequestResponseDefinition(); nrd1.getMetrics().setCount(10); nrd1.getMetrics().setFaults(0); nrd1.getMetrics().setAverage(1000); nrd1.getMetrics().setMin(500); nrd1.getMetrics().setMax(1500); nrd1.getMetrics().setCountChange(+5); nrd1.getMetrics().setAverageChange(+2); nrd1.getMetrics().setMinChange(-5); nrd1.getMetrics().setMaxChange(+20); op1.setRequestResponse(nrd1); RequestFaultDefinition frd1=new RequestFaultDefinition(); frd1.setFault("fault1"); frd1.getMetrics().setCount(20); frd1.getMetrics().setFaults(20); frd1.getMetrics().setAverage(2000); frd1.getMetrics().setMin(1500); frd1.getMetrics().setMax(2500); frd1.getMetrics().setCountChange(-10); frd1.getMetrics().setAverageChange(+6); frd1.getMetrics().setMinChange(0); frd1.getMetrics().setMaxChange(+10); op1.getRequestFaults().add(frd1); byte[] b=null; try { b = ServiceDefinitionUtil.serializeServiceDefinition(st1); } catch (Exception e) { e.printStackTrace(); fail("Failed to serialize"); } ServiceDefinition result=null; try { result = ServiceDefinitionUtil.deserializeServiceDefinition(b); } catch (Exception e) { e.printStackTrace(); fail("Failed to serialize"); } if (result == null) { fail("Failed to deserialize service definition"); } if (!result.getServiceType().equals(st1.getServiceType())) { fail("Service type mismatch"); } if (result.getInterfaces().size() != 1) { fail("Expecting 1 interface: "+result.getInterfaces().size()); } InterfaceDefinition idresult=result.getInterfaces().get(0); if (!idresult.getInterface().equals(intf1.getInterface())) { fail("Operation mismatch"); } if (idresult.getOperations().size() != 1) { fail("Expecting 1 operation: "+idresult.getOperations().size()); } OperationDefinition opresult=idresult.getOperations().get(0); if (!opresult.getName().equals(op1.getName())) { fail("Operation mismatch"); } } @Test public void testSingleServiceInvokedNormal() { // Create example activity events ActivityUnit au=new ActivityUnit(); RequestReceived rqr1=new RequestReceived(); rqr1.setServiceType(SERVICE_TYPE_1); rqr1.setInterface(INTERFACE_1); rqr1.setOperation(OPERATION_1); rqr1.setMessageId("1"); rqr1.setTimestamp(10); au.getActivityTypes().add(rqr1); ResponseSent rps1=new ResponseSent(); rps1.setServiceType(SERVICE_TYPE_1); rps1.setInterface(INTERFACE_1); rps1.setOperation(OPERATION_1); rps1.setMessageId("2"); rps1.setReplyToId("1"); rps1.setTimestamp(20); au.getActivityTypes().add(rps1); // Create service definition java.util.Collection<ServiceDefinition> sdefs= ServiceDefinitionUtil.derive(au); if (sdefs.size() != 1) { fail("One definition expected: "+sdefs.size()); } ServiceDefinition sdef=sdefs.iterator().next(); if (!sdef.getServiceType().equals(SERVICE_TYPE_1)) { fail("Service type incorrect"); } if (sdef.getInterfaces().size() != 1) { fail("Expecting 1 interface: "+sdef.getInterfaces().size()); } InterfaceDefinition idef=sdef.getInterfaces().get(0); if (idef.getOperations().size() != 1) { fail("Only 1 operation expected: "+idef.getOperations().size()); } OperationDefinition op=idef.getOperation(OPERATION_1); if (op == null) { fail("Failed to retrieve op"); } if (op.getRequestResponse() == null) { fail("Request/response not found"); } if (op.getRequestFaults().size() > 0) { fail("No faults should have occurred"); } if (op.getRequestResponse().getInvocations().size() > 0) { fail("No external invocations expected"); } InvocationMetric metrics=op.getRequestResponse().getMetrics(); if (metrics.getAverage() != 10) { fail("Average not 10: "+metrics.getAverage()); } if (metrics.getMin() != 10) { fail("Min not 10: "+metrics.getMin()); } if (metrics.getMax() != 10) { fail("Max not 10: "+metrics.getMax()); } if (metrics.getCount() != 1) { fail("Count not 1: "+metrics.getCount()); } } @Test public void testSingleServiceInvokedNormalWithContext() { // Create example activity events ActivityUnit au=new ActivityUnit(); RequestReceived rqr1=new RequestReceived(); rqr1.setUnitId("unit1"); rqr1.setUnitIndex(1); rqr1.setServiceType(SERVICE_TYPE_1); rqr1.setInterface(INTERFACE_1); rqr1.setOperation(OPERATION_1); rqr1.setMessageId("1"); rqr1.setTimestamp(10); Context c1=new Context(Context.Type.Conversation, "c1"); rqr1.getContext().add(c1); au.getActivityTypes().add(rqr1); ResponseSent rps1=new ResponseSent(); rps1.setUnitId("unit1"); rps1.setUnitIndex(2); rps1.setServiceType(SERVICE_TYPE_1); rps1.setInterface(INTERFACE_1); rps1.setOperation(OPERATION_1); rps1.setMessageId("2"); rps1.setReplyToId("1"); rps1.setTimestamp(20); rps1.getContext().add(c1); Context c2=new Context(Context.Type.Conversation, "c2"); rps1.getContext().add(c2); au.getActivityTypes().add(rps1); // Create service definition java.util.Collection<ServiceDefinition> sdefs= ServiceDefinitionUtil.derive(au); if (sdefs.size() != 1) { fail("One definition expected: "+sdefs.size()); } ServiceDefinition sdef=sdefs.iterator().next(); // Check contexts - cardinality is same as combined activities, minus the 1 common context if (sdef.getContext().size() != (rqr1.getContext().size()+rps1.getContext().size()-1)) { fail("Unexpected number of contexts: "+sdef.getContext().size()); } if (!sdef.getContext().contains(c1)) { fail("Context does not contain c1"); } if (!sdef.getContext().contains(c2)) { fail("Context does not contain c2"); } InterfaceDefinition idef=sdef.getInterface(INTERFACE_1); if (idef == null) { fail("Failed to get interface defn"); } OperationDefinition op=idef.getOperation(OPERATION_1); RequestResponseDefinition rrd=op.getRequestResponse(); if (rrd.getRequestId() == null) { fail("Request id not set"); } if (rrd.getResponseId() == null) { fail("Response id not set"); } } @Test public void testDoubleServiceInvokedNormal() { // Create example activity events ActivityUnit au=new ActivityUnit(); RequestReceived rqr1=new RequestReceived(); rqr1.setServiceType(SERVICE_TYPE_1); rqr1.setOperation(OPERATION_1); rqr1.setInterface(INTERFACE_1); rqr1.setMessageId("1"); rqr1.setTimestamp(10); au.getActivityTypes().add(rqr1); ResponseSent rps1=new ResponseSent(); rps1.setServiceType(SERVICE_TYPE_1); rps1.setOperation(OPERATION_1); rps1.setInterface(INTERFACE_1); rps1.setMessageId("2"); rps1.setReplyToId("1"); rps1.setTimestamp(20); au.getActivityTypes().add(rps1); RequestReceived rqr2=new RequestReceived(); rqr2.setServiceType(SERVICE_TYPE_1); rqr2.setOperation(OPERATION_1); rqr2.setInterface(INTERFACE_1); rqr2.setMessageId("3"); rqr2.setTimestamp(30); au.getActivityTypes().add(rqr2); ResponseSent rps2=new ResponseSent(); rps2.setServiceType(SERVICE_TYPE_1); rps2.setOperation(OPERATION_1); rps2.setInterface(INTERFACE_1); rps2.setMessageId("4"); rps2.setReplyToId("3"); rps2.setTimestamp(50); au.getActivityTypes().add(rps2); // Create service definition java.util.Collection<ServiceDefinition> sdefs= ServiceDefinitionUtil.derive(au); if (sdefs.size() != 1) { fail("One definition expected: "+sdefs.size()); } ServiceDefinition sdef=sdefs.iterator().next(); if (!sdef.getServiceType().equals(SERVICE_TYPE_1)) { fail("Service type incorrect"); } InterfaceDefinition idef=sdef.getInterface(INTERFACE_1); if (idef == null) { fail("Interface defn not found"); } if (idef.getOperations().size() != 1) { fail("Only 1 operation expected: "+idef.getOperations().size()); } OperationDefinition op=idef.getOperation(OPERATION_1); if (op == null) { fail("Failed to retrieve op"); } if (op.getRequestResponse() == null) { fail("Request/response not found"); } if (op.getRequestFaults().size() > 0) { fail("No faults should have occurred"); } if (op.getRequestResponse().getInvocations().size() > 0) { fail("No external invocations expected"); } InvocationMetric metrics=op.getRequestResponse().getMetrics(); if (metrics.getAverage() != 15) { fail("Average not 15: "+metrics.getAverage()); } if (metrics.getMin() != 10) { fail("Min not 10: "+metrics.getMin()); } if (metrics.getMax() != 20) { fail("Max not 20: "+metrics.getMax()); } if (metrics.getCount() != 2) { fail("Count not 2: "+metrics.getCount()); } } @Test public void testSingleServiceInvokedFault() { // Create example activity events ActivityUnit au=new ActivityUnit(); RequestReceived rqr1=new RequestReceived(); rqr1.setServiceType(SERVICE_TYPE_1); rqr1.setOperation(OPERATION_1); rqr1.setInterface(INTERFACE_1); rqr1.setMessageId("1"); rqr1.setTimestamp(10); au.getActivityTypes().add(rqr1); ResponseSent rps1=new ResponseSent(); rps1.setServiceType(SERVICE_TYPE_1); rps1.setOperation(OPERATION_1); rps1.setInterface(INTERFACE_1); rps1.setFault(FAULT_1); rps1.setMessageId("2"); rps1.setReplyToId("1"); rps1.setTimestamp(20); au.getActivityTypes().add(rps1); // Create service definition java.util.Collection<ServiceDefinition> sdefs= ServiceDefinitionUtil.derive(au); if (sdefs.size() != 1) { fail("One definition expected: "+sdefs.size()); } ServiceDefinition sdef=sdefs.iterator().next(); if (!sdef.getServiceType().equals(SERVICE_TYPE_1)) { fail("Service type incorrect"); } InterfaceDefinition idef=sdef.getInterface(INTERFACE_1); if (idef == null) { fail("Failed to get interface defn"); } if (idef.getOperations().size() != 1) { fail("Only 1 operation expected: "+idef.getOperations().size()); } OperationDefinition op=idef.getOperation(OPERATION_1); if (op == null) { fail("Failed to retrieve op"); } if (op.getRequestResponse() != null) { fail("Request/response should be null"); } if (op.getRequestFaults().size() != 1) { fail("One fault should have occurred"); } RequestFaultDefinition rfd=op.getRequestFault(FAULT_1); if (rfd == null) { fail("Failed to retrieve fault"); } if (rfd.getInvocations().size() > 0) { fail("No external invocations expected"); } InvocationMetric metrics=rfd.getMetrics(); if (metrics.getAverage() != 10) { fail("Average not 10: "+metrics.getAverage()); } if (metrics.getMin() != 10) { fail("Min not 10: "+metrics.getMin()); } if (metrics.getMax() != 10) { fail("Max not 10: "+metrics.getMax()); } if (metrics.getCount() != 1) { fail("Count not 1: "+metrics.getCount()); } if (metrics.getFaults() != 1) { fail("Faults not 1: "+metrics.getFaults()); } } @Test public void testServiceInvokedWithExternalInvocations() { // Create example activity events ActivityUnit au=new ActivityUnit(); RequestReceived rqr1=new RequestReceived(); rqr1.setServiceType(SERVICE_TYPE_1); rqr1.setInterface(INTERFACE_1); rqr1.setOperation(OPERATION_1); rqr1.setMessageId("1"); rqr1.setTimestamp(10); au.getActivityTypes().add(rqr1); RequestSent rqs2=new RequestSent(); rqs2.setServiceType(SERVICE_TYPE_2); rqs2.setInterface(INTERFACE_2); rqs2.setOperation(OPERATION_2); rqs2.setMessageId("2"); rqs2.setTimestamp(15); au.getActivityTypes().add(rqs2); ResponseReceived rpr2=new ResponseReceived(); rpr2.setServiceType(SERVICE_TYPE_2); rpr2.setInterface(INTERFACE_2); rpr2.setOperation(OPERATION_2); rpr2.setMessageId("3"); rpr2.setReplyToId("2"); rpr2.setTimestamp(21); au.getActivityTypes().add(rpr2); RequestSent rqs3=new RequestSent(); rqs3.setServiceType(SERVICE_TYPE_2); rqs3.setInterface(INTERFACE_2); rqs3.setOperation(OPERATION_2); rqs3.setMessageId("4"); rqs3.setTimestamp(24); au.getActivityTypes().add(rqs3); ResponseReceived rpr3=new ResponseReceived(); rpr3.setServiceType(SERVICE_TYPE_2); rpr3.setInterface(INTERFACE_2); rpr3.setOperation(OPERATION_2); rpr3.setMessageId("5"); rpr3.setReplyToId("4"); rpr3.setTimestamp(36); au.getActivityTypes().add(rpr3); ResponseSent rps1=new ResponseSent(); rps1.setServiceType(SERVICE_TYPE_1); rps1.setInterface(INTERFACE_1); rps1.setOperation(OPERATION_1); rps1.setMessageId("6"); rps1.setReplyToId("1"); rps1.setTimestamp(40); au.getActivityTypes().add(rps1); // Create service definition java.util.Collection<ServiceDefinition> sdefs= ServiceDefinitionUtil.derive(au); if (sdefs.size() != 1) { fail("One definition expected: "+sdefs.size()); } ServiceDefinition sdef=sdefs.iterator().next(); if (!sdef.getServiceType().equals(SERVICE_TYPE_1)) { fail("Service type incorrect"); } InterfaceDefinition idef=sdef.getInterface(INTERFACE_1); if (idef == null) { fail("Failed to get interface defn"); } if (idef.getOperations().size() != 1) { fail("Only 1 operation expected: "+idef.getOperations().size()); } OperationDefinition op=idef.getOperation(OPERATION_1); if (op == null) { fail("Failed to retrieve op"); } if (op.getRequestResponse() == null) { fail("Request/response not found"); } if (op.getRequestFaults().size() > 0) { fail("No faults should have occurred"); } if (op.getRequestResponse().getInvocations().size() != 1) { fail("One external invocations expected"); } InvocationDefinition id=op.getRequestResponse().getInvocation(INTERFACE_2, OPERATION_2, null); if (id == null) { fail("Failed to get invocation definition"); } InvocationMetric metrics=id.getMetrics(); if (metrics.getAverage() != 9) { fail("Average not 9: "+metrics.getAverage()); } if (metrics.getMin() != 6) { fail("Min not 6: "+metrics.getMin()); } if (metrics.getMax() != 12) { fail("Max not 12: "+metrics.getMax()); } if (metrics.getCount() != 2) { fail("Count not 2: "+metrics.getCount()); } if (metrics.getFaults() != 0) { fail("Faults not 0: "+metrics.getFaults()); } } @Test public void testServiceInvokedWithExternalFaultInvocations() { // Create example activity events ActivityUnit au=new ActivityUnit(); RequestReceived rqr1=new RequestReceived(); rqr1.setServiceType(SERVICE_TYPE_1); rqr1.setInterface(INTERFACE_1); rqr1.setOperation(OPERATION_1); rqr1.setMessageId("1"); rqr1.setTimestamp(10); au.getActivityTypes().add(rqr1); RequestSent rqs2=new RequestSent(); rqs2.setServiceType(SERVICE_TYPE_2); rqs2.setInterface(INTERFACE_2); rqs2.setOperation(OPERATION_2); rqs2.setFault(FAULT_1); rqs2.setMessageId("2"); rqs2.setTimestamp(15); au.getActivityTypes().add(rqs2); ResponseReceived rpr2=new ResponseReceived(); rpr2.setServiceType(SERVICE_TYPE_2); rpr2.setInterface(INTERFACE_2); rpr2.setOperation(OPERATION_2); rpr2.setFault(FAULT_1); rpr2.setMessageId("3"); rpr2.setReplyToId("2"); rpr2.setTimestamp(21); au.getActivityTypes().add(rpr2); RequestSent rqs3=new RequestSent(); rqs3.setServiceType(SERVICE_TYPE_2); rqs3.setInterface(INTERFACE_2); rqs3.setOperation(OPERATION_2); rqs3.setFault(FAULT_1); rqs3.setMessageId("4"); rqs3.setTimestamp(24); au.getActivityTypes().add(rqs3); ResponseReceived rpr3=new ResponseReceived(); rpr3.setServiceType(SERVICE_TYPE_2); rpr3.setInterface(INTERFACE_2); rpr3.setOperation(OPERATION_2); rpr3.setFault(FAULT_1); rpr3.setMessageId("5"); rpr3.setReplyToId("4"); rpr3.setTimestamp(36); au.getActivityTypes().add(rpr3); ResponseSent rps1=new ResponseSent(); rps1.setServiceType(SERVICE_TYPE_1); rps1.setInterface(INTERFACE_1); rps1.setOperation(OPERATION_1); rps1.setMessageId("6"); rps1.setReplyToId("1"); rps1.setTimestamp(40); au.getActivityTypes().add(rps1); // Create service definition java.util.Collection<ServiceDefinition> sdefs= ServiceDefinitionUtil.derive(au); if (sdefs.size() != 1) { fail("One definition expected: "+sdefs.size()); } ServiceDefinition sdef=sdefs.iterator().next(); if (!sdef.getServiceType().equals(SERVICE_TYPE_1)) { fail("Service type incorrect"); } InterfaceDefinition idef=sdef.getInterface(INTERFACE_1); if (idef == null) { fail("Failed to get interface defn"); } if (idef.getOperations().size() != 1) { fail("Only 1 operation expected: "+idef.getOperations().size()); } OperationDefinition op=idef.getOperation(OPERATION_1); if (op == null) { fail("Failed to retrieve op"); } if (op.getRequestResponse() == null) { fail("Request/response not found"); } if (op.getRequestFaults().size() > 0) { fail("No faults should have occurred"); } if (op.getRequestResponse().getInvocations().size() != 1) { fail("One external invocations expected"); } InvocationDefinition id=op.getRequestResponse().getInvocation(INTERFACE_2, OPERATION_2, FAULT_1); if (id == null) { fail("Failed to get invocation definition"); } InvocationMetric metrics=id.getMetrics(); if (metrics.getAverage() != 9) { fail("Average not 9: "+metrics.getAverage()); } if (metrics.getMin() != 6) { fail("Min not 6: "+metrics.getMin()); } if (metrics.getMax() != 12) { fail("Max not 12: "+metrics.getMax()); } if (metrics.getCount() != 2) { fail("Count not 2: "+metrics.getCount()); } if (metrics.getFaults() != 2) { fail("Faults not 2: "+metrics.getFaults()); } } @Test public void testServiceInvokedWithExternalInvocationsAndOtherService() { // Create example activity events ActivityUnit au=new ActivityUnit(); RequestReceived rqr1=new RequestReceived(); rqr1.setServiceType(SERVICE_TYPE_1); rqr1.setInterface(INTERFACE_1); rqr1.setOperation(OPERATION_1); rqr1.setMessageId("1"); rqr1.setTimestamp(10); au.getActivityTypes().add(rqr1); RequestSent rqs2=new RequestSent(); rqs2.setServiceType(SERVICE_TYPE_2); rqs2.setInterface(INTERFACE_2); rqs2.setOperation(OPERATION_2); rqs2.setMessageId("2"); rqs2.setTimestamp(15); au.getActivityTypes().add(rqs2); RequestReceived rqr3=new RequestReceived(); rqr3.setServiceType(SERVICE_TYPE_2); rqr3.setInterface(INTERFACE_2); rqr3.setOperation(OPERATION_2); rqr3.setMessageId("3"); rqr3.setTimestamp(21); au.getActivityTypes().add(rqr3); ResponseSent rps3=new ResponseSent(); rps3.setServiceType(SERVICE_TYPE_2); rps3.setInterface(INTERFACE_2); rps3.setOperation(OPERATION_2); rps3.setMessageId("4"); rps3.setReplyToId("3"); rps3.setTimestamp(24); au.getActivityTypes().add(rps3); ResponseReceived rpr2=new ResponseReceived(); rpr2.setServiceType(SERVICE_TYPE_2); rpr2.setInterface(INTERFACE_2); rpr2.setOperation(OPERATION_2); rpr2.setMessageId("5"); rpr2.setReplyToId("2"); rpr2.setTimestamp(36); au.getActivityTypes().add(rpr2); ResponseSent rps1=new ResponseSent(); rps1.setServiceType(SERVICE_TYPE_1); rps1.setInterface(INTERFACE_1); rps1.setOperation(OPERATION_1); rps1.setMessageId("6"); rps1.setReplyToId("1"); rps1.setTimestamp(40); au.getActivityTypes().add(rps1); // Create service definition java.util.Collection<ServiceDefinition> sdefs= ServiceDefinitionUtil.derive(au); if (sdefs.size() != 2) { fail("Two definition expected: "+sdefs.size()); } ServiceDefinition sdef1=null; ServiceDefinition sdef2=null; for (ServiceDefinition sd : sdefs) { if (sd.getServiceType().equals(SERVICE_TYPE_1)) { sdef1 = sd; } else if (sd.getServiceType().equals(SERVICE_TYPE_2)) { sdef2 = sd; } } if (sdef1 == null) { fail("Service type 1 definition not found"); } if (sdef2 == null) { fail("Service type 2 definition not found"); } if (!sdef1.getServiceType().equals(SERVICE_TYPE_1)) { fail("Interface 1 incorrect"); } if (!sdef2.getServiceType().equals(SERVICE_TYPE_2)) { fail("Interface 2 incorrect"); } if (sdef1.getInterfaces().size() != 1) { fail("Only 1 interface expected for def 1: "+sdef1.getInterfaces().size()); } if (sdef2.getInterfaces().size() != 1) { fail("Only 1 interface expected for def 2: "+sdef2.getInterfaces().size()); } InterfaceDefinition idef1=sdef1.getInterfaces().get(0); InterfaceDefinition idef2=sdef2.getInterfaces().get(0); if (idef1.getOperations().size() != 1) { fail("Only 1 operation expected for def 1: "+idef1.getOperations().size()); } if (idef2.getOperations().size() != 1) { fail("Only 1 operation expected for def 2: "+idef2.getOperations().size()); } OperationDefinition op1=idef1.getOperation(OPERATION_1); if (op1 == null) { fail("Failed to retrieve op"); } if (op1.getRequestResponse() == null) { fail("Request/response not found"); } if (op1.getRequestFaults().size() > 0) { fail("No faults should have occurred"); } if (op1.getRequestResponse().getInvocations().size() != 1) { fail("One external invocations expected"); } InvocationDefinition id1=op1.getRequestResponse().getInvocation(INTERFACE_2, SERVICE_TYPE_2, OPERATION_2, null); if (id1 == null) { fail("Failed to get invocation definition 1"); } InvocationMetric metrics1=id1.getMetrics(); if (metrics1.getAverage() != 21) { fail("Average not 21: "+metrics1.getAverage()); } if (metrics1.getMin() != 21) { fail("Min not 21: "+metrics1.getMin()); } if (metrics1.getMax() != 21) { fail("Max not 21: "+metrics1.getMax()); } if (metrics1.getCount() != 1) { fail("Count not 1: "+metrics1.getCount()); } // Check external invoked operation details OperationDefinition op2=idef2.getOperation(OPERATION_2); if (op2 == null) { fail("Failed to retrieve op 2"); } if (op2.getRequestResponse() == null) { fail("Request/response not found"); } if (op2.getRequestFaults().size() > 0) { fail("No faults should have occurred"); } if (op2.getRequestResponse().getInvocations().size() != 0) { fail("No external invocations expected"); } InvocationMetric metrics2=op2.getRequestResponse().getMetrics(); if (metrics2.getAverage() != 3) { fail("Average not 3: "+metrics2.getAverage()); } if (metrics2.getMin() != 3) { fail("Min not 3: "+metrics2.getMin()); } if (metrics2.getMax() != 3) { fail("Max not 3: "+metrics2.getMax()); } if (metrics2.getCount() != 1) { fail("Count not 1: "+metrics2.getCount()); } } @Test public void testMergeSnapshots() { ServiceDefinition st1=new ServiceDefinition(); st1.setServiceType(SERVICE_TYPE_1); st1.getContext().add(new Context(Context.Type.Conversation, "c1")); InterfaceDefinition idef1=new InterfaceDefinition(); idef1.setInterface(INTERFACE_1); st1.getInterfaces().add(idef1); OperationDefinition op1=new OperationDefinition(); idef1.getOperations().add(op1); op1.setName(OPERATION_1); RequestResponseDefinition nrd1=new RequestResponseDefinition(); nrd1.getMetrics().setCount(10); nrd1.getMetrics().setFaults(0); nrd1.getMetrics().setAverage(1000); nrd1.getMetrics().setMin(500); nrd1.getMetrics().setMax(1500); nrd1.getMetrics().setCountChange(+5); nrd1.getMetrics().setAverageChange(+2); nrd1.getMetrics().setMinChange(-5); nrd1.getMetrics().setMaxChange(+20); op1.setRequestResponse(nrd1); RequestFaultDefinition frd1=new RequestFaultDefinition(); frd1.setFault("fault1"); frd1.getMetrics().setCount(20); frd1.getMetrics().setFaults(20); frd1.getMetrics().setAverage(2000); frd1.getMetrics().setMin(1500); frd1.getMetrics().setMax(2500); frd1.getMetrics().setCountChange(-10); frd1.getMetrics().setAverageChange(+6); frd1.getMetrics().setMinChange(0); frd1.getMetrics().setMaxChange(+10); op1.getRequestFaults().add(frd1); ServiceDefinition st2=new ServiceDefinition(); st2.setServiceType(SERVICE_TYPE_2); st2.getContext().add(new Context(Context.Type.Conversation, "c2")); InterfaceDefinition idef2=new InterfaceDefinition(); idef2.setInterface(INTERFACE_2); st2.getInterfaces().add(idef2); OperationDefinition op2=new OperationDefinition(); idef2.getOperations().add(op2); op2.setName(OPERATION_2); RequestResponseDefinition nrd2=new RequestResponseDefinition(); nrd2.getMetrics().setCount(10); nrd2.getMetrics().setFaults(0); nrd2.getMetrics().setAverage(1000); nrd2.getMetrics().setMin(500); nrd2.getMetrics().setMax(1500); nrd2.getMetrics().setCountChange(+5); nrd2.getMetrics().setAverageChange(+2); nrd2.getMetrics().setMinChange(-5); nrd2.getMetrics().setMaxChange(+20); op2.setRequestResponse(nrd1); RequestFaultDefinition frd2=new RequestFaultDefinition(); frd2.setFault("fault2"); frd2.getMetrics().setCount(20); frd2.getMetrics().setFaults(20); frd2.getMetrics().setAverage(2000); frd2.getMetrics().setMin(1500); frd2.getMetrics().setMax(2500); frd2.getMetrics().setCountChange(-10); frd2.getMetrics().setAverageChange(+6); frd2.getMetrics().setMinChange(0); frd2.getMetrics().setMaxChange(+10); op2.getRequestFaults().add(frd2); ServiceDefinition st3=new ServiceDefinition(); st3.setServiceType(SERVICE_TYPE_1); st3.getContext().add(new Context(Context.Type.Conversation, "c3")); InterfaceDefinition idef3=new InterfaceDefinition(); idef3.setInterface(INTERFACE_1); st3.getInterfaces().add(idef3); OperationDefinition op3=new OperationDefinition(); idef3.getOperations().add(op3); op3.setName(OPERATION_1); RequestResponseDefinition nrd3=new RequestResponseDefinition(); nrd3.getMetrics().setCount(5); nrd3.getMetrics().setFaults(0); nrd3.getMetrics().setAverage(500); nrd3.getMetrics().setMin(250); nrd3.getMetrics().setMax(750); nrd3.getMetrics().setCountChange(+2); nrd3.getMetrics().setAverageChange(+1); nrd3.getMetrics().setMinChange(-2); nrd3.getMetrics().setMaxChange(+10); op3.setRequestResponse(nrd3); RequestFaultDefinition frd3=new RequestFaultDefinition(); frd3.setFault("fault3"); frd3.getMetrics().setCount(20); frd3.getMetrics().setFaults(20); frd3.getMetrics().setAverage(2000); frd3.getMetrics().setMin(1500); frd3.getMetrics().setMax(2500); frd3.getMetrics().setCountChange(-10); frd3.getMetrics().setAverageChange(+6); frd3.getMetrics().setMinChange(0); frd3.getMetrics().setMaxChange(+10); op3.getRequestFaults().add(frd3); RequestFaultDefinition frd4=new RequestFaultDefinition(); frd4.setFault("fault1"); frd4.getMetrics().setCount(20); frd4.getMetrics().setFaults(20); frd4.getMetrics().setAverage(2000); frd4.getMetrics().setMin(1500); frd4.getMetrics().setMax(2500); frd4.getMetrics().setCountChange(-10); frd4.getMetrics().setAverageChange(+6); frd4.getMetrics().setMinChange(0); frd4.getMetrics().setMaxChange(+10); op3.getRequestFaults().add(frd4); java.util.Map<String,ServiceDefinition> sds1=new java.util.HashMap<String,ServiceDefinition>(); sds1.put(st1.getServiceType(), st1); sds1.put(st2.getServiceType(), st2); java.util.Map<String,ServiceDefinition> sds2=new java.util.HashMap<String,ServiceDefinition>(); sds2.put(st3.getServiceType(), st3); java.util.List<java.util.Map<String,ServiceDefinition>> list= new java.util.ArrayList<java.util.Map<String,ServiceDefinition>>(); list.add(sds1); list.add(sds2); java.util.Map<String,ServiceDefinition> merged=ServiceDefinitionUtil.mergeSnapshots(list, false); if (merged == null) { fail("No merged results"); } if (merged.size() != 2) { fail("Two service defintions expected"); } ServiceDefinition sd1=merged.get(SERVICE_TYPE_1); ServiceDefinition sd2=merged.get(SERVICE_TYPE_2); if (sd1 == null) { fail("SD1 is null"); } if (sd2 == null) { fail("SD2 is null"); } if (sd1.getContext().size() != 0) { fail("SD1 No context should be retained"); } if (sd2.getContext().size() != 0) { fail("SD2 No context should be retained"); } InterfaceDefinition idef1res=sd1.getInterface(INTERFACE_1); if (idef1res == null) { fail("Failed to get interface defn1"); } InterfaceDefinition idef2res=sd2.getInterface(INTERFACE_2); if (idef2res == null) { fail("Failed to get interface defn2"); } if (idef1res.getOperations().size() != 1) { fail("SD1 ops should be 1: "+idef1res.getOperations().size()); } if (idef2res.getOperations().size() != 1) { fail("SD2 ops should be 1: "+idef2res.getOperations().size()); } OperationDefinition opd1=idef1res.getOperations().get(0); OperationDefinition opd2=idef2res.getOperations().get(0); if (opd1.getRequestFaults().size() != 2) { fail("OP1 should have two faults: "+opd1.getRequestFaults().size()); } if (opd2.getRequestFaults().size() != 1) { fail("OP2 should have 1 fault: "+opd2.getRequestFaults().size()); } if (opd1.getRequestResponse().getMetrics().getCount() != 15) { fail("Expecting count 15: "+opd1.getRequestResponse().getMetrics().getCount()); } if (opd1.getRequestFaults().get(0).getMetrics().getFaults() != 40) { fail("Expecting faults 40: "+opd1.getRequestFaults().get(0).getMetrics().getFaults()); } } @Test public void testMergeSnapshotsWithContext() { ServiceDefinition st1=new ServiceDefinition(); st1.setServiceType(SERVICE_TYPE_1); st1.getContext().add(new Context(Context.Type.Conversation, "c1")); InterfaceDefinition idef1=new InterfaceDefinition(); idef1.setInterface(INTERFACE_1); OperationDefinition op1=new OperationDefinition(); idef1.getOperations().add(op1); op1.setName(OPERATION_1); RequestResponseDefinition nrd1=new RequestResponseDefinition(); nrd1.getMetrics().setCount(10); nrd1.getMetrics().setAverage(1000); nrd1.getMetrics().setMin(500); nrd1.getMetrics().setMax(1500); nrd1.getMetrics().setCountChange(+5); nrd1.getMetrics().setAverageChange(+2); nrd1.getMetrics().setMinChange(-5); nrd1.getMetrics().setMaxChange(+20); op1.setRequestResponse(nrd1); RequestFaultDefinition frd1=new RequestFaultDefinition(); frd1.setFault("fault1"); frd1.getMetrics().setCount(20); frd1.getMetrics().setAverage(2000); frd1.getMetrics().setMin(1500); frd1.getMetrics().setMax(2500); frd1.getMetrics().setCountChange(-10); frd1.getMetrics().setAverageChange(+6); frd1.getMetrics().setMinChange(0); frd1.getMetrics().setMaxChange(+10); op1.getRequestFaults().add(frd1); ServiceDefinition st2=new ServiceDefinition(); st2.setServiceType(SERVICE_TYPE_1); // Use same service type to support merge st2.getContext().add(new Context(Context.Type.Conversation, "c2")); InterfaceDefinition idef2=new InterfaceDefinition(); idef2.setInterface(INTERFACE_1); // Use same interface to support merge st2.getInterfaces().add(idef2); OperationDefinition op2=new OperationDefinition(); idef2.getOperations().add(op2); op2.setName(OPERATION_2); RequestResponseDefinition nrd2=new RequestResponseDefinition(); nrd2.getMetrics().setCount(10); nrd2.getMetrics().setAverage(1000); nrd2.getMetrics().setMin(500); nrd2.getMetrics().setMax(1500); nrd2.getMetrics().setCountChange(+5); nrd2.getMetrics().setAverageChange(+2); nrd2.getMetrics().setMinChange(-5); nrd2.getMetrics().setMaxChange(+20); op2.setRequestResponse(nrd1); RequestFaultDefinition frd2=new RequestFaultDefinition(); frd2.setFault("fault2"); frd2.getMetrics().setCount(20); frd2.getMetrics().setAverage(2000); frd2.getMetrics().setMin(1500); frd2.getMetrics().setMax(2500); frd2.getMetrics().setCountChange(-10); frd2.getMetrics().setAverageChange(+6); frd2.getMetrics().setMinChange(0); frd2.getMetrics().setMaxChange(+10); op2.getRequestFaults().add(frd2); ServiceDefinition st3=new ServiceDefinition(); st3.setServiceType(SERVICE_TYPE_1); // Use same service type for merge st3.getContext().add(new Context(Context.Type.Conversation, "c3")); InterfaceDefinition idef3=new InterfaceDefinition(); idef3.setInterface(INTERFACE_1); // Use same interface to support merge st3.getInterfaces().add(idef3); OperationDefinition op3=new OperationDefinition(); idef3.getOperations().add(op3); op3.setName(OPERATION_1); RequestResponseDefinition nrd3=new RequestResponseDefinition(); nrd3.getMetrics().setCount(5); nrd3.getMetrics().setAverage(500); nrd3.getMetrics().setMin(250); nrd3.getMetrics().setMax(750); nrd3.getMetrics().setCountChange(+2); nrd3.getMetrics().setAverageChange(+1); nrd3.getMetrics().setMinChange(-2); nrd3.getMetrics().setMaxChange(+10); op3.setRequestResponse(nrd3); RequestFaultDefinition frd3=new RequestFaultDefinition(); frd3.setFault("fault3"); frd3.getMetrics().setCount(20); frd3.getMetrics().setAverage(2000); frd3.getMetrics().setMin(1500); frd3.getMetrics().setMax(2500); frd3.getMetrics().setCountChange(-10); frd3.getMetrics().setAverageChange(+6); frd3.getMetrics().setMinChange(0); frd3.getMetrics().setMaxChange(+10); op3.getRequestFaults().add(frd3); java.util.Map<String,ServiceDefinition> sds1=new java.util.HashMap<String,ServiceDefinition>(); sds1.put(st1.getServiceType(), st1); java.util.Map<String,ServiceDefinition> sds2=new java.util.HashMap<String,ServiceDefinition>(); sds2.put(st2.getServiceType(), st2); java.util.Map<String,ServiceDefinition> sds3=new java.util.HashMap<String,ServiceDefinition>(); sds3.put(st3.getServiceType(), st3); java.util.List<java.util.Map<String,ServiceDefinition>> list= new java.util.ArrayList<java.util.Map<String,ServiceDefinition>>(); list.add(sds1); list.add(sds2); list.add(sds3); java.util.Map<String,ServiceDefinition> merged=ServiceDefinitionUtil.mergeSnapshots(list, true); if (merged == null) { fail("No merged results"); } if (merged.size() != 1) { fail("One service defintion expected"); } ServiceDefinition sd=merged.get(SERVICE_TYPE_1); if (sd == null) { fail("SD is null"); } if (sd.getContext().size() != 3) { fail("Expecting 3 context to be retained: "+sd.getContext().size()); } } // RTGOV-557 @Test public void testSeviceDefinitionInterfaceNull() { RequestReceived rqr=new RequestReceived(); rqr.setServiceType(SERVICE_TYPE_1); try { ServiceDefinitionUtil.processServiceInvoked(new java.util.HashMap<String,ServiceDefinition>(), null, rqr, null); } catch (Exception e) { fail("Failed to process request received"); } } }