package org.ow2.choreos.ee.bus; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Collections; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.ow2.choreos.chors.datamodel.Choreography; import org.ow2.choreos.ee.bus.ESBRegister; import org.ow2.choreos.ee.bus.EasyESBException; import org.ow2.choreos.ee.bus.EasyESBNode; import org.ow2.choreos.ee.bus.TopologyConfigurator; import org.ow2.choreos.ee.bus.TopologyNotConfigureException; import org.ow2.choreos.services.datamodel.DeployableService; import org.ow2.choreos.services.datamodel.DeployableServiceSpec; import org.ow2.choreos.services.datamodel.Proxification; import org.ow2.choreos.services.datamodel.ServiceDependency; import org.ow2.choreos.services.datamodel.ServiceInstance; public class TopologyConfiguratorTest { private static final String HOST1 = "host1"; private static final String HOST2 = "host2"; private static final String HOST3 = "host3"; private static final String HOST4 = "host4"; private Choreography chor; private EasyESBNode esbMock1, esbMock2, esbMock3, esbMock4; @Before public void setUp() throws Exception { setUpChoreography(); setUpESBNodes(); } /** * A --> B <-- C --> D */ private void setUpChoreography() { chor = new Choreography(); DeployableServiceSpec specA = new DeployableServiceSpec(); specA.setName("serviceA"); specA.setRoles(Collections.singletonList("A")); specA.addDependency(new ServiceDependency("serviceB", "B")); DeployableService sA = new DeployableService(); sA.setSpec(specA); ServiceInstance siA1 = new ServiceInstance(); Proxification prox = new Proxification(); prox.setEasyEsbNodeAdminEndpoint(getAdminEndpoint(HOST1)); siA1.setProxification(prox); sA.addInstance(siA1); ServiceInstance siA2 = new ServiceInstance(); prox = new Proxification(); prox.setEasyEsbNodeAdminEndpoint(getAdminEndpoint(HOST1)); siA2.setProxification(prox); sA.addInstance(siA2); chor.addService(sA); DeployableServiceSpec specB = new DeployableServiceSpec(); specB.setName("serviceB"); specB.setRoles(Collections.singletonList("B")); DeployableService sB = new DeployableService(); sB.setSpec(specB); ServiceInstance siB = new ServiceInstance(); prox = new Proxification(); prox.setEasyEsbNodeAdminEndpoint(getAdminEndpoint(HOST2)); siB.setProxification(prox); sB.addInstance(siB); chor.addService(sB); DeployableServiceSpec specC = new DeployableServiceSpec(); specC.setName("serviceC"); specC.setRoles(Collections.singletonList("C")); specC.addDependency(new ServiceDependency("serviceB", "B")); specC.addDependency(new ServiceDependency("serviceD", "D")); DeployableService sC = new DeployableService(); sC.setSpec(specC); ServiceInstance siC = new ServiceInstance(); prox = new Proxification(); prox.setEasyEsbNodeAdminEndpoint(getAdminEndpoint(HOST3)); siC.setProxification(prox); sC.addInstance(siC); chor.addService(sC); DeployableServiceSpec specD = new DeployableServiceSpec(); specD.setName("serviceD"); specD.setRoles(Collections.singletonList("D")); DeployableService sD = new DeployableService(); sD.setSpec(specD); ServiceInstance siD = new ServiceInstance(); prox = new Proxification(); prox.setEasyEsbNodeAdminEndpoint(getAdminEndpoint(HOST4)); siD.setProxification(prox); sD.addInstance(siD); chor.addService(sD); } private String getAdminEndpoint(String host) { return "http://" + host + ":8180/services/adminExternalEndpoint"; } private void setUpESBNodes() { esbMock1 = mock(EasyESBNode.class); when(esbMock1.getAdminEndpoint()).thenReturn(getAdminEndpoint(HOST1)); ESBRegister.addEsbNode(esbMock1); esbMock2 = mock(EasyESBNode.class); when(esbMock2.getAdminEndpoint()).thenReturn(getAdminEndpoint(HOST2)); ESBRegister.addEsbNode(esbMock2); esbMock3 = mock(EasyESBNode.class); when(esbMock3.getAdminEndpoint()).thenReturn(getAdminEndpoint(HOST3)); ESBRegister.addEsbNode(esbMock3); esbMock4 = mock(EasyESBNode.class); when(esbMock4.getAdminEndpoint()).thenReturn(getAdminEndpoint(HOST4)); ESBRegister.addEsbNode(esbMock4); } @After public void clearESBRegister() { ESBRegister.clear(); } @Test public void test() throws TopologyNotConfigureException, EasyESBException { TopologyConfigurator topologyConfigurator = new TopologyConfigurator(chor); topologyConfigurator.configureTopology(); verify(esbMock1, times(2)).addNeighbour(esbMock2); verify(esbMock2, times(2)).addNeighbour(esbMock1); verify(esbMock2).addNeighbour(esbMock3); verify(esbMock3).addNeighbour(esbMock2); verify(esbMock3).addNeighbour(esbMock4); verify(esbMock4).addNeighbour(esbMock3); } }