/* * The Alluxio Open Foundation licenses this work under the Apache License, version 2.0 * (the "License"). You may not use this work except in compliance with the License, which is * available at www.apache.org/licenses/LICENSE-2.0 * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied, as more fully set forth in the License. * * See the NOTICE file distributed with this work for information regarding copyright ownership. */ package alluxio.util.network; import alluxio.AlluxioURI; import alluxio.Configuration; import alluxio.ConfigurationTestUtils; import alluxio.PropertyKey; import alluxio.util.network.NetworkAddressUtils.ServiceType; import alluxio.wire.WorkerNetAddress; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.net.InetSocketAddress; import java.net.UnknownHostException; /** * Tests for the {@link NetworkAddressUtils} class. */ public class NetworkAddressUtilsTest { @Before public void after() { ConfigurationTestUtils.resetConfiguration(); } /** * Tests the {@link NetworkAddressUtils#getConnectAddress(ServiceType)} method. */ @Test public void testGetConnectAddress() throws Exception { for (ServiceType service : ServiceType.values()) { getConnectAddress(service); } } /** * Tests the {@link NetworkAddressUtils#getConnectAddress(ServiceType)} method for specific * service under different conditions. * * @param service the service name used to connect */ private void getConnectAddress(ServiceType service) throws Exception { String localHostName = NetworkAddressUtils.getLocalHostName(); InetSocketAddress masterAddress; // all default masterAddress = NetworkAddressUtils.getConnectAddress(service); Assert.assertEquals(new InetSocketAddress(localHostName, service.getDefaultPort()), masterAddress); // bind host only Configuration.set(service.getHostNameKey(), ""); Configuration.set(service.getBindHostKey(), "bind.host"); masterAddress = NetworkAddressUtils.getConnectAddress(service); Assert .assertEquals(new InetSocketAddress("bind.host", service.getDefaultPort()), masterAddress); // connect host and bind host Configuration.set(service.getHostNameKey(), "connect.host"); masterAddress = NetworkAddressUtils.getConnectAddress(service); Assert.assertEquals(new InetSocketAddress("connect.host", service.getDefaultPort()), masterAddress); // wildcard connect host and bind host Configuration.set(service.getHostNameKey(), NetworkAddressUtils.WILDCARD_ADDRESS); masterAddress = NetworkAddressUtils.getConnectAddress(service); Assert .assertEquals(new InetSocketAddress("bind.host", service.getDefaultPort()), masterAddress); // wildcard connect host and wildcard bind host Configuration.set(service.getBindHostKey(), NetworkAddressUtils.WILDCARD_ADDRESS); masterAddress = NetworkAddressUtils.getConnectAddress(service); Assert.assertEquals(new InetSocketAddress(localHostName, service.getDefaultPort()), masterAddress); // connect host and wildcard bind host Configuration.set(service.getHostNameKey(), "connect.host"); masterAddress = NetworkAddressUtils.getConnectAddress(service); Assert.assertEquals(new InetSocketAddress("connect.host", service.getDefaultPort()), masterAddress); // connect host and wildcard bind host with port Configuration.set(service.getPortKey(), "10000"); masterAddress = NetworkAddressUtils.getConnectAddress(service); Assert.assertEquals(new InetSocketAddress("connect.host", 10000), masterAddress); // connect host and bind host with port Configuration.set(service.getBindHostKey(), "bind.host"); masterAddress = NetworkAddressUtils.getConnectAddress(service); Assert.assertEquals(new InetSocketAddress("connect.host", 10000), masterAddress); // empty connect host and bind host with port Configuration.set(service.getHostNameKey(), ""); masterAddress = NetworkAddressUtils.getConnectAddress(service); Assert.assertEquals(new InetSocketAddress("bind.host", 10000), masterAddress); // empty connect host and wildcard bind host with port Configuration.set(service.getBindHostKey(), NetworkAddressUtils.WILDCARD_ADDRESS); masterAddress = NetworkAddressUtils.getConnectAddress(service); Assert.assertEquals(new InetSocketAddress(localHostName, 10000), masterAddress); } /** * Tests the {@link NetworkAddressUtils#getBindAddress(ServiceType)} method. */ @Test public void testGetBindAddress() throws Exception { for (ServiceType service : ServiceType.values()) { getBindAddress(service); } } /** * Tests the {@link NetworkAddressUtils#getBindAddress(ServiceType)} method for specific * service under different conditions. * * @param service the service name used to connect */ private void getBindAddress(ServiceType service) throws Exception { String localHostName = NetworkAddressUtils.getLocalHostName(); InetSocketAddress workerAddress; // all default workerAddress = NetworkAddressUtils.getBindAddress(service); Assert.assertEquals( new InetSocketAddress(NetworkAddressUtils.WILDCARD_ADDRESS, service.getDefaultPort()), workerAddress); // bind host only Configuration.set(service.getBindHostKey(), "bind.host"); workerAddress = NetworkAddressUtils.getBindAddress(service); Assert .assertEquals(new InetSocketAddress("bind.host", service.getDefaultPort()), workerAddress); // connect host and bind host Configuration.set(service.getHostNameKey(), "connect.host"); workerAddress = NetworkAddressUtils.getBindAddress(service); Assert .assertEquals(new InetSocketAddress("bind.host", service.getDefaultPort()), workerAddress); // wildcard connect host and bind host Configuration.set(service.getHostNameKey(), NetworkAddressUtils.WILDCARD_ADDRESS); workerAddress = NetworkAddressUtils.getBindAddress(service); Assert .assertEquals(new InetSocketAddress("bind.host", service.getDefaultPort()), workerAddress); // wildcard connect host and wildcard bind host Configuration.set(service.getBindHostKey(), NetworkAddressUtils.WILDCARD_ADDRESS); workerAddress = NetworkAddressUtils.getBindAddress(service); Assert.assertEquals( new InetSocketAddress(NetworkAddressUtils.WILDCARD_ADDRESS, service.getDefaultPort()), workerAddress); // connect host and wildcard bind host Configuration.set(service.getHostNameKey(), "connect.host"); workerAddress = NetworkAddressUtils.getBindAddress(service); Assert.assertEquals( new InetSocketAddress(NetworkAddressUtils.WILDCARD_ADDRESS, service.getDefaultPort()), workerAddress); // connect host and wildcard bind host with port switch (service) { case MASTER_RPC: Configuration.set(PropertyKey.MASTER_RPC_PORT, "20000"); break; case MASTER_WEB: Configuration.set(PropertyKey.MASTER_WEB_PORT, "20000"); break; case PROXY_WEB: Configuration.set(PropertyKey.PROXY_WEB_PORT, "20000"); break; case WORKER_RPC: Configuration.set(PropertyKey.WORKER_RPC_PORT, "20000"); break; case WORKER_DATA: Configuration.set(PropertyKey.WORKER_DATA_PORT, "20000"); break; case WORKER_WEB: Configuration.set(PropertyKey.WORKER_WEB_PORT, "20000"); break; default: Assert.fail("Unrecognized service type: " + service.toString()); break; } workerAddress = NetworkAddressUtils.getBindAddress(service); Assert.assertEquals(new InetSocketAddress(NetworkAddressUtils.WILDCARD_ADDRESS, 20000), workerAddress); // connect host and bind host with port Configuration.set(service.getBindHostKey(), "bind.host"); workerAddress = NetworkAddressUtils.getBindAddress(service); Assert.assertEquals(new InetSocketAddress("bind.host", 20000), workerAddress); // empty connect host and bind host with port Configuration.set(service.getHostNameKey(), ""); workerAddress = NetworkAddressUtils.getBindAddress(service); Assert.assertEquals(new InetSocketAddress("bind.host", 20000), workerAddress); // empty connect host and wildcard bind host with port Configuration.set(service.getBindHostKey(), NetworkAddressUtils.WILDCARD_ADDRESS); workerAddress = NetworkAddressUtils.getBindAddress(service); Assert.assertEquals(new InetSocketAddress(NetworkAddressUtils.WILDCARD_ADDRESS, 20000), workerAddress); // empty connect host and empty bind host with port Configuration.set(service.getBindHostKey(), ""); workerAddress = NetworkAddressUtils.getBindAddress(service); Assert.assertEquals(new InetSocketAddress(localHostName, 20000), workerAddress); } /** * Tests the {@link NetworkAddressUtils#replaceHostName(AlluxioURI)} method. */ @Test public void replaceHostName() throws UnknownHostException { Assert.assertEquals(NetworkAddressUtils.replaceHostName(AlluxioURI.EMPTY_URI), AlluxioURI.EMPTY_URI); Assert.assertEquals(NetworkAddressUtils.replaceHostName(null), null); AlluxioURI[] paths = new AlluxioURI[] {new AlluxioURI("hdfs://localhost:9000/dir"), new AlluxioURI("hdfs://localhost/dir"), new AlluxioURI("hdfs://localhost/"), new AlluxioURI("hdfs://localhost"), new AlluxioURI("file:///dir"), new AlluxioURI("/dir"), new AlluxioURI("anythingElse")}; for (AlluxioURI path : paths) { Assert.assertEquals(NetworkAddressUtils.replaceHostName(path), path); } } /** * Tests the {@link NetworkAddressUtils#resolveHostName(String)} method. */ @Test public void resolveHostName() throws UnknownHostException { Assert.assertEquals(NetworkAddressUtils.resolveHostName(""), null); Assert.assertEquals(NetworkAddressUtils.resolveHostName(null), null); Assert.assertEquals(NetworkAddressUtils.resolveHostName("localhost"), "localhost"); } /** * Tests the {@link NetworkAddressUtils#getFqdnHost(InetSocketAddress)} and * {@link NetworkAddressUtils#getFqdnHost(WorkerNetAddress)} methods. */ @Test public void getFqdnHost() throws UnknownHostException { Assert.assertEquals(NetworkAddressUtils.getFqdnHost(new InetSocketAddress("localhost", 0)), "localhost"); Assert.assertEquals( NetworkAddressUtils.getFqdnHost(new WorkerNetAddress().setHost("localhost")), "localhost"); } @Test public void getConfiguredClientHostname() { Configuration.set(PropertyKey.USER_HOSTNAME, "clienthost"); Assert.assertEquals("clienthost", NetworkAddressUtils.getClientHostName()); } @Test public void getDefaultClientHostname() { Assert.assertEquals(NetworkAddressUtils.getLocalHostName(), NetworkAddressUtils.getClientHostName()); } }