/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.ow2.choreos.ee.nodes; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import org.junit.After; import org.junit.Test; import org.ow2.choreos.ee.config.CloudConfiguration; import org.ow2.choreos.ee.nodes.IdlePool; import org.ow2.choreos.ee.nodes.IdlePoolFactory; import org.ow2.choreos.ee.nodes.NPMFactory; import org.ow2.choreos.ee.nodes.NodeCreator; import org.ow2.choreos.ee.nodes.NodeCreatorFactory; import org.ow2.choreos.ee.nodes.NodeRegistry; import org.ow2.choreos.ee.nodes.cloudprovider.CloudProvider; import org.ow2.choreos.ee.nodes.cloudprovider.CloudProviderFactory; import org.ow2.choreos.nodes.NodeNotFoundException; import org.ow2.choreos.nodes.NodePoolManager; import org.ow2.choreos.nodes.datamodel.CloudNode; import org.ow2.choreos.nodes.datamodel.NodeSpec; public class NPMImplTest { private static final int POOL_INITIAL_SIZE = 1; private static final int POOL_THRESHOLD = -1; @Test public void shouldCreateNode() throws Exception { NodeRegistry reg = NodeRegistry.getInstance(); reg.clear(); CloudProvider cp = mock(CloudProvider.class); CloudProviderFactory.cloudProviderForTesting = cp; CloudProviderFactory.testing = true; NodeCreator creator = NodeCreatorMocks.getGoodMock(); NodeCreatorFactory.nodeCreatorForTesting = creator; NodeCreatorFactory.testing = true; IdlePool pool = IdlePoolFactory.getCleanInstance(CloudConfiguration.getCloudConfigurationInstance(), POOL_INITIAL_SIZE, POOL_THRESHOLD); NodePoolManager npm = NPMFactory.getNewNPMInstance(CloudConfiguration.DEFAULT, pool); CloudNode createdNode = npm.createNode(new NodeSpec()); assertTrue(isNodeOK(createdNode)); CloudNode fromRegNode = reg.getNode(createdNode.getId()); assertTrue(isNodeOK(fromRegNode)); assertEquals(fromRegNode, createdNode); } @Test(expected = NodeNotFoundException.class) public void shouldCreateAndDeleteNode() throws Exception { NodeRegistry reg = NodeRegistry.getInstance(); reg.clear(); CloudProvider cp = mock(CloudProvider.class); CloudProviderFactory.cloudProviderForTesting = cp; CloudProviderFactory.testing = true; NodeCreator creator = NodeCreatorMocks.getGoodMock(); NodeCreatorFactory.nodeCreatorForTesting = creator; NodeCreatorFactory.testing = true; IdlePool pool = IdlePoolFactory.getCleanInstance(CloudConfiguration.getCloudConfigurationInstance(), POOL_INITIAL_SIZE, POOL_THRESHOLD); NodePoolManager npm = NPMFactory.getNewNPMInstance(CloudConfiguration.DEFAULT, pool); CloudNode createdNode = npm.createNode(new NodeSpec()); assertTrue(isNodeOK(createdNode)); CloudNode fromRegNode = reg.getNode(createdNode.getId()); assertTrue(isNodeOK(fromRegNode)); assertEquals(fromRegNode, createdNode); npm.destroyNode(createdNode.getId()); fromRegNode = reg.getNode(createdNode.getId()); } @Test public void shouldAccessNodeFromDifferentNPMInstances() throws Exception { NodeRegistry reg = NodeRegistry.getInstance(); reg.clear(); CloudProvider cp = mock(CloudProvider.class); CloudProviderFactory.cloudProviderForTesting = cp; CloudProviderFactory.testing = true; NodeCreator creator1 = NodeCreatorMocks.getGoodMock(); NodeCreatorFactory.nodeCreatorForTesting = creator1; NodeCreatorFactory.testing = true; IdlePool pool1 = IdlePoolFactory.getCleanInstance(CloudConfiguration.getCloudConfigurationInstance(), POOL_INITIAL_SIZE, POOL_THRESHOLD); NodePoolManager npm1 = NPMFactory.getNewNPMInstance(CloudConfiguration.DEFAULT, pool1); CloudNode createdNode = npm1.createNode(new NodeSpec()); assertTrue(isNodeOK(createdNode)); NodeCreator creator2 = NodeCreatorMocks.getGoodMock(); NodeCreatorFactory.nodeCreatorForTesting = creator2; NodeCreatorFactory.testing = true; IdlePool pool2 = IdlePoolFactory.getCleanInstance(CloudConfiguration.getCloudConfigurationInstance(), POOL_INITIAL_SIZE, POOL_THRESHOLD); NodePoolManager npm2 = NPMFactory.getNewNPMInstance(CloudConfiguration.DEFAULT, pool2); CloudNode fromOtherNPM = npm2.getNode(createdNode.getId()); assertTrue(isNodeOK(fromOtherNPM)); assertEquals(fromOtherNPM, createdNode); } private boolean isNodeOK(CloudNode node) { return (node != null) && (node.getId() != null) && (!node.getId().isEmpty()); } @After public void tearDown() { NodeCreatorFactory.testing = false; CloudProviderFactory.testing = false; } }