183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti/*
283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti * Copyright (C) 2014 The Android Open Source Project
383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti *
483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti * Licensed under the Apache License, Version 2.0 (the "License");
583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti * you may not use this file except in compliance with the License.
683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti * You may obtain a copy of the License at
783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti *
883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti *      http://www.apache.org/licenses/LICENSE-2.0
983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti *
1083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti * Unless required by applicable law or agreed to in writing, software
1183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti * distributed under the License is distributed on an "AS IS" BASIS,
1283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti * See the License for the specific language governing permissions and
1483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti * limitations under the License.
1583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti */
1683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
1783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colittipackage android.net;
1883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
1983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colittiimport android.net.IpPrefix;
2083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colittiimport android.net.LinkAddress;
2183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colittiimport android.net.RouteInfo;
2283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colittiimport android.net.StaticIpConfiguration;
2383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colittiimport android.os.Parcel;
2483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
2583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colittiimport java.net.InetAddress;
2683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colittiimport java.util.HashSet;
2783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
2883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colittiimport junit.framework.TestCase;
2983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colittiimport android.test.suitebuilder.annotation.SmallTest;
3083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
3183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colittiimport static org.junit.Assert.*;
3283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
3383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
3483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colittipublic class StaticIpConfigurationTest extends TestCase {
3583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
3683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    private static final String ADDRSTR = "192.0.2.2/25";
3783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    private static final LinkAddress ADDR = new LinkAddress(ADDRSTR);
3883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    private static final InetAddress GATEWAY = IpAddress("192.0.2.1");
3983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    private static final InetAddress OFFLINKGATEWAY = IpAddress("192.0.2.129");
4083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    private static final InetAddress DNS1 = IpAddress("8.8.8.8");
4183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    private static final InetAddress DNS2 = IpAddress("8.8.4.4");
4283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    private static final InetAddress DNS3 = IpAddress("4.2.2.2");
4383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    private static final String IFACE = "eth0";
4483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
4583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    private static InetAddress IpAddress(String addr) {
4683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        return InetAddress.parseNumericAddress(addr);
4783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    }
4883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
4983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    private void checkEmpty(StaticIpConfiguration s) {
5083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertNull(s.ipAddress);
5183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertNull(s.gateway);
5283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertNull(s.domains);
5383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertEquals(0, s.dnsServers.size());
5483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    }
5583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
5683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    private boolean isEqual(StaticIpConfiguration s1, StaticIpConfiguration s2) {
5783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        return s1.equals(s2);
5883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    }
5983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
6083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    private void assertEquals(StaticIpConfiguration s1, StaticIpConfiguration s2) {
6183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertTrue(isEqual(s1, s2));
6283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    }
6383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
6483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    private void assertNotEquals(StaticIpConfiguration s1, StaticIpConfiguration s2) {
6583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertFalse(isEqual(s1, s2));
6683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    }
6783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
6883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    private StaticIpConfiguration makeTestObject() {
6983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        StaticIpConfiguration s = new StaticIpConfiguration();
7083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.ipAddress = ADDR;
7183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.gateway = GATEWAY;
7283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.dnsServers.add(DNS1);
7383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.dnsServers.add(DNS2);
7483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.dnsServers.add(DNS3);
7583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.domains = "google.com";
7683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        return s;
7783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    }
7883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
7983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    @SmallTest
8083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    public void testConstructor() {
8183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        StaticIpConfiguration s = new StaticIpConfiguration();
8283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        checkEmpty(s);
8383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    }
8483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
8583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    @SmallTest
8683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    public void testCopyAndClear() {
8783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        StaticIpConfiguration empty = new StaticIpConfiguration((StaticIpConfiguration) null);
8883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        checkEmpty(empty);
8983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
9083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        StaticIpConfiguration s1 = makeTestObject();
9183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        StaticIpConfiguration s2 = new StaticIpConfiguration(s1);
9283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertEquals(s1, s2);
9383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s2.clear();
9483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertEquals(empty, s2);
9583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    }
9683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
9783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    @SmallTest
9883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    public void testHashCodeAndEquals() {
9983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        HashSet<Integer> hashCodes = new HashSet();
10083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        hashCodes.add(0);
10183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
10283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        StaticIpConfiguration s = new StaticIpConfiguration();
10383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        // Check that this hash code is nonzero and different from all the ones seen so far.
10483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertTrue(hashCodes.add(s.hashCode()));
10583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
10683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.ipAddress = ADDR;
10783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertTrue(hashCodes.add(s.hashCode()));
10883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
10983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.gateway = GATEWAY;
11083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertTrue(hashCodes.add(s.hashCode()));
11183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
11283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.dnsServers.add(DNS1);
11383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertTrue(hashCodes.add(s.hashCode()));
11483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
11583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.dnsServers.add(DNS2);
11683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertTrue(hashCodes.add(s.hashCode()));
11783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
11883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.dnsServers.add(DNS3);
11983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertTrue(hashCodes.add(s.hashCode()));
12083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
12183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.domains = "example.com";
12283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertTrue(hashCodes.add(s.hashCode()));
12383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
12483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertFalse(s.equals(null));
12583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertEquals(s, s);
12683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
12783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        StaticIpConfiguration s2 = new StaticIpConfiguration(s);
12883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertEquals(s, s2);
12983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
13083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.ipAddress = new LinkAddress(DNS1, 32);
13183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertNotEquals(s, s2);
13283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
13383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s2 = new StaticIpConfiguration(s);
13483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.domains = "foo";
13583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertNotEquals(s, s2);
13683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
13783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s2 = new StaticIpConfiguration(s);
13883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.gateway = DNS2;
13983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertNotEquals(s, s2);
14083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
14183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s2 = new StaticIpConfiguration(s);
14283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.dnsServers.add(DNS3);
14383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertNotEquals(s, s2);
14483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    }
14583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
14683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    @SmallTest
14783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    public void testToLinkProperties() {
14883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        LinkProperties expected = new LinkProperties();
14983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.setInterfaceName(IFACE);
15083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
15183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        StaticIpConfiguration s = new StaticIpConfiguration();
15283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertEquals(expected, s.toLinkProperties(IFACE));
15383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
15483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        final RouteInfo connectedRoute = new RouteInfo(new IpPrefix(ADDRSTR), null, IFACE);
15583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.ipAddress = ADDR;
15683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.addLinkAddress(ADDR);
15783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.addRoute(connectedRoute);
15883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertEquals(expected, s.toLinkProperties(IFACE));
15983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
16083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.gateway = GATEWAY;
16183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        RouteInfo defaultRoute = new RouteInfo(new IpPrefix("0.0.0.0/0"), GATEWAY, IFACE);
16283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.addRoute(defaultRoute);
16383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertEquals(expected, s.toLinkProperties(IFACE));
16483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
16583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.gateway = OFFLINKGATEWAY;
16683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.removeRoute(defaultRoute);
16783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        defaultRoute = new RouteInfo(new IpPrefix("0.0.0.0/0"), OFFLINKGATEWAY, IFACE);
16883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.addRoute(defaultRoute);
16983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
17083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        RouteInfo gatewayRoute = new RouteInfo(new IpPrefix("192.0.2.129/32"), null, IFACE);
17183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.addRoute(gatewayRoute);
17283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertEquals(expected, s.toLinkProperties(IFACE));
17383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
17483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.dnsServers.add(DNS1);
17583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.addDnsServer(DNS1);
17683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertEquals(expected, s.toLinkProperties(IFACE));
17783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
17883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.dnsServers.add(DNS2);
17983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.dnsServers.add(DNS3);
18083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.addDnsServer(DNS2);
18183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.addDnsServer(DNS3);
18283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertEquals(expected, s.toLinkProperties(IFACE));
18383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
18483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.domains = "google.com";
18583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.setDomains("google.com");
18683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertEquals(expected, s.toLinkProperties(IFACE));
18783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
18883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.gateway = null;
18983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.removeRoute(defaultRoute);
19083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.removeRoute(gatewayRoute);
19183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertEquals(expected, s.toLinkProperties(IFACE));
19283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
19383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        // Without knowing the IP address, we don't have a directly-connected route, so we can't
19483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        // tell if the gateway is off-link or not and we don't add a host route. This isn't a real
19583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        // configuration, but we should at least not crash.
19683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.gateway = OFFLINKGATEWAY;
19783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        s.ipAddress = null;
19883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.removeLinkAddress(ADDR);
19983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.removeRoute(connectedRoute);
20083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        expected.addRoute(defaultRoute);
20183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertEquals(expected, s.toLinkProperties(IFACE));
20283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    }
20383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
20483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    private StaticIpConfiguration passThroughParcel(StaticIpConfiguration s) {
20583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        Parcel p = Parcel.obtain();
20683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        StaticIpConfiguration s2 = null;
20783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        try {
20883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti            s.writeToParcel(p, 0);
20983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti            p.setDataPosition(0);
21083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti            s2 = StaticIpConfiguration.CREATOR.createFromParcel(p);
21183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        } finally {
21283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti            p.recycle();
21383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        }
21483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertNotNull(s2);
21583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        return s2;
21683faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    }
21783faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
21883faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    @SmallTest
21983faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    public void testParceling() {
22083faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        StaticIpConfiguration s = makeTestObject();
22183faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        StaticIpConfiguration s2 = passThroughParcel(s);
22283faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti        assertEquals(s, s2);
22383faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti    }
22483faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti}
22583faf72f846c183960ba7ac035073ff3767a13e8Lorenzo Colitti
226