1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/* 2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Licensed to the Apache Software Foundation (ASF) under one or more 3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * contributor license agreements. See the NOTICE file distributed with 4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * this work for additional information regarding copyright ownership. 5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * The ASF licenses this file to You under the Apache License, Version 2.0 6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * (the "License"); you may not use this file except in compliance with 7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * the License. You may obtain a copy of the License at 8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * http://www.apache.org/licenses/LICENSE-2.0 10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Unless required by applicable law or agreed to in writing, software 12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * distributed under the License is distributed on an "AS IS" BASIS, 13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * See the License for the specific language governing permissions and 15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * limitations under the License. 16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 17cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.net; 19cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.net.Inet4Address; 21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.net.Inet6Address; 22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.net.InetAddress; 23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.net.InterfaceAddress; 24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.net.NetworkInterface; 25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Enumeration; 26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.List; 27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport junit.framework.TestCase; 29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class InterfaceAddressTest extends TestCase { 31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private InterfaceAddress interfaceAddr; 32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private InterfaceAddress anotherInterfaceAddr; 34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.net.InterfaceAddress.hashCode() 37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * @since 1.6 38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_hashCode() { 40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // RI may fail on this when both broadcast addresses are null 41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (interfaceAddr != null) { 42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(anotherInterfaceAddr, interfaceAddr); 43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(anotherInterfaceAddr.hashCode(), interfaceAddr 44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .hashCode()); 45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.net.InterfaceAddress.equals(Object) 50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * @since 1.6 51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_equals_LObject() { 53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // RI may fail on this when both broadcast addresses are null 54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (interfaceAddr != null) { 55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse(interfaceAddr.equals(null)); 56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse(interfaceAddr.equals(new Object())); 57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(interfaceAddr.equals(anotherInterfaceAddr)); 59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNotSame(anotherInterfaceAddr, interfaceAddr); 60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.net.InterfaceAddress.toString() 65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * @since 1.6 66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_toString() { 68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (interfaceAddr != null) { 69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNotNull(interfaceAddr.toString()); 70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(anotherInterfaceAddr.toString(), interfaceAddr 71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .toString()); 72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(interfaceAddr.toString().contains("/")); 73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(interfaceAddr.toString().contains("[")); 74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(interfaceAddr.toString().contains("]")); 75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.net.InterfaceAddress.getAddress() 80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * @since 1.6 81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_getAddress() { 83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (interfaceAddr != null) { 84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InetAddress addr1 = interfaceAddr.getAddress(); 85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNotNull(addr1); 86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InetAddress addr2 = anotherInterfaceAddr.getAddress(); 87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNotNull(addr2); 88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(addr2, addr1); 89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.net.InterfaceAddress.getBroadcast() 94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * @since 1.6 95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_getBroadcast() { 97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (interfaceAddr != null) { 98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InetAddress addr = interfaceAddr.getAddress(); 99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InetAddress addr1 = interfaceAddr.getBroadcast(); 100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath InetAddress addr2 = anotherInterfaceAddr.getBroadcast(); 101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (addr instanceof Inet4Address) { 102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(addr2, addr1); 103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } else if (addr instanceof Inet6Address) { 104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNull(addr1); 105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNull(addr2); 106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.net.InterfaceAddress.getNetworkPrefixLength() 112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * @since 1.6 113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_getNetworkPrefixLength() { 115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (interfaceAddr != null) { 116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath short prefix1 = interfaceAddr.getNetworkPrefixLength(); 117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath short prefix2 = anotherInterfaceAddr.getNetworkPrefixLength(); 118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(prefix2, prefix1); 119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @Override 123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath protected void setUp() throws Exception { 124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath super.setUp(); 125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Enumeration<NetworkInterface> netifs = NetworkInterface 127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .getNetworkInterfaces(); 128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath NetworkInterface theInterface = null; 129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (netifs != null) { 130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while (netifs.hasMoreElements()) { 131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath theInterface = netifs.nextElement(); 132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (theInterface != null) { 133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath List<InterfaceAddress> addrs = theInterface 134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .getInterfaceAddresses(); 135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (!(addrs == null || addrs.isEmpty())) { 136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath interfaceAddr = addrs.get(0); 137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath break; 138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // get another InterfaceAddress object if the interfaceAddr exists. It 144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // equals to interfaceAddr, but is not the same one. 145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (theInterface != null && interfaceAddr != null) { 146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Enumeration<InetAddress> addresses = theInterface 147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .getInetAddresses(); 148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (addresses != null && addresses.hasMoreElements()) { 149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath NetworkInterface anotherNetworkInter = NetworkInterface 150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .getByInetAddress(addresses.nextElement()); 151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath anotherInterfaceAddr = anotherNetworkInter 152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .getInterfaceAddresses().get(0); 153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @Override 158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath protected void tearDown() throws Exception { 159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath interfaceAddr = null; 160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath anotherInterfaceAddr = null; 161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath super.tearDown(); 162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath} 165