14e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang/*
24e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang * Copyright (C) 2010 The Android Open Source Project
34e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang *
44e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang * Licensed under the Apache License, Version 2.0 (the "License");
54e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang * you may not use this file except in compliance with the License.
64e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang * You may obtain a copy of the License at
74e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang *
84e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang *      http://www.apache.org/licenses/LICENSE-2.0
94e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang *
104e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang * Unless required by applicable law or agreed to in writing, software
114e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang * distributed under the License is distributed on an "AS IS" BASIS,
124e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang * See the License for the specific language governing permissions and
144e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang * limitations under the License.
154e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang */
164e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
174e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wangpackage android.net;
184e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
194e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wangimport android.net.LinkProperties;
20aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwaltimport android.net.RouteInfo;
214e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wangimport android.test.suitebuilder.annotation.SmallTest;
224e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wangimport junit.framework.TestCase;
234e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
244e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wangimport java.net.InetAddress;
254e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
264e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wangpublic class LinkPropertiesTest extends TestCase {
274e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    private static String ADDRV4 = "75.208.6.1";
284e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    private static String ADDRV6 = "2001:0db8:85a3:0000:0000:8a2e:0370:7334";
294e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    private static String DNS1 = "75.208.7.1";
304e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    private static String DNS2 = "69.78.7.1";
314e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    private static String GATEWAY1 = "75.208.8.1";
324e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    private static String GATEWAY2 = "69.78.8.1";
334e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    private static String NAME = "qmi0";
344e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
354e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    @SmallTest
364e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    public void testEqualsNull() {
374e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang        LinkProperties source = new LinkProperties();
384e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang        LinkProperties target = new LinkProperties();
394e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
404e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang        assertFalse(source == target);
414e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang        assertTrue(source.equals(target));
424e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang        assertTrue(source.hashCode() == target.hashCode());
434e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    }
444e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
454e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    @SmallTest
464e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    public void testEqualsSameOrder() {
474e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang        try {
484e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            LinkProperties source = new LinkProperties();
494e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            source.setInterfaceName(NAME);
504e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            // set 2 link addresses
514e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            source.addLinkAddress(new LinkAddress(
524e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV4), 32));
534e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            source.addLinkAddress(new LinkAddress(
544e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV6), 128));
554e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            // set 2 dnses
564e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            source.addDns(NetworkUtils.numericToInetAddress(DNS1));
574e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            source.addDns(NetworkUtils.numericToInetAddress(DNS2));
584e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            // set 2 gateways
59aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            source.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1)));
60aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            source.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2)));
614e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
624e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            LinkProperties target = new LinkProperties();
634e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
644e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            // All fields are same
654e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.setInterfaceName(NAME);
664e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addLinkAddress(new LinkAddress(
674e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV4), 32));
684e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addLinkAddress(new LinkAddress(
694e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV6), 128));
704e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addDns(NetworkUtils.numericToInetAddress(DNS1));
714e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addDns(NetworkUtils.numericToInetAddress(DNS2));
72aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1)));
73aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2)));
744e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
754e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            assertTrue(source.equals(target));
764e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            assertTrue(source.hashCode() == target.hashCode());
774e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
784e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.clear();
794e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            // change Interface Name
804e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.setInterfaceName("qmi1");
814e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addLinkAddress(new LinkAddress(
824e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV4), 32));
834e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addLinkAddress(new LinkAddress(
844e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV6), 128));
854e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addDns(NetworkUtils.numericToInetAddress(DNS1));
864e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addDns(NetworkUtils.numericToInetAddress(DNS2));
87aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1)));
88aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2)));
894e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            assertFalse(source.equals(target));
904e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
914e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.clear();
924e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.setInterfaceName(NAME);
934e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            // change link addresses
944e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addLinkAddress(new LinkAddress(
954e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress("75.208.6.2"), 32));
964e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addLinkAddress(new LinkAddress(
974e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV6), 128));
984e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addDns(NetworkUtils.numericToInetAddress(DNS1));
994e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addDns(NetworkUtils.numericToInetAddress(DNS2));
100aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1)));
101aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2)));
1024e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            assertFalse(source.equals(target));
1034e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
1044e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.clear();
1054e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.setInterfaceName(NAME);
1064e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addLinkAddress(new LinkAddress(
1074e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV4), 32));
1084e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addLinkAddress(new LinkAddress(
1094e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV6), 128));
1104e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            // change dnses
1114e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addDns(NetworkUtils.numericToInetAddress("75.208.7.2"));
1124e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addDns(NetworkUtils.numericToInetAddress(DNS2));
113aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1)));
114aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2)));
1154e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            assertFalse(source.equals(target));
1164e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
1174e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.clear();
1184e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.setInterfaceName(NAME);
1194e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addLinkAddress(new LinkAddress(
1204e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV4), 32));
1214e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addLinkAddress(new LinkAddress(
1224e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV6), 128));
1234e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addDns(NetworkUtils.numericToInetAddress(DNS1));
1244e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addDns(NetworkUtils.numericToInetAddress(DNS2));
1254e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            // change gateway
126aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress("75.208.8.2")));
127aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2)));
1284e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            assertFalse(source.equals(target));
1294e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
1304e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang        } catch (Exception e) {
1314e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            throw new RuntimeException(e.toString());
1324e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            //fail();
1334e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang        }
1344e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    }
1354e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
1364e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    @SmallTest
1374e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    public void testEqualsDifferentOrder() {
1384e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang        try {
1394e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            LinkProperties source = new LinkProperties();
1404e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            source.setInterfaceName(NAME);
1414e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            // set 2 link addresses
1424e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            source.addLinkAddress(new LinkAddress(
1434e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV4), 32));
1444e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            source.addLinkAddress(new LinkAddress(
1454e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV6), 128));
1464e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            // set 2 dnses
1474e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            source.addDns(NetworkUtils.numericToInetAddress(DNS1));
1484e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            source.addDns(NetworkUtils.numericToInetAddress(DNS2));
1494e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            // set 2 gateways
150aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            source.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1)));
151aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            source.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2)));
1524e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
1534e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            LinkProperties target = new LinkProperties();
1544e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            // Exchange order
1554e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.setInterfaceName(NAME);
1564e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addLinkAddress(new LinkAddress(
1574e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV6), 128));
1584e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addLinkAddress(new LinkAddress(
1594e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV4), 32));
1604e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addDns(NetworkUtils.numericToInetAddress(DNS2));
1614e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addDns(NetworkUtils.numericToInetAddress(DNS1));
162aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2)));
163aa70f101e08098ed9cb190abe2d7f952561026b8Robert Greenwalt            target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1)));
1644e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
1654e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            assertTrue(source.equals(target));
1664e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            assertTrue(source.hashCode() == target.hashCode());
1674e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang        } catch (Exception e) {
1684e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            fail();
1694e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang        }
1704e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    }
1714e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
1724e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    @SmallTest
1734e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    public void testEqualsDuplicated() {
1744e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang        try {
1754e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            LinkProperties source = new LinkProperties();
1764e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            // set 3 link addresses, eg, [A, A, B]
1774e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            source.addLinkAddress(new LinkAddress(
1784e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV4), 32));
1794e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            source.addLinkAddress(new LinkAddress(
1804e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV4), 32));
1814e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            source.addLinkAddress(new LinkAddress(
1824e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV6), 128));
1834e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
1844e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            LinkProperties target = new LinkProperties();
1854e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            // set 3 link addresses, eg, [A, B, B]
1864e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addLinkAddress(new LinkAddress(
1874e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV4), 32));
1884e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addLinkAddress(new LinkAddress(
1894e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV6), 128));
1904e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            target.addLinkAddress(new LinkAddress(
1914e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang                    NetworkUtils.numericToInetAddress(ADDRV6), 128));
1924e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
1934e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            assertTrue(source.equals(target));
1944e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            assertTrue(source.hashCode() == target.hashCode());
1954e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang        } catch (Exception e) {
1964e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang            fail();
1974e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang        }
1984e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang    }
1994e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang
2004e900091c4da26eb1c9f0d232ee0e50f4522cc69John Wang}
201