/* * ProActive Parallel Suite(TM): * The Open Source library for parallel and distributed * Workflows & Scheduling, Orchestration, Cloud Automation * and Big Data Analysis on Enterprise Grids & Clouds. * * Copyright (c) 2007 - 2017 ActiveEon * Contact: contact@activeeon.com * * This library is free software: you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation: version 3 of * the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * If needed, contact us to obtain a release under GPL Version 2 or 3 * or a different license than the AGPL. */ package org.ow2.proactive.resourcemanager.rmnode; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.when; import java.io.IOException; import java.util.concurrent.TimeUnit; import org.apache.commons.lang3.tuple.Pair; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.objectweb.proactive.core.node.Node; import org.objectweb.proactive.core.node.NodeException; import org.ow2.proactive.jmx.naming.JMXTransportProtocol; import org.ow2.proactive.resourcemanager.authentication.Client; import org.ow2.proactive.resourcemanager.common.NodeState; /** * @author ActiveEon Team * @since 18/01/17 */ public class RMNodeImplTest { private Client client; private RMNodeImpl rmNode; // Mocked ProActive node used by rmNode private Node node; @Before public void setUp() { client = Mockito.mock(Client.class); Pair<RMNodeImpl, Node> pair = RMNodeHelper.basicWithMockedInternals(); rmNode = pair.getLeft(); node = pair.getRight(); } @Test public void testClean() throws IOException, NodeException { rmNode.clean(); Mockito.verify(node).killAllActiveObjects(); } @Test public void testCompareToEquals() throws Exception { RMNodeImpl rmNode2 = RMNodeHelper.basicWithMockedInternals().getLeft(); assertThat(rmNode.compareTo(rmNode2)).isEqualTo(0); assertThat(rmNode.compareTo(rmNode2)).isEqualTo(rmNode.getNodeURL().compareTo(rmNode2.getNodeURL())); } @Test public void testCompareToDifferentVNodeNames() throws Exception { RMNodeImpl rmNode2 = RMNodeHelper.basicWithMockedInternals().getLeft(); rmNode2 = Mockito.spy(rmNode2); when(rmNode2.getVNodeName()).thenReturn("vNodeName2"); assertThat(rmNode.getVNodeName()).isNotNull(); assertThat(rmNode2.getVNodeName()).isNotNull(); int nodesComparison = rmNode.compareTo(rmNode2); assertThat(nodesComparison).isNotEqualTo(0); assertThat(nodesComparison).isEqualTo(rmNode.getVNodeName().compareTo(rmNode2.getVNodeName())); } @Test public void testCompareToDifferentHostNames() throws Exception { RMNodeImpl rmNode2 = RMNodeHelper.basicWithMockedInternals("nodeSourceName", "name", "hostName2", "nodeInformationUrl", "proactiveRuntimeUrl") .getLeft(); int nodesComparison = rmNode.compareTo(rmNode2); assertThat(nodesComparison).isNotEqualTo(0); assertThat(nodesComparison).isEqualTo(rmNode.getHostName().compareTo(rmNode2.getHostName())); } @Test public void testCompareToDifferentDescriptorVMNames() throws Exception { RMNodeImpl rmNode2 = RMNodeHelper.basicWithMockedInternals("nodeSourceName", "name", "hostName", "nodeInformationUrl", "proactiveRuntimeUrl2") .getLeft(); int nodesComparison = rmNode.compareTo(rmNode2); assertThat(nodesComparison).isNotEqualTo(0); assertThat(nodesComparison).isEqualTo(rmNode.getDescriptorVMName().compareTo(rmNode2.getDescriptorVMName())); } @Test public void testConstructor() { assertThat(rmNode.isProtectedByToken()).isFalse(); assertThat(rmNode.getScriptStatus()).isEmpty(); assertThat(rmNode.getState()).isEqualTo(NodeState.FREE); } @Test public void testGetAdminPermission() throws Exception { assertThat(rmNode.getAdminPermission()).isNotSameAs(rmNode.getAdminPermission()); } @Test public void testGetNodeInfo() { assertThat(rmNode.getNodeInfo()).contains("State: "); assertThat(rmNode.getNodeInfo()).contains("Locked: false"); rmNode.lock(rmNode.getProvider()); assertThat(rmNode.getNodeInfo()).contains("Locked: true "); } @Test public void testIsBusyFalse() { rmNode.setState(NodeState.TO_BE_REMOVED); assertThat(rmNode.isBusy()).isFalse(); } @Test public void testIsBusyTrue() { rmNode.setState(NodeState.BUSY); assertThat(rmNode.isBusy()).isTrue(); } @Test public void testIsConfiguringFalse() { rmNode.setState(NodeState.BUSY); assertThat(rmNode.isConfiguring()).isFalse(); } @Test public void testIsConfiguringTrue() { rmNode.setState(NodeState.CONFIGURING); assertThat(rmNode.isConfiguring()).isTrue(); } @Test public void testIsDeploying() { assertThat(rmNode.isDeploying()).isFalse(); } @Test public void testIsDownFalse() { rmNode.setState(NodeState.DEPLOYING); assertThat(rmNode.isDown()).isFalse(); } @Test public void testIsDownTrue() { rmNode.setState(NodeState.DOWN); assertThat(rmNode.isDown()).isTrue(); } @Test public void testIsFreeFalse() { rmNode.setState(NodeState.DOWN); assertThat(rmNode.isFree()).isFalse(); } @Test public void testIsFreeTrue() { rmNode.setState(NodeState.FREE); assertThat(rmNode.isFree()).isTrue(); } @Test public void testIsToRemoveFalse() { rmNode.setState(NodeState.LOST); assertThat(rmNode.isToRemove()).isFalse(); } @Test public void testIsToRemoveTrue() { rmNode.setState(NodeState.TO_BE_REMOVED); assertThat(rmNode.isToRemove()).isTrue(); } @Test public void testLock() { assertThat(rmNode.isLocked()).isFalse(); assertThat(rmNode.getLockedBy()).isNull(); assertThat(rmNode.getLockTime()).isEqualTo(-1); rmNode.lock(rmNode.getProvider()); assertThat(rmNode.isLocked()).isTrue(); assertThat(rmNode.getLockedBy()).isEqualTo(rmNode.getProvider()); assertThat(rmNode.getLockTime()).isGreaterThan(1L); } @Test public void testSetBusy() throws InterruptedException { long stateChangeTime = rmNode.getStateChangeTime(); assertThat(rmNode.getOwner()).isNotEqualTo(client); assertThat(rmNode.isBusy()).isFalse(); assertThat(rmNode.getState()).isNotEqualTo(NodeState.BUSY); TimeUnit.MILLISECONDS.sleep(1); rmNode.setBusy(client); assertThat(rmNode.getOwner()).isEqualTo(client); assertThat(rmNode.isBusy()).isTrue(); assertThat(rmNode.getState()).isEqualTo(NodeState.BUSY); assertThat(rmNode.getStateChangeTime()).isGreaterThan(stateChangeTime); } @Test public void testSetConfiguring() throws InterruptedException { Client owner = rmNode.getOwner(); long stateChangeTime = rmNode.getStateChangeTime(); assertThat(owner).isNotEqualTo(client); assertThat(rmNode.isConfiguring()).isFalse(); assertThat(rmNode.getState()).isNotEqualTo(NodeState.CONFIGURING); assertThat(rmNode.getState()).isNotEqualTo(NodeState.DOWN); TimeUnit.MILLISECONDS.sleep(1); rmNode.setConfiguring(client); // Not sure to understand why Client instance is passed to setConfiguring since // the internal value is not updated based on the parameter. However, the // behaviour has not changed since years, so there might be some reasons (or not) assertThat(owner).isEqualTo(owner); assertThat(rmNode.isConfiguring()).isTrue(); assertThat(rmNode.getState()).isEqualTo(NodeState.CONFIGURING); assertThat(rmNode.getStateChangeTime()).isGreaterThan(stateChangeTime); } @Test public void testSetConfiguringRmNodeIniatiallyDown() { rmNode.setDown(); Client owner = rmNode.getOwner(); long stateChangeTime = rmNode.getStateChangeTime(); assertThat(owner).isNotEqualTo(client); assertThat(rmNode.isConfiguring()).isFalse(); assertThat(rmNode.getState()).isEqualTo(NodeState.DOWN); rmNode.setConfiguring(client); assertThat(owner).isEqualTo(owner); assertThat(rmNode.isConfiguring()).isFalse(); assertThat(rmNode.getState()).isEqualTo(NodeState.DOWN); assertThat(rmNode.getStateChangeTime()).isEqualTo(stateChangeTime); } @Test public void testSetDown() throws InterruptedException { long stateChangeTime = rmNode.getStateChangeTime(); assertThat(rmNode.isDown()).isFalse(); assertThat(rmNode.getState()).isNotEqualTo(NodeState.DOWN); TimeUnit.MILLISECONDS.sleep(1); rmNode.setDown(); assertThat(rmNode.isDown()).isTrue(); assertThat(rmNode.getState()).isEqualTo(NodeState.DOWN); assertThat(rmNode.getStateChangeTime()).isGreaterThan(stateChangeTime); } @Test public void testSetFree() throws InterruptedException { long stateChangeTime = rmNode.getStateChangeTime(); rmNode.setState(NodeState.DOWN); assertThat(rmNode.isFree()).isFalse(); assertThat(rmNode.getState()).isNotEqualTo(NodeState.FREE); TimeUnit.MILLISECONDS.sleep(1); rmNode.setFree(); assertThat(rmNode.isFree()).isTrue(); assertThat(rmNode.getState()).isEqualTo(NodeState.FREE); assertThat(rmNode.getStateChangeTime()).isGreaterThan(stateChangeTime); } @Test public void testSetJMXUrlRmiProtocol() throws Exception { assertThat(rmNode.getJMXUrl(JMXTransportProtocol.RMI)).isNull(); rmNode.setJMXUrl(JMXTransportProtocol.RMI, "aeiouy"); assertThat(rmNode.getJMXUrl(JMXTransportProtocol.RMI)).isEqualTo("aeiouy"); rmNode.setJMXUrl(JMXTransportProtocol.RMI, "ho ho ho"); assertThat(rmNode.getJMXUrl(JMXTransportProtocol.RMI)).isEqualTo("ho ho ho"); assertThat(rmNode.getJMXUrl(JMXTransportProtocol.RO)).isNull(); } @Test public void testSetJMXUrlRoProtocol() throws Exception { assertThat(rmNode.getJMXUrl(JMXTransportProtocol.RO)).isNull(); rmNode.setJMXUrl(JMXTransportProtocol.RO, "aeiouy"); assertThat(rmNode.getJMXUrl(JMXTransportProtocol.RO)).isEqualTo("aeiouy"); rmNode.setJMXUrl(JMXTransportProtocol.RO, "ho ho ho"); assertThat(rmNode.getJMXUrl(JMXTransportProtocol.RO)).isEqualTo("ho ho ho"); assertThat(rmNode.getJMXUrl(JMXTransportProtocol.RMI)).isNull(); } @Test public void testSetProtectedByToken() throws Exception { assertThat(rmNode.isProtectedByToken()).isFalse(); rmNode.setProtectedByToken(true); assertThat(rmNode.isProtectedByToken()).isTrue(); rmNode.setProtectedByToken(false); assertThat(rmNode.isProtectedByToken()).isFalse(); } @Test public void testSetState() { assertThat(rmNode.getState()).isNotEqualTo(NodeState.DOWN); rmNode.setState(NodeState.DOWN); assertThat(rmNode.getState()).isEqualTo(NodeState.DOWN); } @Test public void testSetStateIdempotent() { assertThat(rmNode.getState()).isEqualTo(NodeState.FREE); rmNode.setState(NodeState.FREE); assertThat(rmNode.getState()).isEqualTo(NodeState.FREE); } @Test public void testSetToRemove() throws InterruptedException { long stateChangeTime = rmNode.getStateChangeTime(); assertThat(rmNode.isToRemove()).isFalse(); assertThat(rmNode.getState()).isNotEqualTo(NodeState.TO_BE_REMOVED); TimeUnit.MILLISECONDS.sleep(1); rmNode.setToRemove(); assertThat(rmNode.isToRemove()).isTrue(); assertThat(rmNode.getState()).isEqualTo(NodeState.TO_BE_REMOVED); assertThat(rmNode.getStateChangeTime()).isGreaterThan(stateChangeTime); } @Test public void testUnlock() { rmNode.lock(rmNode.getProvider()); rmNode.unlock(rmNode.getProvider()); assertThat(rmNode.isLocked()).isFalse(); assertThat(rmNode.getLockedBy()).isNull(); assertThat(rmNode.getLockTime()).isEqualTo(-1L); } }