/*
* 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.content.epn;
import static org.junit.Assert.*;
import org.junit.Test;
import org.overlord.rtgov.activity.model.ActivityUnit;
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.ServiceDefinition;
import org.overlord.rtgov.content.epn.ServiceDefinitionProcessor;
public class ServiceDefinitionProcessorTest {
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 testServiceDefinitionsDerivedFromAU() {
// Create example activity events
ActivityUnit au=new ActivityUnit();
RequestReceived rqr1=new RequestReceived();
rqr1.setInterface(INTERFACE_1);
rqr1.setOperation(OPERATION_1);
rqr1.setServiceType(SERVICE_TYPE_1);
rqr1.setMessageId("1");
rqr1.setTimestamp(10);
au.getActivityTypes().add(rqr1);
RequestSent rqs2=new RequestSent();
rqs2.setInterface(INTERFACE_2);
rqs2.setOperation(OPERATION_2);
rqs2.setServiceType(SERVICE_TYPE_2);
rqs2.setMessageId("2");
rqs2.setTimestamp(15);
au.getActivityTypes().add(rqs2);
RequestReceived rqr3=new RequestReceived();
rqr3.setInterface(INTERFACE_2);
rqr3.setOperation(OPERATION_2);
rqr3.setServiceType(SERVICE_TYPE_2);
rqr3.setMessageId("3");
rqr3.setTimestamp(21);
au.getActivityTypes().add(rqr3);
ResponseSent rps3=new ResponseSent();
rps3.setInterface(INTERFACE_2);
rps3.setOperation(OPERATION_2);
rps3.setServiceType(SERVICE_TYPE_2);
rps3.setMessageId("4");
rps3.setReplyToId("3");
rps3.setTimestamp(24);
au.getActivityTypes().add(rps3);
ResponseReceived rpr2=new ResponseReceived();
rpr2.setInterface(INTERFACE_2);
rpr2.setOperation(OPERATION_2);
rpr2.setServiceType(SERVICE_TYPE_2);
rpr2.setMessageId("5");
rpr2.setReplyToId("2");
rpr2.setTimestamp(36);
au.getActivityTypes().add(rpr2);
ResponseSent rps1=new ResponseSent();
rps1.setInterface(INTERFACE_1);
rps1.setOperation(OPERATION_1);
rps1.setServiceType(SERVICE_TYPE_1);
rps1.setMessageId("6");
rps1.setReplyToId("1");
rps1.setTimestamp(40);
au.getActivityTypes().add(rps1);
// Create service definition
ServiceDefinitionProcessor processor=new ServiceDefinitionProcessor();
java.io.Serializable result=null;
try {
result = processor.process(null, au, 1);
} catch (Exception e) {
fail("Failed to process activity unit: "+e);
}
if (result == null) {
fail("Result is null");
}
if (!(result instanceof java.util.List)){
fail("Result is not a list");
}
@SuppressWarnings("unchecked")
java.util.List<ServiceDefinition> sdefs=
(java.util.List<ServiceDefinition>)result;
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.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.getInterface().equals(INTERFACE_1)) {
fail("Service interface 1 incorrect");
}
if (!idef2.getInterface().equals(INTERFACE_2)) {
fail("Service interface 2 incorrect");
}
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());
}
}
}