1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.net;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.InetAddress;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.InterfaceAddress;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.NetworkInterface;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.SocketException;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.ArrayList;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Enumeration;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.List;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class NetworkInterfaceTest extends junit.framework.TestCase {
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	// private member variables used for tests
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    Enumeration<NetworkInterface> theInterfaces = null;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	boolean atLeastOneInterface = false;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	boolean atLeastTwoInterfaces = false;
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private NetworkInterface networkInterface1 = null;
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private NetworkInterface sameAsNetworkInterface1 = null;
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private NetworkInterface networkInterface2 = null;
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.NetworkInterface#getName()
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getName() {
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastOneInterface) {
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNotNull("validate that non null name is returned",
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					networkInterface1.getName());
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse("validate that non-zero length name is generated",
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					networkInterface1.getName().equals(""));
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastTwoInterfaces) {
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					"Validate strings are different for different interfaces",
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					networkInterface1.getName().equals(
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes							networkInterface2.getName()));
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.NetworkInterface#getInetAddresses()
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getInetAddresses() throws Exception {
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastOneInterface) {
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Enumeration theAddresses = networkInterface1.getInetAddresses();
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (theAddresses.hasMoreElements()) {
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                InetAddress theAddress = (InetAddress) theAddresses
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .nextElement();
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertNotNull("validate that address is not null", theAddress);
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastTwoInterfaces) {
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Enumeration theAddresses = networkInterface2.getInetAddresses();
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			while (theAddresses.hasMoreElements()) {
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                InetAddress theAddress = (InetAddress) theAddresses
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .nextElement();
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertNotNull("validate that address is not null", theAddress);
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// create the list of ok and not ok addresses to return
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastOneInterface) {
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			ArrayList okAddresses = new ArrayList();
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Enumeration addresses = networkInterface1.getInetAddresses();
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			int index = 0;
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			ArrayList notOkAddresses = new ArrayList();
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			while (addresses.hasMoreElements()) {
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                InetAddress theAddress = (InetAddress) addresses.nextElement();
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    okAddresses.add(theAddress);
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                index++;
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// do the same for network interface 2 if it exists
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			if (atLeastTwoInterfaces) {
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				addresses = networkInterface2.getInetAddresses();
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				index = 0;
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				while (addresses.hasMoreElements()) {
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					InetAddress theAddress = (InetAddress) addresses
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes							.nextElement();
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						okAddresses.add(theAddress);
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					index++;
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				}
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// validate not ok addresses are not returned
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			for (int i = 0; i < notOkAddresses.size(); i++) {
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				Enumeration reducedAddresses = networkInterface1
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						.getInetAddresses();
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				while (reducedAddresses.hasMoreElements()) {
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    InetAddress nextAddress = (InetAddress) reducedAddresses
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            .nextElement();
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    assertTrue(
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            "validate that address without permission is not returned",
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            !nextAddress.equals(notOkAddresses.get(i)));
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				if (atLeastTwoInterfaces) {
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    reducedAddresses = networkInterface2.getInetAddresses();
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					while (reducedAddresses.hasMoreElements()) {
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						InetAddress nextAddress = (InetAddress) reducedAddresses
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes								.nextElement();
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						assertTrue(
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes								"validate that address without permission is not returned",
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes								!nextAddress.equals(notOkAddresses.get(i)));
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					}
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				}
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// validate that ok addresses are returned
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			for (int i = 0; i < okAddresses.size(); i++) {
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				boolean addressReturned = false;
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				Enumeration reducedAddresses = networkInterface1
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						.getInetAddresses();
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				while (reducedAddresses.hasMoreElements()) {
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    InetAddress nextAddress = (InetAddress) reducedAddresses
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            .nextElement();
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (nextAddress.equals(okAddresses.get(i))) {
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        addressReturned = true;
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				if (atLeastTwoInterfaces) {
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					reducedAddresses = networkInterface2.getInetAddresses();
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					while (reducedAddresses.hasMoreElements()) {
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						InetAddress nextAddress = (InetAddress) reducedAddresses
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes								.nextElement();
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						if (nextAddress.equals(okAddresses.get(i))) {
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes							addressReturned = true;
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						}
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					}
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				}
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				assertTrue("validate that address with permission is returned",
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						addressReturned);
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// validate that we can get the interface by specifying the address.
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// This is to be compatible
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			for (int i = 0; i < notOkAddresses.size(); i++) {
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertNotNull(
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "validate we cannot get the NetworkInterface with an address for which we have no privs",
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        NetworkInterface
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .getByInetAddress((InetAddress) notOkAddresses
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                        .get(i)));
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// validate that we can get the network interface for the good
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// addresses
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			for (int i = 0; i < okAddresses.size(); i++) {
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertNotNull(
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "validate we cannot get the NetworkInterface with an address fro which we have no privs",
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        NetworkInterface
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .getByInetAddress((InetAddress) okAddresses
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                        .get(i)));
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.NetworkInterface#getDisplayName()
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getDisplayName() {
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastOneInterface) {
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNotNull("validate that non null display name is returned",
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					networkInterface1.getDisplayName());
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					"validate that non-zero length display name is generated",
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					networkInterface1.getDisplayName().equals(""));
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastTwoInterfaces) {
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					"Validate strings are different for different interfaces",
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					networkInterface1.getDisplayName().equals(
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes							networkInterface2.getDisplayName()));
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.NetworkInterface#getByName(java.lang.String)
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getByNameLjava_lang_String() throws Exception {
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNull("validate null handled ok",
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                   NetworkInterface.getByName(null));
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("getByName did not throw NullPointerException for null argument");
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (NullPointerException e) {
206fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes		}
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertNull("validate handled ok if we ask for name not associated with any interface",
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                  NetworkInterface.getByName("8not a name4"));
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// for each address in an interface validate that we get the right
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// interface for that name
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastOneInterface) {
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			String theName = networkInterface1.getName();
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			if (theName != null) {
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "validate that Interface can be obtained with its name",
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        networkInterface1, NetworkInterface.getByName(theName));
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// validate that we get the right interface with the second interface as
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// well (ie we just don't always get the first interface
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastTwoInterfaces) {
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			String theName = networkInterface2.getName();
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			if (theName != null) {
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "validate that Interface can be obtained with its name",
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        networkInterface2, NetworkInterface.getByName(theName));
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.NetworkInterface#getByInetAddress(java.net.InetAddress)
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getByInetAddressLjava_net_InetAddress() throws Exception {
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		byte addressBytes[] = new byte[4];
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		addressBytes[0] = 0;
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		addressBytes[1] = 0;
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		addressBytes[2] = 0;
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		addressBytes[3] = 0;
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNull("validate null handled ok",
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                   NetworkInterface.getByInetAddress(null));
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("should not get here if getByInetAddress throws "
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					+ "NullPointerException if null passed in");
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (NullPointerException e) {
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertNull("validate handled ok if we ask for address not associated with any interface",
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                           NetworkInterface.getByInetAddress(InetAddress
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                .getByAddress(addressBytes)));
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// for each address in an interface validate that we get the right
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// interface for that address
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastOneInterface) {
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Enumeration addresses = networkInterface1.getInetAddresses();
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			while (addresses.hasMoreElements()) {
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                InetAddress theAddress = (InetAddress) addresses.nextElement();
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "validate that Interface can be obtained with any one of its addresses",
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        networkInterface1, NetworkInterface
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .getByInetAddress(theAddress));
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// validate that we get the right interface with the second interface as
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// well (ie we just don't always get the first interface
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastTwoInterfaces) {
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Enumeration addresses = networkInterface2.getInetAddresses();
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			while (addresses.hasMoreElements()) {
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                InetAddress theAddress = (InetAddress) addresses.nextElement();
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "validate that Interface can be obtained with any one of its addresses",
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        networkInterface2, NetworkInterface
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .getByInetAddress(theAddress));
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.NetworkInterface#getNetworkInterfaces()
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getNetworkInterfaces() throws Exception {
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// really this is tested by all of the other calls but just make sure we
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// can call it and get a list of interfaces if they exist
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration theInterfaces = NetworkInterface.getNetworkInterfaces();
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.NetworkInterface#equals(java.lang.Object)
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_equalsLjava_lang_Object() {
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Test for method boolean
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// java.net.SocketPermission.equals(java.lang.Object)
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastOneInterface) {
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("If objects are the same true is returned",
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    sameAsNetworkInterface1, networkInterface1);
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertNotNull("Validate Null handled ok", networkInterface1);
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastTwoInterfaces) {
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse("If objects are different false is returned",
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					networkInterface1.equals(networkInterface2));
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.NetworkInterface#hashCode()
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_hashCode() {
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastOneInterface) {
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					"validate that hash codes are the same for two calls on the same object",
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					networkInterface1.hashCode() == networkInterface1
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes							.hashCode());
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					"validate that hash codes are the same for two objects for which equals is true",
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					networkInterface1.hashCode() == sameAsNetworkInterface1
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes							.hashCode());
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.net.NetworkInterface#toString()
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_toString() {
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastOneInterface) {
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertNotNull("validate that non null string is generated",
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					networkInterface1.toString());
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse("validate that non-zero length string is generated",
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					networkInterface1.toString().equals(""));
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (atLeastTwoInterfaces) {
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					"Validate strings are different for different interfaces",
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					networkInterface1.toString().equals(
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes							networkInterface2.toString()));
344fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
349fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes     *
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.NetworkInterface#getInterfaceAddresses()
351fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes     *
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getInterfaceAddresses() throws SocketException {
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (theInterfaces != null) {
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (theInterfaces.hasMoreElements()) {
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                NetworkInterface netif = theInterfaces.nextElement();
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(netif.getName()
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + " getInterfaceAddresses should contain no element", 0,
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        netif.getInterfaceAddresses().size());
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
362fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            theInterfaces = NetworkInterface.getNetworkInterfaces();
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (theInterfaces.hasMoreElements()) {
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                NetworkInterface netif = theInterfaces.nextElement();
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                List<InterfaceAddress> interfaceAddrs = netif.getInterfaceAddresses();
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue(interfaceAddrs instanceof ArrayList);
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                for (InterfaceAddress addr : interfaceAddrs) {
369fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes                    assertNotNull(addr);
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
371fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                List<InterfaceAddress> interfaceAddrs2 = netif.getInterfaceAddresses();
373fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes                // RI fails on this since it cannot tolerate null broadcast address.
374fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes                assertEquals(interfaceAddrs, interfaceAddrs2);
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
377fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes    }
378fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.NetworkInterface#isLoopback()
381fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes     *
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
384fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes    public void test_isLoopback() throws SocketException {
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (theInterfaces != null) {
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (theInterfaces.hasMoreElements()) {
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                NetworkInterface netif = theInterfaces.nextElement();
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                boolean loopback = false;
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Enumeration<InetAddress> addrs = netif.getInetAddresses();
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                while(addrs != null && addrs.hasMoreElements()){
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if(addrs.nextElement().isLoopbackAddress()){
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        loopback = true;
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        break;
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(loopback, netif.isLoopback());
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
400fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.NetworkInterface#getHardwareAddress()
403fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes     *
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getHardwareAddress() throws SocketException {
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (theInterfaces != null) {
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (theInterfaces.hasMoreElements()) {
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                NetworkInterface netif = theInterfaces.nextElement();
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                byte[] hwAddr = netif.getHardwareAddress();
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (netif.isLoopback()) {
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    assertTrue(hwAddr == null || hwAddr.length == 0);
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } else {
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    assertTrue(hwAddr.length >= 0);
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
419fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
421fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes     *
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.NetworkInterface#getHardwareAddress()
423fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes     *
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
426fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes    public void test_getMTU() throws SocketException {
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (theInterfaces != null) {
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (theInterfaces.hasMoreElements()) {
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                NetworkInterface netif = theInterfaces.nextElement();
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue(netif.getName() + "has non-positive MTU", netif.getMTU() >= 0);
431fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes            }
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
434fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void setUp() throws SocketException {
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Enumeration theInterfaces = null;
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			theInterfaces = NetworkInterface.getNetworkInterfaces();
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (Exception e) {
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("Exception occurred getting network interfaces : " + e);
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
443fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// Set up NetworkInterface instance members. Note that because the call
445fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes		// to NetworkInterface.getNetworkInterfaces() returns *all* of the
446fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes		// interfaces on the test machine it is possible that one or more of
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// them will not currently be bound to an InetAddress. e.g. a laptop
448fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes		// running connected by a wire to the local network may also have a
449fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes		// wireless interface that is not active and so has no InetAddress
450fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes		// bound to it. For these tests only work with NetworkInterface objects
451fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes		// that are bound to an InetAddress.
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if ((theInterfaces != null) && (theInterfaces.hasMoreElements())) {
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			while ((theInterfaces.hasMoreElements())
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					&& (atLeastOneInterface == false)) {
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				NetworkInterface theInterface = (NetworkInterface) theInterfaces
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						.nextElement();
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				if (theInterface.getInetAddresses().hasMoreElements()) {
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					// Ensure that the current NetworkInterface has at least
459fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes					// one InetAddress bound to it.
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					Enumeration addrs = theInterface.getInetAddresses();
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					if ((addrs != null) && (addrs.hasMoreElements())) {
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						atLeastOneInterface = true;
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						networkInterface1 = theInterface;
464fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes					}// end if
465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				}
466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			while ((theInterfaces.hasMoreElements())
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					&& (atLeastTwoInterfaces == false)) {
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				NetworkInterface theInterface = (NetworkInterface) theInterfaces
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						.nextElement();
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				if (theInterface.getInetAddresses().hasMoreElements()) {
473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					// Ensure that the current NetworkInterface has at least
474fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes					// one InetAddress bound to it.
475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					Enumeration addrs = theInterface.getInetAddresses();
476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					if ((addrs != null) && (addrs.hasMoreElements())) {
477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						atLeastTwoInterfaces = true;
478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						networkInterface2 = theInterface;
479fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes					}// end if
480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				}
481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
483fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes			// Only set sameAsNetworkInterface1 if we succeeded in finding
484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// at least one good NetworkInterface
485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			if (atLeastOneInterface) {
486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				Enumeration addresses = networkInterface1.getInetAddresses();
487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				if (addresses.hasMoreElements()) {
488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					try {
489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						if (addresses.hasMoreElements()) {
490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes							sameAsNetworkInterface1 = NetworkInterface
491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes							.getByInetAddress((InetAddress) addresses
492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes									.nextElement());
493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						}
494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					} catch (SocketException e) {
495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						fail("SocketException occurred : " + e);
496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					}
497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				}
498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}// end if atLeastOneInterface
499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        theInterfaces = NetworkInterface.getNetworkInterfaces();
501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
503