package org.ow2.choreos.ee; import static org.junit.Assert.*; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.junit.Before; import org.junit.Test; import org.ow2.choreos.chors.datamodel.Choreography; import org.ow2.choreos.chors.datamodel.ChoreographySpec; import org.ow2.choreos.ee.ChorDiffer; import org.ow2.choreos.ee.ChorRegistry; 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.ServiceType; import org.ow2.choreos.tests.ModelsForTest; public class ChorDifferTest { private static final String NEW_SPEC_NAME = "Airline2"; private static final int NEW_NUMBER_OF_INSTANCES = 2; private Choreography chor; private ChoreographySpec newChorSpec; @Before public void setUp() throws Exception { ModelsForTest models = new ModelsForTest(ServiceType.SOAP, PackageType.COMMAND_LINE); ModelsForTest models2 = new ModelsForTest(ServiceType.SOAP, PackageType.COMMAND_LINE); chor = models.getChoreography(); newChorSpec = models2.getChorSpec(); includesOneMoreSpec(); changesOneSpec(); ChorRegistry reg = ChorRegistry.getInstance(); reg.clean(); reg.addChoreography(chor); reg.getContext(chor.getId()).setRequestedChoreographySpec(newChorSpec); } private void changesOneSpec() { DeployableServiceSpec spec = (DeployableServiceSpec) newChorSpec.getServiceSpecByName(ModelsForTest.AIRLINE); spec.setNumberOfInstances(NEW_NUMBER_OF_INSTANCES); } private void includesOneMoreSpec() { DeployableServiceSpec spec = (DeployableServiceSpec) chor.getChoreographySpec().getServiceSpecByName(ModelsForTest.AIRLINE); DeployableServiceSpec newSpec = new DeployableServiceSpec(); newSpec.setName(NEW_SPEC_NAME); newSpec.setEndpointName(spec.getEndpointName()); newSpec.setServiceType(spec.getServiceType()); newSpec.setPackageType(spec.getPackageType()); newSpec.setNumberOfInstances(spec.getNumberOfInstances()); newSpec.setPackageUri(spec.getPackageUri()); newSpec.setPort(spec.getPort()); newChorSpec.addServiceSpec(newSpec); } @Test public void test() { ChorDiffer differ = new ChorDiffer(chor); checkNotModifiedSpec(differ); checkNewSpec(differ); checkModifiedSpec(differ); } private void checkNotModifiedSpec(ChorDiffer differ) { List<DeployableService> notModifiedServices = differ.getNotModifiedServices(); assertEquals(1, notModifiedServices.size()); assertEquals(ModelsForTest.TRAVEL_AGENCY, notModifiedServices.get(0).getSpec().getName()); } private void checkNewSpec(ChorDiffer differ) { List<DeployableServiceSpec> newServices = differ.getNewServiceSpecs(); assertEquals(1, newServices.size()); assertEquals(NEW_SPEC_NAME, newServices.get(0).getName()); } private void checkModifiedSpec(ChorDiffer differ) { Map<DeployableService, DeployableServiceSpec> servicesToUpdate = differ.getServicesToUpdate(); assertEquals(1, servicesToUpdate.size()); DeployableService retrievedService = null; DeployableServiceSpec retrievedSpec = null; for (Entry<DeployableService, DeployableServiceSpec> entry: servicesToUpdate.entrySet()) { retrievedService = entry.getKey(); retrievedSpec = entry.getValue(); } DeployableService airlineService = chor.getDeployableServiceBySpecName(ModelsForTest.AIRLINE); assertEquals(retrievedService, airlineService); assertEquals(NEW_NUMBER_OF_INSTANCES, retrievedSpec.getNumberOfInstances()); } }