/**
* Copyright (C) 2015 Orange
* 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 com.francetelecom.clara.cloud.logicalmodel;
import com.francetelecom.clara.cloud.commons.BusinessException;
import com.francetelecom.clara.cloud.commons.MavenReference;
import com.francetelecom.clara.cloud.commons.ValidatorUtil;
import com.francetelecom.clara.cloud.logicalmodel.samplecatalog.*;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.net.MalformedURLException;
import java.util.*;
import static org.junit.Assert.fail;
@ContextConfiguration(locations = "application-context.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@DirtiesContext
public class LogicalModelTest {
@Autowired
SpringooLogicalModelCatalog utilSpringooIntegration;
@Autowired
DatasourcesLogicalModelCatalog datasourcesLogicalModelCatalog;
@Autowired
DianeLogicalModelCatalog dianeLogicalModelCatalog;
@Autowired
Map<String, SampleAppFactory> sampleAppFactoryMap;
@Autowired
InternalMomLogicalModelCatalog internalMomLogicalModelCatalog;
@Autowired
LogicalDeploymentRepository logicalDeploymentRepository;
LogicalDeployment deployment;
LogicalDeployment deployment_bis;
ProcessingNode node;
ProcessingNode adminNode;
ProcessingNode jeeProcessing;
LogicalRelationalService rds;
LogicalWebGUIService web;
LogicalWebGUIService webAdmin;
LogicalWebGUIService webGuiService;
LogicalSoapConsumer soapOut;
LogicalSoapService soapIn;
//external MOM (Momaas)
LogicalQueueSendService sendMessageService;
LogicalQueueReceiveService receiveMessageService;
// internal mom
LogicalMomService mom;
LogicalMomService mom2;
LogicalLogService log;
private static final Logger logger = LoggerFactory.getLogger(LogicalModelTest.class);
@Before
public void setUp() throws InvalidConfigServiceException {
this.deployment=new LogicalDeployment();
/**
* Functionnal cluster
*/
this.node = new JeeProcessing("node1", deployment);
MavenReference earNode1 = new MavenReference("test.group","test.appli","1.0");
earNode1.setExtension("ear");
this.node.setSoftwareReference(earNode1);
this.rds = new LogicalRelationalService("rds",deployment);
rds.setServiceName("jdbc/MyDataSource");
node.addLogicalServiceUsage(rds,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
this.web = new LogicalWebGUIService("web", deployment);
web.setContextRoot(new ContextRoot("/appliWeb"));
node.addLogicalServiceUsage(web,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
this.soapOut = new LogicalSoapConsumer("soapConsumer", deployment, "project", "service", 1);
this.soapOut.setJndiPrefix("soapConsumerJndiPrefix");
node.addLogicalServiceUsage(soapOut,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
MavenReference mvnWsdl = new MavenReference("groupId", "artifactId", "version", "extension", "classifier");
this.soapIn = new LogicalSoapService("soap", deployment, "myService", 1, 1, "/api", new Path("/service"), mvnWsdl, "desc");
soapIn.setInboundAuthenticationPolicy(new LogicalInboundAuthenticationPolicy());
soapIn.setOutboundAuthenticationPolicy(new LogicalOutboundAuthenticationPolicy());
node.addLogicalServiceUsage(soapIn,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
this.sendMessageService = new LogicalQueueSendService("SendMsgService", deployment, "GetMarket", "G1R0C0", "M4K", "ServerMomoo", "G7R0C0", 100, 1500, 1);
node.addLogicalServiceUsage(sendMessageService, LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
this.receiveMessageService = new LogicalQueueReceiveService("ReceiveMsgService", deployment, "ResponseGetMarket", "G1R0C0", 5000, 1500, 1);
node.addLogicalServiceUsage(receiveMessageService, LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
//internal mom
this.mom = new LogicalMomService("mom", deployment);
mom.setDestinationName("myQueue");
node.addLogicalServiceUsage(mom,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
this.log = new LogicalLogService("log", deployment);
log.setLogName("logApplicatif");
node.addLogicalServiceUsage(log,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
LogicalOnlineStorageService storage = new LogicalOnlineStorageService("storage", deployment);
storage.setServiceName("public-images");
storage.setStorageCapacityMb(10);
node.addLogicalServiceUsage(storage, LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
LogicalConfigService logicalConfigService = new LogicalConfigService("frontEnd", deployment, "#config1 \nkey=vakue\n");
node.addLogicalServiceUsage(logicalConfigService, LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
logicalConfigService.setKeyPrefix("config");
/**
* Admin cluster
*/
this.adminNode = new JeeProcessing("adminNode", deployment);
this.webAdmin = new LogicalWebGUIService("webAdmin", deployment);
webAdmin.setContextRoot(new ContextRoot("/appliAdmin"));
adminNode.addLogicalServiceUsage(webAdmin,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
adminNode.addLogicalServiceUsage(rds,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
this.mom2 = new LogicalMomService("mom2", deployment);
mom2.setDestinationName("myQueue2");
adminNode.addLogicalServiceUsage(mom2,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
node.addLogicalServiceUsage(mom2, LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
// Create new logicalDeployment to test addExecutionNode / updateExecutionNode / addLogicalService / updateLogicalService
this.deployment_bis = new LogicalDeployment();
createLogicalWebGui();
createLogicalExecutionNode();
}
/**
* Simply checks that the reference Springoo logical model for the March 14 demo can indeed be persisted in JPA
* @throws MalformedURLException
*/
@Test
@Transactional
public void testSpringooLogicalModel() throws MalformedURLException{
LogicalDeployment springooLogicalModel = utilSpringooIntegration.createLogicalModel("Springoo");
validateAndPersist(springooLogicalModel);
//Note: the loading from JPA and test equality against the graph in memory is covered paas-services using DAO instead.
}
/**
* Simply checks that the reference DataSourceProbe logical model for the March 14 demo can indeed be persisted in JPA
* @throws MalformedURLException
*/
@Test
@Transactional
public void testDataSourcesProbeLogicalModel() throws MalformedURLException{
datasourcesLogicalModelCatalog.setSimulateMavenReferenceResolution(true);
LogicalDeployment springooLogicalModel = datasourcesLogicalModelCatalog.createLogicalModel("ProjectionServiceTest", null);
validateAndPersist(springooLogicalModel);
//Note: the loading from JPA and test equality against the graph in memory is covered paas-services using DAO instead.
}
@Test
@Transactional
public void testBasicModelPersistence(){
validateAndPersist(deployment);
}
private void validateAndPersist(LogicalDeployment logicalDeployment) {
ValidatorUtil.validate(logicalDeployment);
logicalDeploymentRepository.save(logicalDeployment);
logicalDeploymentRepository.flush();
}
public void testListAccessors(){
Assert.assertEquals(2, this.deployment.listProcessingNodes().size());
Assert.assertEquals(11, this.deployment.listLogicalServices().size());
Assert.assertEquals(10, this.node.listLogicalServices().size());
Assert.assertEquals(3, this.adminNode.listLogicalServices().size());
Assert.assertEquals(2, this.rds.listDependentProcessingNodes().size());
Assert.assertEquals(1, this.webAdmin.listDependentProcessingNodes().size());
}
@Test
public void exportApplicationXml() throws JAXBException{
JAXBContext jc = JAXBContext.newInstance(LogicalDeployment.class);
Marshaller m = jc.createMarshaller();
m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE );
m.marshal( deployment, System.out );
}
@Test
@Transactional
public void testManyToManyPersistence(){
LogicalDeployment deployment;
ProcessingNode node;
ProcessingNode adminNode;
LogicalRelationalService rds;
LogicalWebGUIService web;
LogicalWebGUIService webAdmin;
LogicalSoapConsumer soapIn;
LogicalQueueSendService sendMessageService;
LogicalQueueReceiveService receiveMessageService;
LogicalMomService mom;
deployment=new LogicalDeployment();
/**
* Functionnal
*/
node = new JeeProcessing("nodeA", deployment);
rds = new LogicalRelationalService("myRds",deployment);
rds.setServiceName("jdbc/MyDataSource");
rds.setCapacityMo(2000);
rds.setRelationalReplicaNumber(1);
node.addLogicalServiceUsage(rds, LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
web = new LogicalWebGUIService("myWeb", deployment);
web.setContextRoot(new ContextRoot("/myWebCtx"));
node.addLogicalServiceUsage(web,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
this.soapOut = new LogicalSoapConsumer("soapConsumer", deployment, "project", "service", 1);
this.soapOut.setJndiPrefix("soapConsumerJndiPrefix1");
node.addLogicalServiceUsage(soapOut,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
soapIn = new LogicalSoapConsumer("soapC", deployment, "project", "service", 1);
soapIn.setJndiPrefix("soapConsumerJndiPrefix2");
node.addLogicalServiceUsage(soapIn,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
sendMessageService = new LogicalQueueSendService("SendMsgService", deployment, "GetMarket", "G1R0C0", "M4K", "ServerMomoo", "G7R0C0", 100, 1500, 1);
node.addLogicalServiceUsage(sendMessageService, LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
receiveMessageService = new LogicalQueueReceiveService("ReceiveMsgService", deployment, "ResponseGetMarket", "G1R0C0", 5000, 1500, 1);
node.addLogicalServiceUsage(receiveMessageService, LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
mom=new LogicalMomService("myMom", deployment);
mom.setDestinationName("myQueue");
node.addLogicalServiceUsage(mom,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
/**
* Admin cluster
*/
adminNode = new JeeProcessing("nodeAdmin", deployment);
webAdmin = new LogicalWebGUIService("webAdmin", deployment);
webAdmin.setContextRoot(new ContextRoot("/myWebAdmin"));
adminNode.addLogicalServiceUsage(webAdmin, LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
validateAndPersist(deployment);
}
@Test
@Transactional
public void testMergeModel() throws JAXBException{
LogicalDeployment deployment=new LogicalDeployment();
logicalDeploymentRepository.save(deployment);
ProcessingNode node=new JeeProcessing("node1", deployment);
LogicalRelationalService rds = new LogicalRelationalService("rds",deployment);
rds.setServiceName("jdbc/MyDataSource");
node.addLogicalServiceUsage(rds,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
logicalDeploymentRepository.save(deployment);
LogicalMomService mom = new LogicalMomService("mom", deployment);
mom.setDestinationName("myQueue");
node.addLogicalServiceUsage(mom,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
LogicalLogService log = new LogicalLogService("log", deployment);
log.setLogName("logApplicatif");
node.addLogicalServiceUsage(log,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
ProcessingNode adminNode = new JeeProcessing("adminNode", deployment);
LogicalWebGUIService webAdmin = new LogicalWebGUIService("webAdmin", deployment);
webAdmin.setContextRoot(new ContextRoot("/appliAdmin"));
adminNode.addLogicalServiceUsage(webAdmin,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
adminNode.addLogicalServiceUsage(rds,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
LogicalMomService mom2 = new LogicalMomService("mom2", deployment);
mom2.setDestinationName("myQueue2");
LogicalQueueSendService sendMessageService = new LogicalQueueSendService("SendMsgService", deployment, "GetMarket", "G1R0C0", "M4K", "ServerMomoo", "G7R0C0", 100, 1500, 1);
node.addLogicalServiceUsage(sendMessageService, LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
LogicalQueueReceiveService receiveMessageService = new LogicalQueueReceiveService("ReceiveMsgService", deployment, "ResponseGetMarket", "G1R0C0", 5000, 1500, 1);
node.addLogicalServiceUsage(receiveMessageService, LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
adminNode.addLogicalServiceUsage(mom2,LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
node.addLogicalServiceUsage(mom2, LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
logicalDeploymentRepository.save(deployment);
}
@Test
public void testAddLogicalService() {
this.deployment_bis.addLogicalService(webGuiService);
Assert.assertEquals(webGuiService, this.deployment_bis.listLogicalServices().toArray()[0]);
}
@Test
public void testRemoveLogicalServiceAssociated() {
LogicalDeployment dianeLd = dianeLogicalModelCatalog.createLogicalModel("dianeLD");
dianeLd.addLogicalService(webGuiService);
Assert.assertNotNull("logical deployment does not contained added service", dianeLd.listLogicalServices(webGuiService.getClass(), webGuiService.getLabel()));
ProcessingNode node = dianeLd.findProcessingNode("Diane_M2M_JEE");
node.addLogicalServiceUsage(webGuiService, LogicalServiceAccessTypeEnum.NOT_APPLICABLE);
boolean isAssociated = false;
for (LogicalNodeServiceAssociation assoc : node.listLogicalServicesAssociations()) {
isAssociated = assoc.areAssociated(node, webGuiService);
}
Assert.assertTrue("logical node / service association is not valid", isAssociated);
try {
dianeLd.removeLogicalService(webGuiService);
fail("service has been deleted whereas it is still associated");
} catch (BusinessException e) {
}
}
@Test
// @Ignore
public void testRemoveLogicalServiceNotAssciated() {
LogicalDeployment dianeLd = dianeLogicalModelCatalog.createLogicalModel("dianeLD");
dianeLd.addLogicalService(webGuiService);
Assert.assertNotNull("logical deployment does not contained added service", dianeLd.listLogicalServices(webGuiService.getClass(), webGuiService.getLabel()));
try {
dianeLd.removeLogicalService(webGuiService);
} catch (BusinessException e) {
fail("service can not be deleted. Service is still associated to a node");
}
Assert.assertEquals("logical deployment still content supposed deleted service", dianeLd.listLogicalServices(webGuiService.getClass(), webGuiService.getLabel()).size(), 0);
}
@Test
public void testAddLogicalExecutionNode() {
deployment_bis.addExecutionNode(jeeProcessing);
Assert.assertEquals(jeeProcessing, this.deployment_bis.listProcessingNodes().toArray()[0]);
}
@Test
public void testRemoveLogicalExecutionNodeNotAssociated() {
LogicalDeployment dianeLd = dianeLogicalModelCatalog.createLogicalModel("dianeLD");
dianeLd.addExecutionNode(jeeProcessing);
boolean existNode = false;
for (ProcessingNode node : dianeLd.listProcessingNodes()) {
if (node.equals(jeeProcessing)) {
existNode = true;
}
}
Assert.assertTrue("logical deployment does not contained added jee processing", existNode);
dianeLd.removeProcessingNode(jeeProcessing);
existNode = false;
for (ProcessingNode node : dianeLd.listProcessingNodes()) {
if (node.equals(jeeProcessing)) {
existNode = true;
}
}
Assert.assertFalse("jee processing has not been deleted", existNode);
}
@Test
public void testRemoveLogicalExecutionNodeAssociated() {
LogicalDeployment dianeLd = dianeLogicalModelCatalog.createLogicalModel("dianeLD");
ProcessingNode selectedNode = null;
for (ProcessingNode node : dianeLd.listProcessingNodes()) {
if (node.getLabel().equals("Diane_M2M_JEE")) {
selectedNode = node;
}
}
Assert.assertNotNull("logical deployment does not contained the needed jee processing", selectedNode);
dianeLd.removeProcessingNode(selectedNode);
selectedNode = null;
for (ProcessingNode node : dianeLd.listProcessingNodes()) {
if (node.getLabel().equals("Diane_M2M_JEE")) {
selectedNode = node;
}
}
Assert.assertNull("jee processing has not been deleted", selectedNode);
}
@Test
public void testDianeRemoveAssociation() {
LogicalDeployment logicalDeployment = dianeLogicalModelCatalog.populateLogicalDeployment(null);
dianeRemoveAssoication(logicalDeployment, "diane database");
}
@Test
@Transactional
public void testDianeRemoveAssociationWithPersistence() {
LogicalDeployment logicalDeployment = dianeLogicalModelCatalog.populateLogicalDeployment(null);
validateAndPersist(logicalDeployment);
logicalDeployment = logicalDeploymentRepository.findOne(logicalDeployment.getId());
logicalDeployment = dianeRemoveAssoication(logicalDeployment, "diane database");
validateAndPersist(logicalDeployment);
}
@Test
public void testRemoveAllProcessingNodes() {
LogicalDeployment logicalDeployment = dianeLogicalModelCatalog.populateLogicalDeployment(null);
logicalDeployment.removeAllProcessingNodes();
Assert.assertTrue("there should be no execution node remaining", logicalDeployment.listProcessingNodes().isEmpty());
}
@Test
public void testRemoveAllServices() {
LogicalDeployment logicalDeployment = dianeLogicalModelCatalog.populateLogicalDeployment(null);
logicalDeployment.removeAllProcessingNodes();
Assert.assertTrue("there should be no execution node remaining", logicalDeployment.listProcessingNodes().isEmpty());
try {
logicalDeployment.removeAllLogicalService();
} catch (BusinessException e) {
Assert.fail("fail on service delete");
}
Assert.assertTrue("there should be no service remaining", logicalDeployment.listLogicalServices().isEmpty());
}
@Test
public void testRemoveAllDianeDesign() {
removeAllDianeDesign(false);
}
@Test
@Transactional
public void testRemoveAllDianeDesignWithPersistence() {
removeAllDianeDesign(true);
}
/**
* Verify our sample models are valid as seen by {@link com.francetelecom.clara.cloud.logicalmodel.LogicalDeployment#checkOverallConsistency()}
* @throws BusinessException
*/
@Test
public void testOverallConsistencyOnValidModels() throws BusinessException {
for (Map.Entry<String, SampleAppFactory> entry : sampleAppFactoryMap.entrySet()) {
SampleAppFactory sampleAppFactory = entry.getValue();
String sampleFactoryName = entry.getKey();
LogicalDeployment logicalDeployment = null;
try {
logicalDeployment = sampleAppFactory.populateLogicalDeployment(null);
} catch (Exception e) {
logger.info("Ignoring sample app factory [" + sampleFactoryName + "] which is not self standing, caught:" + e);
}
if (logicalDeployment != null) {
logger.info("Testing validity of model [" + sampleFactoryName + "]");
logicalDeployment.checkOverallConsistency();
}
}
}
private void instanciateModelAndAssertViolationDetected(SampleAppFactory sampleAppFactory, LogicalModelModifier logicalModelModifier) throws BusinessException {
LogicalDeployment logicalDeployment = null;
try {
logicalDeployment = sampleAppFactory.populateLogicalDeployment(null);
} catch (Exception e) {
assert false: "unexpected invalid sampleAppFactories, caught:" + e;
}
if (logicalDeployment != null) {
if (logicalModelModifier != null) {
logicalModelModifier.applyModifications(logicalDeployment);
}
try {
logicalDeployment.checkOverallConsistency();
Assert.fail("Expected violation to javax.validation annotation to be detected");
} catch (BusinessException e) {
//Success
logger.info("Caught as expected: " + e);
}
}
}
/**
* Detects that dangling services are properly detected
*/
@Test
public void testOverallConsistencyDetectsDanglingServices() throws BusinessException {
//simply unassociate all services and check that an exception is thrown
instanciateModelAndAssertViolationDetected(utilSpringooIntegration, new LogicalModelModifier() {
@Override
public void applyModifications(LogicalDeployment ld) {
LogicalRelationalService rdb = ld.listLogicalServices(LogicalRelationalService.class).iterator().next();
for (ProcessingNode executionNode : rdb.listDependentProcessingNodes()) {
executionNode.removeAllLogicalServiceUsage(executionNode.listLogicalServicesAssociations());
}
}
});
}
/**
* Detects that violations to javax.validation constrainsts is indeed detected by {@link com.francetelecom.clara.cloud.logicalmodel.LogicalDeployment#checkOverallConsistency()}
*/
@Test
public void testOverallConsistencyOnJavaXValidationViolations() throws BusinessException {
instanciateModelAndAssertViolationDetected(utilSpringooIntegration, new LogicalModelModifier() {
@Override
public void applyModifications(LogicalDeployment ld) {
ld.listProcessingNodes().get(0).setMinMemoryMbHint(-1);
}
});
instanciateModelAndAssertViolationDetected(utilSpringooIntegration, new LogicalModelModifier() {
@Override
public void applyModifications(LogicalDeployment ld) {
ld.listLogicalServices(LogicalRelationalService.class).iterator().next().setCapacityMo(-1);
}
});
// Test that empty list of execution node throw an exception
instanciateModelAndAssertViolationDetected(utilSpringooIntegration, new LogicalModelModifier() {
@Override
public void applyModifications(LogicalDeployment ld) {
ld.removeAllProcessingNodes();
}
});
// Check dead letter queue has a name defined when enabled.
instanciateModelAndAssertViolationDetected(internalMomLogicalModelCatalog, new LogicalModelModifier() {
@Override
public void applyModifications(LogicalDeployment ld) {
LogicalMomService momService = ld.listLogicalServices(LogicalMomService.class).iterator().next();
momService.setHasDeadLetterQueue(true);
momService.setDeadLetterQueueName("");
}
});
// Check that we don't have duplicate JNDI queue names.
instanciateModelAndAssertViolationDetected(internalMomLogicalModelCatalog, new LogicalModelModifier() {
@Override
public void applyModifications(LogicalDeployment ld) {
Iterator<LogicalMomService> it = ld.listLogicalServices(LogicalMomService.class).iterator();
LogicalMomService momService1 = it.next();
LogicalMomService momService2 = it.next();
momService1.setDestinationName("duplicatedName");
momService2.setDestinationName("duplicatedName");
}
});
// Check that we don't have duplicate JNDI queue names.
instanciateModelAndAssertViolationDetected(internalMomLogicalModelCatalog, new LogicalModelModifier() {
@Override
public void applyModifications(LogicalDeployment ld) {
Iterator<LogicalMomService> it = ld.listLogicalServices(LogicalMomService.class).iterator();
LogicalMomService momService1 = it.next();
LogicalMomService momService2 = it.next();
momService1.setDestinationName("duplicatedName");
momService2.setDeadLetterQueueName("duplicatedName");
}
});
}
private void removeAllDianeDesign(boolean persist) {
LogicalDeployment ld = dianeLogicalModelCatalog.populateLogicalDeployment(null);
List<ProcessingNode> lenList = new ArrayList(ld.listProcessingNodes());
List<LogicalNodeServiceAssociation> lnsaList;
List<LogicalService> lsList;
for (ProcessingNode jeeProcessing : lenList) {
lnsaList = new ArrayList(jeeProcessing.listLogicalServicesAssociations());
lsList = new ArrayList(jeeProcessing.listLogicalServices());
for(LogicalNodeServiceAssociation association : lnsaList) {
for (LogicalService service : lsList) {
if (association.areAssociated(jeeProcessing, service)) {
ld.findProcessingNode(jeeProcessing.getLabel()).removeLogicalServiceUsage(association);
if (persist) {
validateAndPersist(ld);
ld = logicalDeploymentRepository.findOne(ld.getId());
}
}
}
}
}
try {
lsList = new ArrayList(ld.listLogicalServices());
for (LogicalService service : lsList) {
ld.removeLogicalService(service);
if (persist) {
validateAndPersist(ld);
ld = logicalDeploymentRepository.findOne(ld.getId());
}
}
lenList = new ArrayList(ld.listProcessingNodes());
for (ProcessingNode jeeProcessing : lenList) {
ld.removeProcessingNode(jeeProcessing);
if (persist) {
validateAndPersist(ld);
ld = logicalDeploymentRepository.findOne(ld.getId());
}
}
} catch (BusinessException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
Assert.assertEquals("logical deployment supposed to to contains no logical service", 0, ld.listLogicalServices().size());
Assert.assertEquals("logical deployment supposed to to contains no logical jee processing", 0, ld.listProcessingNodes().size());
}
//
// @Test
// @Transactional
// public void testRemoveAllDianeDesignWithPersistence() {
//
// }
private LogicalDeployment dianeRemoveAssoication(LogicalDeployment logicalDeployment, String serviceLabel) {
LogicalNodeServiceAssociation associationToRemove = getLogicalNodeServiceAssociationFromService(logicalDeployment, serviceLabel);
List<ProcessingNode> nodes = logicalDeployment.listProcessingNodes();
for (ProcessingNode node : nodes) {
if (associationToRemove != null) {
node.removeLogicalServiceUsage(associationToRemove);
}
}
// we test if we delete the good association
Assert.assertNull("LogicalNodeServiceAssociation has not been deleted in service", getLogicalNodeServiceAssociationFromService(logicalDeployment, serviceLabel));
Assert.assertNull("LogicalNodeServiceAssociation has not been deleted in jee processing", getLogicalNodeServiceAssociationFromJee(logicalDeployment));
return logicalDeployment;
}
private LogicalNodeServiceAssociation getLogicalNodeServiceAssociationFromService(LogicalDeployment logicalDeployment, String serviceLabel) {
Set<LogicalRelationalService> services = logicalDeployment.listLogicalServices(LogicalRelationalService.class, serviceLabel);
assert services.size() == 1;
LogicalRelationalService rds = services.iterator().next();
List<LogicalNodeServiceAssociation> rdsAssociations = rds.listLogicalServicesAssociations();
LogicalNodeServiceAssociation selectedAssociation = null;
for (LogicalNodeServiceAssociation association : rdsAssociations) {
if (association.getProcessingNode().getLabel().equals("Diane_M2M_JEE")) {
selectedAssociation = association;
}
}
return selectedAssociation;
}
private LogicalNodeServiceAssociation getLogicalNodeServiceAssociationFromJee(LogicalDeployment logicalDeployment) {
LogicalNodeServiceAssociation selectedAssociation = null;
Set<LogicalRelationalService> services = logicalDeployment.listLogicalServices(LogicalRelationalService.class, "diane database");
assert services.size() == 1;
LogicalRelationalService rds = services.iterator().next();
ProcessingNode jeeProcessing = logicalDeployment.findProcessingNode("Diane_M2M_JEE");
List<LogicalNodeServiceAssociation> associationsList = jeeProcessing.listLogicalServicesAssociations();
for (LogicalNodeServiceAssociation association : associationsList) {
if (association.getLogicalService().equals(rds)) {
selectedAssociation = association;
}
}
return selectedAssociation;
}
private void createLogicalExecutionNode() {
this.jeeProcessing = new JeeProcessing();
jeeProcessing.setLabel("my jee processing");
MavenReference mvn = new MavenReference("groupId", "artifactId", "version", "extension", "classifier");
jeeProcessing.setSoftwareReference(mvn);
}
private void createLogicalWebGui() {
this.webGuiService = new LogicalWebGUIService();
webGuiService.setLabel("My Test WebGui ");
webGuiService.setContextRoot(new ContextRoot("/springoo-jpa"));
webGuiService.setStateful(false);
webGuiService.setMaxNumberSessions(10);
}
}