package org.ow2.choreos.ee.context; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import java.util.Collections; import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.ow2.choreos.chors.datamodel.LegacyService; import org.ow2.choreos.chors.datamodel.LegacyServiceSpec; 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.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.ServiceType; import org.ow2.choreos.tests.ModelsForTest; import org.ow2.choreos.utils.LogConfigurator; public class LegacyContextCasterTest { private static final String BANK_URI = "http://future_bank.uk/ws"; private static final String BANK_NAME = "future_bank"; private static final String BANK_ROLE = "bank"; private static final String CENTRAL_BANK_URI = "http://central_bank.uk/ws"; private static final String CENTRAL_BANK_NAME = "central_bank"; private static final String CENTRAL_BANK_ROLE = "bank"; private ModelsForTest models; private LegacyServiceSpec bankSpec, centralBankSpec; private LegacyService bankService, centralBankService; private DeployableServiceSpec travelSpec; private DeployableService travelService; private ContextSender senderMock; @Before public void setUp() { LogConfigurator.configLog(); models = new ModelsForTest(ServiceType.SOAP, PackageType.COMMAND_LINE); travelSpec = models.getTravelSpec(); travelService = models.getTravelService(); createdBank(); configureMock(); createdCentralBank(); } private void createdBank() { bankSpec = new LegacyServiceSpec(); bankSpec.setNativeURIs(Collections.singletonList(BANK_URI)); bankSpec.setName(BANK_NAME); bankSpec.setRoles(Collections.singletonList(BANK_ROLE)); bankSpec.setServiceType(ServiceType.SOAP); bankService = new LegacyService(bankSpec); models.getChorSpec().addServiceSpec(bankSpec); models.getChoreography().addService(bankService); } private void createdCentralBank() { centralBankSpec = new LegacyServiceSpec(); centralBankSpec.setNativeURIs(Collections.singletonList(CENTRAL_BANK_URI)); centralBankSpec.setName(CENTRAL_BANK_NAME); centralBankSpec.setRoles(Collections.singletonList(CENTRAL_BANK_ROLE)); centralBankSpec.setServiceType(ServiceType.SOAP); centralBankService = new LegacyService(centralBankSpec); models.getChorSpec().addServiceSpec(centralBankSpec); models.getChoreography().addService(centralBankService); } private void createDependencyFromDeployableToLegacy() { travelSpec.setDependencies(Collections.singletonList(new ServiceDependency(BANK_NAME, BANK_ROLE))); } private void createDependencyFromLegacyToService() { String travelRole = travelSpec.getRoles().get(0); bankSpec.setDependencies(Collections.singletonList(new ServiceDependency(travelSpec.getName(), travelRole))); } private void createDependencyFromLegacyToLegacy() { bankSpec.setDependencies(Collections.singletonList(new ServiceDependency(CENTRAL_BANK_NAME, CENTRAL_BANK_ROLE))); } private void configureMock() { senderMock = mock(ContextSender.class); ContextSenderFactory.testing = true; ContextSenderFactory.senderForTesting = senderMock; } @Test public void deployableServiceShouldReceiveLegacyService() throws ContextNotSentException { createDependencyFromDeployableToLegacy(); ContextCaster caster = new ContextCaster(models.getChoreography()); caster.cast(); String travelUri = travelService.getUris().get(0); verify(senderMock).sendContext(travelUri, BANK_ROLE, BANK_NAME, bankService.getUris()); } @Test public void legacyServiceShouldReceiveDeployable() throws ContextNotSentException { createDependencyFromLegacyToService(); ContextCaster caster = new ContextCaster(models.getChoreography()); caster.cast(); String travelRole = travelSpec.getRoles().get(0); verify(senderMock).sendContext(BANK_URI, travelRole, travelSpec.getName(), travelService.getUris()); } @Test public void legacyServiceShouldReceiveLegacy() throws ContextNotSentException { createDependencyFromLegacyToLegacy(); ContextCaster caster = new ContextCaster(models.getChoreography()); caster.cast(); List<String> centralBankUris = Collections.singletonList(CENTRAL_BANK_URI); verify(senderMock).sendContext(BANK_URI, CENTRAL_BANK_ROLE, CENTRAL_BANK_NAME, centralBankUris); } @After public void tearDown() { ContextSenderFactory.testing = false; } }