1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* Licensed to the Apache Software Foundation (ASF) under one or more
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements.  See the NOTICE file distributed with
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership.
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License.  You may obtain a copy of the License at
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License.
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.net;
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.NetworkInterface;
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Enumeration;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Please note that this case can only be passed on Linux with the user is
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 'root'.
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class UnixNetworkInterfaceTest extends TestCase {
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private Enumeration<NetworkInterface> netifs = null;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private boolean valid = false;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.NetworkInterface#isUp()
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_isUp() throws Exception {
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        while (netifs.hasMoreElements()) {
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            NetworkInterface netif = netifs.nextElement();
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String name = netif.getName();
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            boolean up = netif.isUp();
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Down network interface will bring side effect on the
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // platform. So chooses the already-down interface to up it.
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!up && valid) {
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                String cmd = "ifconfig " + name + " up";
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Process proc = Runtime.getRuntime().exec(cmd);
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                proc.waitFor();
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(name + " up should be " + !up, !up, netif.isUp());
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                cmd = "ifconfig " + name + " down";
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                proc = Runtime.getRuntime().exec(cmd);
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                proc.waitFor();
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(name + " up should be " + up, up, netif.isUp());
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.NetworkInterface#supportsMulticast()
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_supportsMulticast() throws Exception {
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        while (netifs.hasMoreElements()) {
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            NetworkInterface netif = netifs.nextElement();
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String name = netif.getName();
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            boolean multicast = netif.supportsMulticast();
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (valid) {
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                String cmd = multicast ? "ifconfig " + name + " -multicast"
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        : "ifconfig " + name + " multicast";
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Process proc = Runtime.getRuntime().exec(cmd);
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                proc.waitFor();
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(name + " multicast should be " + !multicast,
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        !multicast, netif.supportsMulticast());
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                cmd = multicast ? "ifconfig " + name + " multicast"
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        : "ifconfig " + name + " -multicast";
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                proc = Runtime.getRuntime().exec(cmd);
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                proc.waitFor();
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(name + " multicast should be " + multicast,
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        multicast, netif.supportsMulticast());
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.NetworkInterface#getHardwareAddress()
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getHardwareAddress() throws Exception {
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        while (netifs.hasMoreElements()) {
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            NetworkInterface netif = netifs.nextElement();
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String name = netif.getName();
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            byte[] hardAddr = netif.getHardwareAddress();
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (hardAddr != null && valid) {
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                String hardwareAddress = toHardwareAddress(hardAddr);
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                String newHardwareAddr = "0:11:25:1B:BD:FF";
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                String cmd = "ifconfig " + name + " hw ether "
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + newHardwareAddr;
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Process proc = Runtime.getRuntime().exec(cmd);
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                proc.waitFor();
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(name + "'s hardware address should be"
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + newHardwareAddr, newHardwareAddr,
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        toHardwareAddress(netif.getHardwareAddress()));
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                cmd = "ifconfig " + name + " hw ether " + hardwareAddress;
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                proc = Runtime.getRuntime().exec(cmd);
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                proc.waitFor();
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(name + "'s hardware address should be"
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + hardwareAddress, hardwareAddress,
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        toHardwareAddress(netif.getHardwareAddress()));
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.NetworkInterface#getMTU()
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getMTU() throws Exception {
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        while (netifs.hasMoreElements()) {
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            NetworkInterface netif = netifs.nextElement();
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String name = netif.getName();
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int mtu = netif.getMTU();
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (valid) {
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                String cmd = "ifconfig " + name + " mtu 1000";
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Process proc = Runtime.getRuntime().exec(cmd);
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                proc.waitFor();
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(name + " MTU should be 1000", 1000, netif.getMTU());
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                cmd = "ifconfig " + name + " mtu " + mtu;
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                proc = Runtime.getRuntime().exec(cmd);
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                proc.waitFor();
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(name + " MTU should be " + mtu, mtu, netif
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getMTU());
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.NetworkInterface#getSubInterfaces()
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getSubInterfaces() throws Exception {
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        while (netifs.hasMoreElements()) {
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            NetworkInterface netif = netifs.nextElement();
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Enumeration<NetworkInterface> subInterfaces1 = netif
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getSubInterfaces();
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Enumeration<NetworkInterface> subInterfaces2 = netif
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getSubInterfaces();
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (subInterfaces1.hasMoreElements()
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    && subInterfaces2.hasMoreElements() && valid) {
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                NetworkInterface sub1 = subInterfaces1.nextElement();
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                NetworkInterface sub2 = subInterfaces2.nextElement();
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertSame(sub1, sub2);
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertSame(netif, sub1.getParent());
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.NetworkInterface#getParent()
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getParent() {
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        while (netifs.hasMoreElements()) {
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            NetworkInterface netif = netifs.nextElement();
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Enumeration<NetworkInterface> subInterfaces = netif
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getSubInterfaces();
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            boolean contains = false;
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            boolean hasSubInterfaces = false;
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (subInterfaces.hasMoreElements() && valid) {
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                hasSubInterfaces = true;
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                NetworkInterface sub = subInterfaces.nextElement();
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                NetworkInterface parent1 = sub.getParent();
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                NetworkInterface parent2 = sub.getParent();
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertSame(parent1, parent2);
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (netif.equals(parent1)) {
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    contains = true;
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    break;
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(hasSubInterfaces, contains);
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.NetworkInterface#isVirtual()
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_isVirtual() {
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        while (netifs.hasMoreElements()) {
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            NetworkInterface netif = netifs.nextElement();
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            boolean virtual = netif.getParent() != null;
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(netif.getName() + " isVirtual() is" + !virtual,
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    virtual, netif.isVirtual());
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Enumeration<NetworkInterface> subInterfaces = netif
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getSubInterfaces();
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (subInterfaces.hasMoreElements()) {
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue(subInterfaces.nextElement().isVirtual());
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void setUp() throws Exception {
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        super.setUp();
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        netifs = NetworkInterface.getNetworkInterfaces();
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        valid = (netifs != null)
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                && System.getProperty("user.name").equals("root");
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void tearDown() throws Exception {
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        netifs = null;
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        valid = false;
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        super.tearDown();
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static String toHardwareAddress(byte[] hardAddr) {
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        StringBuilder builder = new StringBuilder();
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (byte b : hardAddr) {
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            builder.append(Integer.toHexString(b >= 0 ? b : b + 256)
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .toUpperCase());
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (hardAddr[hardAddr.length - 1] != b) {
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                builder.append(":");
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return builder.toString();
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
232