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