package org.ow2.choreos.ee.context;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import java.util.Collections;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.ow2.choreos.ee.context.ContextCaster;
import org.ow2.choreos.ee.context.ContextNotSentException;
import org.ow2.choreos.ee.context.ContextSender;
import org.ow2.choreos.ee.context.ContextSenderFactory;
import org.ow2.choreos.nodes.datamodel.CloudNode;
import org.ow2.choreos.services.datamodel.DeployableService;
import org.ow2.choreos.services.datamodel.DeployableServiceSpec;
import org.ow2.choreos.services.datamodel.PackageType;
import org.ow2.choreos.services.datamodel.ServiceDependency;
import org.ow2.choreos.services.datamodel.ServiceInstance;
import org.ow2.choreos.services.datamodel.ServiceType;
import org.ow2.choreos.tests.ModelsForTest;
public class CDContextCasterTest {
private static final String CDS_NODE_IP = "192.168.56.100";
private static final String CD_AIRLINE_NAME = "AirlineCD";
private static final String CD_AIRLINE_ROLE = "CD-Airline";
private static final String CD_AIRLINE_ENDPOINT = "CD-airline";
private static final String CD_TRAVEL_NAME = "TravelAgencyCD";
private static final String CD_TRAVEL_ROLE = "CD-TravelAgency";
private static final String CD_TRAVEL_ENDPOINT = "CD-travel-agency";
private ModelsForTest models;
private DeployableServiceSpec travelSpec, airlineCDSpec, travelCDSpec;
private DeployableService travelService, travelCD, airlineCD;
private CloudNode cdsNode;
private ContextSender senderMock;
@Before
public void setUp() {
models = new ModelsForTest(ServiceType.SOAP, PackageType.COMMAND_LINE);
travelSpec = models.getTravelSpec();
travelService = models.getTravelService();
createCDsNode();
createdAirlineCD();
createdTravelCD();
createDependencies();
configureMock();
}
private void createCDsNode() {
cdsNode = new CloudNode();
cdsNode.setIp(CDS_NODE_IP);
}
private void createdAirlineCD() {
airlineCDSpec = new DeployableServiceSpec();
airlineCDSpec.setName(CD_AIRLINE_NAME);
airlineCDSpec.setRoles(Collections.singletonList(CD_AIRLINE_ROLE));
airlineCDSpec.setPackageUri("http://blabla");
airlineCDSpec.setPackageType(PackageType.EASY_ESB);
airlineCDSpec.setServiceType(ServiceType.COORDEL);
airlineCDSpec.setEndpointName(CD_AIRLINE_ENDPOINT);
airlineCD = new DeployableService(airlineCDSpec);
airlineCD.setSelectedNodes(Collections.singleton(cdsNode));
airlineCD.setUUID("77");
ServiceInstance airlineCDInstance = new ServiceInstance();
airlineCDInstance.setInstanceId("771");
airlineCDInstance.setNode(cdsNode);
airlineCDInstance.setServiceSpec(airlineCDSpec);
airlineCD.addInstance(airlineCDInstance);
models.getChorSpec().addServiceSpec(airlineCDSpec);
models.getChoreography().addService(airlineCD);
}
private void createdTravelCD() {
travelCDSpec = new DeployableServiceSpec();
travelCDSpec.setName(CD_TRAVEL_NAME);
travelCDSpec.setRoles(Collections.singletonList(CD_TRAVEL_ROLE));
travelCDSpec.setPackageUri("http://blabla");
travelCDSpec.setPackageType(PackageType.EASY_ESB);
travelCDSpec.setServiceType(ServiceType.COORDEL);
travelCDSpec.setEndpointName(CD_TRAVEL_ENDPOINT);
travelCD = new DeployableService(travelCDSpec);
travelCD.setSelectedNodes(Collections.singleton(cdsNode));
travelCD.setUUID("99");
ServiceInstance travelCDInstance = new ServiceInstance();
travelCDInstance.setInstanceId("991");
travelCDInstance.setNode(cdsNode);
travelCDInstance.setServiceSpec(travelCDSpec);
travelCD.addInstance(travelCDInstance);
models.getChorSpec().addServiceSpec(travelCDSpec);
models.getChoreography().addService(travelCD);
}
private void createDependencies() {
// remove dependency travel --> airline and add dependency travel --> airline-cd
travelSpec.setDependencies(Collections.singletonList(new ServiceDependency(CD_AIRLINE_NAME, CD_AIRLINE_ROLE)));
// add dependencies travel-cd <--> airline-cd
airlineCDSpec.addDependency(new ServiceDependency(CD_TRAVEL_NAME, CD_TRAVEL_ROLE));
travelCDSpec.addDependency(new ServiceDependency(CD_AIRLINE_NAME, CD_AIRLINE_ROLE));
// obs: airline-cd --> airline is a implicit dependency (must be configure on config.xml)
}
private ContextSender configureMock() {
senderMock = mock(ContextSender.class);
ContextSenderFactory.testing = true;
ContextSenderFactory.senderForTesting = senderMock;
return senderMock;
}
@Test
public void shouldCastCDsContext() throws ContextNotSentException {
ContextCaster caster = new ContextCaster(models.getChoreography());
caster.cast();
String travelUri = travelService.getUris().get(0);
String cdAirlineUri = airlineCD.getUris().get(0);
String cdTravelUri = travelCD.getUris().get(0);
verify(senderMock).sendContext(travelUri, CD_AIRLINE_ROLE, CD_AIRLINE_NAME, airlineCD.getUris());
verify(senderMock).sendContext(cdAirlineUri, CD_TRAVEL_ROLE, CD_TRAVEL_NAME, travelCD.getUris());
verify(senderMock).sendContext(cdTravelUri, CD_AIRLINE_ROLE, CD_AIRLINE_NAME, airlineCD.getUris());
}
@After
public void tearDown() {
ContextSenderFactory.testing = false;
}
}