/* * 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.service; import static org.junit.Assert.*; import org.junit.Test; import org.overlord.rtgov.activity.model.Context; import org.overlord.rtgov.analytics.service.OperationDefinition; import org.overlord.rtgov.analytics.service.ServiceDefinition; public class ServiceDefinitionTest { private static final String INTERFACE_1 = "Interface1"; private static final String OPERATION_3 = "op3"; private static final String OPERATION_1 = "op1"; private static final String SERVICE_TYPE_1 = "st1"; private static final String SERVICE_TYPE_2 = "st2"; @Test public void testMergeIncorrectServiceType() { ServiceDefinition sd1=new ServiceDefinition(); sd1.setServiceType(SERVICE_TYPE_1); ServiceDefinition sd2=new ServiceDefinition(); sd2.setServiceType(SERVICE_TYPE_2); try { sd1.merge(sd2, false); fail("Should have thrown exception"); } catch (Exception e) { // Should throw exception } } @Test public void testMergeOperations() { ServiceDefinition sd1=new ServiceDefinition(); sd1.setServiceType(SERVICE_TYPE_1); InterfaceDefinition idef1=new InterfaceDefinition(); sd1.getInterfaces().add(idef1); idef1.setInterface(INTERFACE_1); OperationDefinition op1=new OperationDefinition(); op1.setName(OPERATION_1); idef1.getOperations().add(op1); ServiceDefinition sd2=new ServiceDefinition(); sd2.setServiceType(SERVICE_TYPE_1); InterfaceDefinition idef2=new InterfaceDefinition(); sd2.getInterfaces().add(idef2); idef2.setInterface(INTERFACE_1); OperationDefinition op2=new OperationDefinition(); op2.setName(OPERATION_1); idef2.getOperations().add(op2); OperationDefinition op3=new OperationDefinition(); op3.setName(OPERATION_3); idef2.getOperations().add(op3); ServiceDefinition sd=sd1.shallowCopy(); try { sd.merge(sd1, false); sd.merge(sd2, false); } catch (Exception e) { fail("Failed to merge: "+e); } if (sd.getContext().size() != 0) { fail("Should be 0 context: "+sd1.getContext().size()); } if (sd.getInterfaces().size() != 1) { fail("Expecting 1 interface: "+sd.getInterfaces().size()); } InterfaceDefinition id=sd.getInterfaces().get(0); if (id.getOperations().size() != 2) { fail("Should be two ops: "+id.getOperations().size()); } if (id.getOperation(OPERATION_1) == null) { fail("Failed to get op1"); } if (id.getOperation(OPERATION_3) == null) { fail("Failed to get op3"); } if (sd.getHistory().size() != 2) { fail("Expecting 2 merged: "+sd.getHistory().size()); } if (sd.getHistory().get(0).equals(sd1.getMetrics())) { fail("Merged 0 should be sd1"); } if (sd.getHistory().get(1).equals(sd2.getMetrics())) { fail("Merged 1 should be sd2"); } } @Test public void testMergeWithoutContext() { ServiceDefinition sd1=new ServiceDefinition(); sd1.setServiceType(SERVICE_TYPE_1); InterfaceDefinition idef1=new InterfaceDefinition(); sd1.getInterfaces().add(idef1); idef1.setInterface(INTERFACE_1); OperationDefinition op1=new OperationDefinition(); op1.setName(OPERATION_1); idef1.getOperations().add(op1); ServiceDefinition sd2=new ServiceDefinition(); sd2.setServiceType(SERVICE_TYPE_1); sd2.getContext().add(new Context(Context.Type.Conversation, "c2")); try { sd1.merge(sd2, false); } catch (Exception e) { fail("Failed to merge: "+e); } if (sd1.getContext().size() != 0) { fail("Should be 0 context: "+sd1.getContext().size()); } } @Test public void testMergeWithContext() { ServiceDefinition sd1=new ServiceDefinition(); sd1.setServiceType(SERVICE_TYPE_1); ServiceDefinition sd2=new ServiceDefinition(); sd2.setServiceType(SERVICE_TYPE_1); sd2.getContext().add(new Context(Context.Type.Conversation, "c2")); try { sd1.merge(sd2, true); } catch (Exception e) { fail("Failed to merge: "+e); } if (sd1.getContext().size() != 1) { fail("Should be 1 context: "+sd1.getContext().size()); } } @Test public void testMergeMetrics() { ServiceDefinition sd1=new ServiceDefinition(); sd1.setServiceType(SERVICE_TYPE_1); InterfaceDefinition idef1=new InterfaceDefinition(); sd1.getInterfaces().add(idef1); idef1.setInterface(INTERFACE_1); OperationDefinition op1=new OperationDefinition(); op1.setName(OPERATION_1); idef1.getOperations().add(op1); RequestResponseDefinition rrd1=new RequestResponseDefinition(); op1.setRequestResponse(rrd1); rrd1.getMetrics().setCount(1); rrd1.getMetrics().setAverage(1250); ServiceDefinition sd2=new ServiceDefinition(); sd2.setServiceType(SERVICE_TYPE_1); InterfaceDefinition idef2=new InterfaceDefinition(); sd2.getInterfaces().add(idef2); idef2.setInterface(INTERFACE_1); OperationDefinition op2=new OperationDefinition(); op2.setName(OPERATION_1); idef2.getOperations().add(op2); RequestResponseDefinition rrd2=new RequestResponseDefinition(); op2.setRequestResponse(rrd2); rrd2.getMetrics().setCount(1); rrd2.getMetrics().setAverage(400); OperationDefinition op3=new OperationDefinition(); op3.setName(OPERATION_3); idef2.getOperations().add(op3); RequestResponseDefinition rrd3=new RequestResponseDefinition(); op3.setRequestResponse(rrd3); rrd3.getMetrics().setCount(1); rrd3.getMetrics().setAverage(700); ServiceDefinition sd=sd1.shallowCopy(); try { sd.merge(sd1, false); sd.merge(sd2, false); } catch (Exception e) { fail("Failed to merge: "+e); } if (sd.getInterfaces().size() != 1) { fail("Expecting 1 interface: "+sd.getInterfaces().size()); } InterfaceDefinition idefres=sd.getInterfaces().get(0); if (idefres.getOperations().size() != 2) { fail("Should be two ops: "+idefres.getOperations().size()); } if (idefres.getOperation(OPERATION_1) == null) { fail("Failed to get op1"); } if (idefres.getOperation(OPERATION_3) == null) { fail("Failed to get op3"); } OperationDefinition od=idefres.getOperation(OPERATION_1); if (od.getHistory().size() != 2) { fail("Should be two merged ops"); } RequestResponseDefinition rrd=od.getRequestResponse(); if (rrd == null) { fail("Request/response defn is null"); } if (rrd.getMetrics().getCount() != 2) { fail("Merged count should be 2: "+rrd.getMetrics().getCount()); } if (rrd.getMetrics().getAverage() != 825) { fail("Merged average should be 825: "+rrd.getMetrics().getAverage()); } } }