| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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 org.apache.hadoop.net; |
| |
| import junit.framework.TestCase; |
| |
| import java.net.UnknownHostException; |
| import java.net.InetAddress; |
| |
| import org.apache.commons.logging.Log; |
| import org.apache.commons.logging.LogFactory; |
| |
| import javax.naming.NameNotFoundException; |
| |
| /** |
| * |
| */ |
| public class TestDNS extends TestCase { |
| |
| private static final Log LOG = LogFactory.getLog(TestDNS.class); |
| private static final String DEFAULT = "default"; |
| |
| /** |
| * Constructs a test case with the given name. |
| * |
| * @param name test name |
| */ |
| public TestDNS(String name) { |
| super(name); |
| } |
| |
| /** |
| * Test that asking for the default hostname works |
| * @throws Exception if hostname lookups fail */ |
| public void testGetLocalHost() throws Exception { |
| String hostname = DNS.getDefaultHost(DEFAULT); |
| assertNotNull(hostname); |
| } |
| |
| /** |
| * Test that repeated calls to getting the local host are fairly fast, and |
| * hence that caching is being used |
| * @throws Exception if hostname lookups fail |
| */ |
| public void testGetLocalHostIsFast() throws Exception { |
| String hostname = DNS.getDefaultHost(DEFAULT); |
| assertNotNull(hostname); |
| long t1 = System.currentTimeMillis(); |
| String hostname2 = DNS.getDefaultHost(DEFAULT); |
| long t2 = System.currentTimeMillis(); |
| String hostname3 = DNS.getDefaultHost(DEFAULT); |
| long t3 = System.currentTimeMillis(); |
| assertEquals(hostname3, hostname2); |
| assertEquals(hostname2, hostname); |
| long interval2 = t3 - t2; |
| assertTrue( |
| "It is taking to long to determine the local host -caching is not working", |
| interval2 < 20000); |
| } |
| |
| /** |
| * Test that our local IP address is not null |
| * @throws Exception if something went wrong |
| */ |
| public void testLocalHostHasAnAddress() throws Exception { |
| assertNotNull(getLocalIPAddr()); |
| } |
| |
| private InetAddress getLocalIPAddr() throws UnknownHostException { |
| String hostname = DNS.getDefaultHost(DEFAULT); |
| InetAddress localhost = InetAddress.getByName(hostname); |
| return localhost; |
| } |
| |
| /** |
| * Test that passing a null pointer is as the interface |
| * fails with a NullPointerException |
| * @throws Exception if something went wrong |
| */ |
| public void testNullInterface() throws Exception { |
| try { |
| String host = DNS.getDefaultHost(null); |
| fail("Expected a NullPointerException, got " + host); |
| } catch (NullPointerException expected) { |
| //this is expected |
| } |
| } |
| |
| /** |
| * Get the IP addresses of an unknown interface, expect to get something |
| * back |
| * @throws Exception if something went wrong |
| */ |
| public void testIPsOfUnknownInterface() throws Exception { |
| String[] ips = DNS.getIPs("name-of-an-unknown-interface"); |
| assertNotNull(ips); |
| assertTrue(ips.length > 0); |
| } |
| |
| /** |
| * TestCase: get our local address and reverse look it up |
| * @throws Exception if that fails |
| */ |
| public void testRDNS() throws Exception { |
| InetAddress localhost = getLocalIPAddr(); |
| try { |
| String s = DNS.reverseDns(localhost, null); |
| LOG.info("Local revers DNS hostname is " + s); |
| } catch (NameNotFoundException e) { |
| if (!localhost.isLinkLocalAddress() || localhost.isLoopbackAddress()) { |
| //these addresses probably won't work with rDNS anyway, unless someone |
| //has unusual entries in their DNS server mapping 1.0.0.127 to localhost |
| LOG.info("Reverse DNS failing as due to incomplete networking", e); |
| LOG.info("Address is " + localhost |
| + " Loopback=" + localhost.isLoopbackAddress() |
| + " Linklocal=" + localhost.isLinkLocalAddress()); |
| } |
| |
| } |
| } |
| |
| /** |
| * Test that the name "localhost" resolves to something. |
| * |
| * If this fails, your machine's network is in a mess, go edit /etc/hosts |
| * @throws Exception for any problems |
| */ |
| public void testLocalhostResolves() throws Exception { |
| InetAddress localhost = InetAddress.getByName("localhost"); |
| assertNotNull("localhost is null", localhost); |
| LOG.info("Localhost IPAddr is " + localhost.toString()); |
| } |
| } |