/* A class to test my java.net.InetAddress implementation */

import java.net.*;

public class TestNameLookups extends Object
{
public static void
main(String[] argv) throws UnknownHostException
{
  InetAddress addr;

  System.out.println("Started address lookup test");

  /* Test local host */
  try
    {
      addr = InetAddress.getLocalHost();
 
      System.out.println("The local hostname is " + addr.getHostName() +
                     " with an IP address of " + addr.getHostAddress());
    }
  catch(UnknownHostException e)
    {
      System.out.println("WARNING: Can't resolve local hostname");
    }

  /* Test simple lookup by IP */
  addr = InetAddress.getByName("18.159.0.42");
 
  System.out.println("Looked up IP addres 18.159.0.42 and got back a " +
                     "hostname of " + addr.getHostName());

  /* Test failed reverse lookup of IP */
  addr = InetAddress.getByName("194.72.246.154");

  System.out.println("Looked up IP addres 194.72.246.154 and got back a " +
                     "hostname of " + addr.getHostName());

  /* Test mangled/invalid IP's */
  try { addr = InetAddress.getByName("122.24.1."); }
  catch (UnknownHostException e) { 
    System.out.println("Passed bad IP test 1");
  }

  try { addr = InetAddress.getByName("122.24.52"); }
  catch (UnknownHostException e) { 
    System.out.println("Passed bad IP test 2");
  }

  try { addr = InetAddress.getByName("122.256.52.1"); }
  catch (UnknownHostException e) { 
    System.out.println("Passed bad IP test 3");
  }

  /* Test simple lookup by name with external info */
  addr = InetAddress.getByName("www.starnews.com"); 
  System.out.println("Looked up host www.starnews.com and got back an " +
                     "IP address of " + addr.getHostAddress());
  byte[] octets = addr.getAddress();
  System.out.println("Raw Address Bytes: octet1=" + (int)octets[0] +
    " octets2=" + (int)octets[1] + " octet3=" + (int)octets[2] +
    " octets4=" + (int)octets[3]);
  System.out.println("toString() returned: " + addr.toString());
  System.out.println("isMulticastAddress returned: " 
                     + addr.isMulticastAddress());

  /* Test complex lookup */
  System.out.println("Looking up all addresses for indiana.edu ...");
  InetAddress[] list = InetAddress.getAllByName("indiana.edu");
  for (int i = 0; i < list.length; i++)
    {
      addr = list[i];

      System.out.println("   Hostname: " + addr.getHostName() + 
                         " IP Address: " + addr.getHostAddress());
    }

  /* Test equality */
  InetAddress addr1 = InetAddress.getByName("www.urbanophile.com");    
  InetAddress addr2 = InetAddress.getByName("www.urbanophile.com");    

  if (addr1.equals(addr2) && addr2.equals(addr1))
    System.out.println("Passed equality test #1");
  else
    System.out.println("Failed equality test #1");

  addr1 = InetAddress.getByName("www.ac.com");
  addr2 = InetAddress.getByName("www.hungry.com");

  if (!addr1.equals(addr2) && !addr2.equals(addr1))
    System.out.println("Passed equality test #2");
  else
    System.out.println("Failed equality test #2");

  /* Quick test to see if it looks like we're caching things */
  addr1 = InetAddress.getByName("www.urbanophile.com");    
  System.out.println("Got " + addr1.getHostName() + " " + addr1.getHostAddress());
  addr2 = InetAddress.getByName("www.hungry.com");
  System.out.println("Got " + addr2.getHostName() + " " + addr2.getHostAddress());
}

}