/*
* 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.service.dependency.layout;
import static org.junit.Assert.*;
import org.junit.Test;
import org.overlord.rtgov.analytics.service.InterfaceDefinition;
import org.overlord.rtgov.analytics.service.InvocationDefinition;
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.service.dependency.ServiceDependencyBuilder;
import org.overlord.rtgov.service.dependency.ServiceGraph;
import org.overlord.rtgov.service.dependency.ServiceNode;
import org.overlord.rtgov.service.dependency.layout.ServiceGraphLayout;
import org.overlord.rtgov.service.dependency.layout.ServiceGraphLayoutImpl;
public class ServiceGraphLayoutImplTest {
private static final String FAULT2 = "Fault2";
private static final String OP4 = "op4";
private static final String OP3 = "op3";
private static final String OP2 = "op2";
private static final String OP1 = "op1";
private static final String INTERFACE1 = "intf1";
private static final String INTERFACE2 = "intf2";
private static final String INTERFACE3 = "intf3";
private static final String INTERFACE4 = "intf4";
private static final String SERVICE_TYPE1 = "st1";
private static final String SERVICE_TYPE2 = "st2";
private static final String SERVICE_TYPE3 = "st3";
private static final String SERVICE_TYPE4 = "st4";
@Test
public void testLayoutGraph() {
ServiceDefinition sd1=new ServiceDefinition();
sd1.setServiceType(SERVICE_TYPE1);
InterfaceDefinition idef1=new InterfaceDefinition();
idef1.setInterface(INTERFACE1);
sd1.getInterfaces().add(idef1);
OperationDefinition op1=new OperationDefinition();
op1.setName(OP1);
idef1.getOperations().add(op1);
RequestResponseDefinition rrd1=new RequestResponseDefinition();
op1.setRequestResponse(rrd1);
InvocationDefinition id1=new InvocationDefinition();
id1.setInterface(INTERFACE2);
id1.setOperation(OP2);
rrd1.getInvocations().add(id1);
InvocationDefinition id1b=new InvocationDefinition();
id1b.setInterface(INTERFACE4);
id1b.setOperation(OP4);
rrd1.getInvocations().add(id1b);
ServiceDefinition sd2=new ServiceDefinition();
sd2.setServiceType(SERVICE_TYPE2);
InterfaceDefinition idef2=new InterfaceDefinition();
idef2.setInterface(INTERFACE2);
sd2.getInterfaces().add(idef2);
OperationDefinition op2=new OperationDefinition();
op2.setName(OP2);
idef2.getOperations().add(op2);
RequestResponseDefinition rrd2=new RequestResponseDefinition();
op2.setRequestResponse(rrd2);
InvocationDefinition id2c=new InvocationDefinition();
id2c.setInterface(INTERFACE3);
id2c.setOperation(OP3);
rrd2.getInvocations().add(id2c);
RequestFaultDefinition rfd2=new RequestFaultDefinition();
rfd2.setFault(FAULT2);
op2.getRequestFaults().add(rfd2);
InvocationDefinition id2b=new InvocationDefinition();
id2b.setInterface(INTERFACE3);
id2b.setOperation(OP3);
rfd2.getInvocations().add(id2b);
ServiceDefinition sd3=new ServiceDefinition();
sd3.setServiceType(SERVICE_TYPE3);
InterfaceDefinition idef3=new InterfaceDefinition();
idef3.setInterface(INTERFACE3);
sd3.getInterfaces().add(idef3);
OperationDefinition op3=new OperationDefinition();
op3.setName(OP3);
idef3.getOperations().add(op3);
ServiceDefinition sd4=new ServiceDefinition();
sd4.setServiceType(SERVICE_TYPE4);
InterfaceDefinition idef4=new InterfaceDefinition();
idef4.setInterface(INTERFACE4);
sd4.getInterfaces().add(idef4);
OperationDefinition op4=new OperationDefinition();
op4.setName(OP4);
idef4.getOperations().add(op4);
java.util.Set<ServiceDefinition> sds=new java.util.HashSet<ServiceDefinition>();
sds.add(sd1);
sds.add(sd2);
sds.add(sd3);
sds.add(sd4);
ServiceGraph graph=
ServiceDependencyBuilder.buildGraph(sds, null);
if (graph == null) {
fail("Graph is null");
}
ServiceGraphLayoutImpl layout=new ServiceGraphLayoutImpl();
layout.layout(graph);
// Check some of the dimensions
ServiceNode sn1=graph.getServiceNode(sd1.getServiceType());
ServiceNode sn2=graph.getServiceNode(sd2.getServiceType());
ServiceNode sn3=graph.getServiceNode(sd3.getServiceType());
ServiceNode sn4=graph.getServiceNode(sd4.getServiceType());
int sn1x=(Integer)sn1.getProperties().get(ServiceGraphLayout.X_POSITION);
int sn1y=(Integer)sn1.getProperties().get(ServiceGraphLayout.Y_POSITION);
int sn2x=(Integer)sn2.getProperties().get(ServiceGraphLayout.X_POSITION);
int sn2y=(Integer)sn2.getProperties().get(ServiceGraphLayout.Y_POSITION);
int sn3x=(Integer)sn3.getProperties().get(ServiceGraphLayout.X_POSITION);
int sn3y=(Integer)sn3.getProperties().get(ServiceGraphLayout.Y_POSITION);
int sn4x=(Integer)sn4.getProperties().get(ServiceGraphLayout.X_POSITION);
int sn4y=(Integer)sn4.getProperties().get(ServiceGraphLayout.Y_POSITION);
int sn4h=(Integer)sn4.getProperties().get(ServiceGraphLayout.HEIGHT);
if (sn1x != ServiceGraphLayoutImpl.SERVICE_INITIAL_HORIZONTAL_PADDING) {
fail("sn1x incorrect");
}
if (sn1y != ServiceGraphLayoutImpl.SERVICE_VERTICAL_PADDING) {
fail("sn1y incorrect");
}
int val=(ServiceGraphLayoutImpl.SERVICE_INITIAL_HORIZONTAL_PADDING
+ServiceGraphLayoutImpl.SERVICE_HORIZONTAL_PADDING
+ServiceGraphLayoutImpl.SERVICE_WIDTH);
if (sn2x != val) {
fail("sn2x incorrect");
}
if (sn2y != ServiceGraphLayoutImpl.SERVICE_VERTICAL_PADDING) {
fail("sn2y incorrect");
}
val = (ServiceGraphLayoutImpl.SERVICE_INITIAL_HORIZONTAL_PADDING
+(2*ServiceGraphLayoutImpl.SERVICE_HORIZONTAL_PADDING)
+(2*ServiceGraphLayoutImpl.SERVICE_WIDTH));
if (sn3x != val) {
fail("sn3x incorrect");
}
if (sn3y != ServiceGraphLayoutImpl.SERVICE_VERTICAL_PADDING) {
fail("sn3y incorrect");
}
val = (ServiceGraphLayoutImpl.SERVICE_INITIAL_HORIZONTAL_PADDING
+ServiceGraphLayoutImpl.SERVICE_HORIZONTAL_PADDING
+ServiceGraphLayoutImpl.SERVICE_WIDTH);
if (sn4x != val) {
fail("sn4x incorrect");
}
val = (2*ServiceGraphLayoutImpl.SERVICE_VERTICAL_PADDING
+sn4h);
if (sn4y != val) {
fail("sn4y incorrect");
}
}
@Test
public void testLayoutGraphMultipleClients() {
ServiceDefinition sd1=new ServiceDefinition();
sd1.setServiceType(SERVICE_TYPE1);
InterfaceDefinition idef1=new InterfaceDefinition();
idef1.setInterface(INTERFACE1);
sd1.getInterfaces().add(idef1);
OperationDefinition op1=new OperationDefinition();
op1.setName(OP1);
idef1.getOperations().add(op1);
RequestResponseDefinition rrd1=new RequestResponseDefinition();
op1.setRequestResponse(rrd1);
InvocationDefinition id1=new InvocationDefinition();
id1.setInterface(INTERFACE3);
id1.setOperation(OP3);
rrd1.getInvocations().add(id1);
ServiceDefinition sd2=new ServiceDefinition();
sd2.setServiceType(SERVICE_TYPE2);
InterfaceDefinition idef2=new InterfaceDefinition();
idef2.setInterface(INTERFACE2);
sd2.getInterfaces().add(idef2);
OperationDefinition op2=new OperationDefinition();
op2.setName(OP2);
idef2.getOperations().add(op2);
RequestResponseDefinition rrd2=new RequestResponseDefinition();
op2.setRequestResponse(rrd2);
InvocationDefinition id2c=new InvocationDefinition();
id2c.setInterface(INTERFACE3);
id2c.setOperation(OP3);
rrd2.getInvocations().add(id2c);
ServiceDefinition sd3=new ServiceDefinition();
sd3.setServiceType(SERVICE_TYPE3);
InterfaceDefinition idef3=new InterfaceDefinition();
idef3.setInterface(INTERFACE3);
sd3.getInterfaces().add(idef3);
OperationDefinition op3=new OperationDefinition();
op3.setName(OP3);
idef3.getOperations().add(op3);
java.util.Set<ServiceDefinition> sds=new java.util.HashSet<ServiceDefinition>();
sds.add(sd1);
sds.add(sd2);
sds.add(sd3);
ServiceGraph graph=
ServiceDependencyBuilder.buildGraph(sds, null);
if (graph == null) {
fail("Graph is null");
}
ServiceGraphLayoutImpl layout=new ServiceGraphLayoutImpl();
layout.layout(graph);
// Check some of the dimensions
ServiceNode sn1=graph.getServiceNode(sd1.getServiceType());
ServiceNode sn2=graph.getServiceNode(sd2.getServiceType());
ServiceNode sn3=graph.getServiceNode(sd3.getServiceType());
int sn1x=(Integer)sn1.getProperties().get(ServiceGraphLayout.X_POSITION);
int sn1y=(Integer)sn1.getProperties().get(ServiceGraphLayout.Y_POSITION);
int sn1h=(Integer)sn1.getProperties().get(ServiceGraphLayout.HEIGHT);
int sn2x=(Integer)sn2.getProperties().get(ServiceGraphLayout.X_POSITION);
int sn2y=(Integer)sn2.getProperties().get(ServiceGraphLayout.Y_POSITION);
int sn3x=(Integer)sn3.getProperties().get(ServiceGraphLayout.X_POSITION);
int sn3y=(Integer)sn3.getProperties().get(ServiceGraphLayout.Y_POSITION);
if (sn1x != ServiceGraphLayoutImpl.SERVICE_INITIAL_HORIZONTAL_PADDING) {
fail("sn1x incorrect");
}
if (sn1y != ServiceGraphLayoutImpl.SERVICE_VERTICAL_PADDING) {
fail("sn1y incorrect");
}
if (sn2x != ServiceGraphLayoutImpl.SERVICE_INITIAL_HORIZONTAL_PADDING) {
fail("sn2x incorrect");
}
int val1=(2*ServiceGraphLayoutImpl.SERVICE_VERTICAL_PADDING
+sn1h);
if (sn2y != val1) {
fail("sn2y incorrect");
}
int val2=(ServiceGraphLayoutImpl.SERVICE_INITIAL_HORIZONTAL_PADDING
+ServiceGraphLayoutImpl.SERVICE_HORIZONTAL_PADDING
+ServiceGraphLayoutImpl.SERVICE_WIDTH);
if (sn3x != val2) {
fail("sn3x incorrect");
}
if (sn3y != ServiceGraphLayoutImpl.SERVICE_VERTICAL_PADDING) {
fail("sn3y incorrect");
}
}
}