/* * Copyright (C) 2014-2016 LinkedIn Corp. All rights reserved. * * 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. */ package gobblin.util; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.testng.Assert; import org.testng.annotations.Test; import java.io.IOException; public class PortUtilsTest { @Test public void testReplaceAbsolutePortToken() throws Exception { PortUtils.PortLocator portLocator = Mockito.mock(PortUtils.PortLocator.class); Mockito.when(portLocator.specific(1025)).thenReturn(1025); PortUtils portUtils = new PortUtils(portLocator); String actual = portUtils.replacePortTokens("-Dvar1=${PORT_1025}"); Assert.assertEquals(actual, "-Dvar1=1025"); } @Test(expectedExceptions = RuntimeException.class) public void testFailIfCannotReplaceAbsolutePortToken() throws Exception { PortUtils.PortLocator portLocator = Mockito.mock(PortUtils.PortLocator.class); Mockito.when(portLocator.specific(1025)).thenThrow(new IOException()); PortUtils portUtils = new PortUtils(portLocator); portUtils.replacePortTokens("-Dvar1=${PORT_1025}"); } @Test public void testReplaceUnboundMinimumPortToken() throws Exception { int expectedPort = PortUtils.MINIMUM_PORT + 1; PortUtils.PortLocator portLocator = Mockito.mock(PortUtils.PortLocator.class); Mockito.when(portLocator.specific(PortUtils.MINIMUM_PORT)).thenThrow(new IOException()); Mockito.when(portLocator.specific(expectedPort)).thenReturn(expectedPort); PortUtils portUtils = new PortUtils(portLocator); String actual = portUtils.replacePortTokens("-Dvar1=${PORT_?1026}"); Assert.assertEquals(actual, "-Dvar1=1026"); } @Test public void testReplaceUnboundMaximumPortToken() throws Exception { int expectedPort = PortUtils.MINIMUM_PORT + 1; PortUtils.PortLocator portLocator = Mockito.mock(PortUtils.PortLocator.class); Mockito.when(portLocator.specific(PortUtils.MINIMUM_PORT)).thenThrow(new IOException()); Mockito.when(portLocator.specific(expectedPort)).thenReturn(expectedPort); PortUtils portUtils = new PortUtils(portLocator); String actual = portUtils.replacePortTokens("-Dvar1=${PORT_1025?}"); Assert.assertEquals(actual, "-Dvar1=1026"); } @Test public void testReplaceRandomPortToken() throws Exception { int expectedPort = PortUtils.MINIMUM_PORT + 1; PortUtils.PortLocator portLocator = Mockito.mock(PortUtils.PortLocator.class); Mockito.when(portLocator.random()).thenReturn(1027); PortUtils portUtils = new PortUtils(portLocator); String actual = portUtils.replacePortTokens("-Dvar1=${PORT_?}"); Assert.assertEquals(actual, "-Dvar1=1027"); } @Test public void testReplaceDuplicateTokensGetSamePort() throws Exception { final int expectedPort = PortUtils.MINIMUM_PORT + 1; PortUtils.PortLocator portLocator = Mockito.mock(PortUtils.PortLocator.class); Mockito.when(portLocator.random()).thenAnswer(new Answer<Integer>() { public int callCount; @Override public Integer answer(InvocationOnMock invocation) throws Throwable { if (this.callCount++ == 0) { return expectedPort; } return expectedPort + callCount++; } }); Mockito.when(portLocator.specific(expectedPort)).thenReturn(expectedPort); PortUtils portUtils = new PortUtils(portLocator); String actual = portUtils.replacePortTokens("-Dvar1=${PORT_?} -Dvar2=${PORT_?}"); Assert.assertEquals(actual, "-Dvar1=1026 -Dvar2=1026"); } @Test public void testReplacePortTokensKeepsTrackOfAssignedPorts() throws Exception { int expectedPort1 = PortUtils.MINIMUM_PORT + 1; int expectedPort2 = PortUtils.MINIMUM_PORT + 2; PortUtils.PortLocator portLocator = Mockito.mock(PortUtils.PortLocator.class); Mockito.when(portLocator.specific(PortUtils.MINIMUM_PORT)).thenThrow(new IOException()); Mockito.when(portLocator.specific(expectedPort1)).thenReturn(expectedPort1); Mockito.when(portLocator.specific(expectedPort2)).thenReturn(expectedPort2); PortUtils portUtils = new PortUtils(portLocator); String actual = portUtils.replacePortTokens("-Dvar1=${PORT_1026?} -Dvar2=${PORT_1025?}"); Assert.assertEquals(actual, "-Dvar1=1026 -Dvar2=1027"); } }