/** * Copyright 2015 Otto (GmbH & Co KG) * * 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.ottogroup.bi.spqr.resman.node; import io.dropwizard.client.JerseyClientBuilder; import javax.ws.rs.client.Client; import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; import com.ottogroup.bi.spqr.node.message.NodeDeRegistration.NodeDeRegistrationResponse; import com.ottogroup.bi.spqr.node.message.NodeDeRegistration.NodeDeRegistrationState; import com.ottogroup.bi.spqr.node.message.NodeRegistration.NodeRegistrationResponse; import com.ottogroup.bi.spqr.node.message.NodeRegistration.NodeRegistrationState; /** * Test case for {@link SPQRNodeManager} * @author mnxfst * @since Apr 14, 2015 */ public class SPQRNodeManagerTest { /** * Test case for {@link SPQRNodeManager#registerNode(String, int, int)} being provided an empty protocol */ @Test public void testRegisterNode_withEmptyProtocol() { Assert.assertEquals("Invalid input", NodeRegistrationState.MISSING_PROTOCOL, new SPQRNodeManager(5, Mockito.mock(JerseyClientBuilder.class)).registerNode("", "localhost", 8080, 9090).getState()); } /** * Test case for {@link SPQRNodeManager#registerNode(String, int, int)} being provided an empty host */ @Test public void testRegisterNode_withEmptyRemoteHost() { Assert.assertEquals("Invalid input", NodeRegistrationState.MISSING_HOST, new SPQRNodeManager(5, Mockito.mock(JerseyClientBuilder.class)).registerNode("http", "", 8080, 9090).getState()); } /** * Test case for {@link SPQRNodeManager#registerNode(String, int, int)} being provided an invalid service port */ @Test public void testRegisterNode_withInvalidServicePort() { Assert.assertEquals("Invalid input", NodeRegistrationState.MISSING_SERVICE_PORT, new SPQRNodeManager(5, Mockito.mock(JerseyClientBuilder.class)).registerNode("http", "localhost", -1, 9090).getState()); } /** * Test case for {@link SPQRNodeManager#registerNode(String, int, int)} being provided an invalid admin port */ @Test public void testRegisterNode_withInvalidAdminPort() { Assert.assertEquals("Invalid input", NodeRegistrationState.MISSING_ADMIN_PORT, new SPQRNodeManager(5, Mockito.mock(JerseyClientBuilder.class)).registerNode("http", "localhost", 8080, -1).getState()); } /** * Test case for {@link SPQRNodeManager#registerNode(String, int, int)} where node id computation fails */ @Test public void testRegisterNode_withFailedNodeIdComputation() { Assert.assertEquals("Invalid input", NodeRegistrationState.NODE_ID_COMPUTATION_FAILED, new SPQRNodeManager(0, Mockito.mock(JerseyClientBuilder.class)).registerNode("http", "localhost", 8080, 9090).getState()); } /** * Test case for {@link SPQRNodeManager#registerNode(String, String, int, int)} being provided valid input */ @Test public void testRegisterNode_withValidInput() { Client mockClient = Mockito.mock(Client.class); JerseyClientBuilder mockClientBuilder = Mockito.mock(JerseyClientBuilder.class); Mockito.when(mockClientBuilder.build(Mockito.anyString())).thenReturn(mockClient); SPQRNodeManager manager = new SPQRNodeManager(5, mockClientBuilder); NodeRegistrationResponse response = manager.registerNode("http", "localhost", 8080, 9090); Assert.assertEquals("Node must be registered by now", NodeRegistrationState.OK, response.getState()); Assert.assertTrue("Node must be registered by now", manager.hasNode(response.getId())); Mockito.verify(mockClientBuilder).build(Mockito.anyString()); } /** * Test case for {@link SPQRNodeManager#deregisterNode(String)} being provided an empty string */ @Test public void testDeRegisterNode_withEmptyInput() { Assert.assertEquals("Invalid input", NodeDeRegistrationState.MISSING_NODE_ID, new SPQRNodeManager(5, Mockito.mock(JerseyClientBuilder.class)).deregisterNode("").getState()); } /** * Test case for {@link SPQRNodeManager#deregisterNode(String)} being provided an unknown node id */ @Test public void testDeRegisterNode_withUnknownNodeId() { Assert.assertEquals("Invalid input", NodeDeRegistrationState.NO_SUCH_NODE_ID, new SPQRNodeManager(5, Mockito.mock(JerseyClientBuilder.class)).deregisterNode("unknown-id").getState()); } /** * Test case for {@link SPQRNodeManager#deregisterNode(String)} being provided the id of an already * registered node */ @Test public void testDeRegisterNode_withExistingNodeId() { Client mockClient = Mockito.mock(Client.class); JerseyClientBuilder mockClientBuilder = Mockito.mock(JerseyClientBuilder.class); Mockito.when(mockClientBuilder.build(Mockito.anyString())).thenReturn(mockClient); SPQRNodeManager manager = new SPQRNodeManager(5, mockClientBuilder); NodeRegistrationResponse response = manager.registerNode("http", "localhost", 8080, 9090); Assert.assertEquals("Node must be registered by now", NodeRegistrationState.OK, response.getState()); Assert.assertTrue("Node must be registered by now", manager.hasNode(response.getId())); NodeDeRegistrationResponse deRegistrationResponse = manager.deregisterNode(response.getId()); Assert.assertEquals("De-Registration should be succesful", NodeDeRegistrationState.OK, deRegistrationResponse.getState()); Assert.assertEquals("Ids must be equal", response.getId(), deRegistrationResponse.getId()); deRegistrationResponse = manager.deregisterNode(response.getId()); Assert.assertEquals("Node already de-registered", NodeDeRegistrationState.NO_SUCH_NODE_ID, deRegistrationResponse.getState()); Assert.assertFalse("Node is not registered anymore", manager.hasNode(response.getId())); Mockito.verify(mockClientBuilder).build(Mockito.anyString()); } }