1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.net.dhcp;
18 
19 import static android.net.InetAddresses.parseNumericAddress;
20 
21 import static org.junit.Assert.assertEquals;
22 import static org.junit.Assert.assertFalse;
23 import static org.junit.Assert.assertTrue;
24 
25 import android.net.LinkAddress;
26 
27 import androidx.test.filters.SmallTest;
28 import androidx.test.runner.AndroidJUnit4;
29 
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.junit.runner.RunWith;
33 
34 import java.net.Inet4Address;
35 import java.util.Arrays;
36 import java.util.HashSet;
37 import java.util.Set;
38 import java.util.stream.Collectors;
39 import java.util.stream.IntStream;
40 
41 @RunWith(AndroidJUnit4.class)
42 @SmallTest
43 public class DhcpServingParamsParcelExtTest {
44     private static final Inet4Address TEST_ADDRESS = inet4Addr("192.168.0.123");
45     private static final Inet4Address TEST_CLIENT_ADDRESS = inet4Addr("192.168.0.42");
46     private static final int TEST_ADDRESS_PARCELED = 0xc0a8007b;
47     private static final int TEST_CLIENT_ADDRESS_PARCELED = 0xc0a8002a;
48     private static final int TEST_PREFIX_LENGTH = 17;
49     private static final int TEST_LEASE_TIME_SECS = 120;
50     private static final int TEST_MTU = 1000;
51     private static final Set<Inet4Address> TEST_ADDRESS_SET =
52             new HashSet<Inet4Address>(Arrays.asList(
53             new Inet4Address[] {inet4Addr("192.168.1.123"), inet4Addr("192.168.1.124")}));
54     private static final Set<Integer> TEST_ADDRESS_SET_PARCELED =
55             new HashSet<Integer>(Arrays.asList(new Integer[] {0xc0a8017b, 0xc0a8017c}));
56 
57     private DhcpServingParamsParcelExt mParcel;
58 
59     @Before
setUp()60     public void setUp() {
61         mParcel = new DhcpServingParamsParcelExt();
62     }
63 
64     @Test
testSetServerAddr()65     public void testSetServerAddr() {
66         mParcel.setServerAddr(new LinkAddress(TEST_ADDRESS, TEST_PREFIX_LENGTH));
67 
68         assertEquals(TEST_ADDRESS_PARCELED, mParcel.serverAddr);
69         assertEquals(TEST_PREFIX_LENGTH, mParcel.serverAddrPrefixLength);
70     }
71 
72     @Test
testSetDefaultRouters()73     public void testSetDefaultRouters() {
74         mParcel.setDefaultRouters(TEST_ADDRESS_SET);
75         assertEquals(TEST_ADDRESS_SET_PARCELED, asSet(mParcel.defaultRouters));
76     }
77 
78     @Test
testSetDnsServers()79     public void testSetDnsServers() {
80         mParcel.setDnsServers(TEST_ADDRESS_SET);
81         assertEquals(TEST_ADDRESS_SET_PARCELED, asSet(mParcel.dnsServers));
82     }
83 
84     @Test
testSetExcludedAddrs()85     public void testSetExcludedAddrs() {
86         mParcel.setExcludedAddrs(TEST_ADDRESS_SET);
87         assertEquals(TEST_ADDRESS_SET_PARCELED, asSet(mParcel.excludedAddrs));
88     }
89 
90     @Test
testSetDhcpLeaseTimeSecs()91     public void testSetDhcpLeaseTimeSecs() {
92         mParcel.setDhcpLeaseTimeSecs(TEST_LEASE_TIME_SECS);
93         assertEquals(TEST_LEASE_TIME_SECS, mParcel.dhcpLeaseTimeSecs);
94     }
95 
96     @Test
testSetLinkMtu()97     public void testSetLinkMtu() {
98         mParcel.setLinkMtu(TEST_MTU);
99         assertEquals(TEST_MTU, mParcel.linkMtu);
100     }
101 
102     @Test
testSetMetered()103     public void testSetMetered() {
104         mParcel.setMetered(true);
105         assertTrue(mParcel.metered);
106         mParcel.setMetered(false);
107         assertFalse(mParcel.metered);
108     }
109 
110     @Test
testSetClientAddr()111     public void testSetClientAddr() {
112         mParcel.setSingleClientAddr(TEST_CLIENT_ADDRESS);
113         assertEquals(TEST_CLIENT_ADDRESS_PARCELED, mParcel.singleClientAddr);
114     }
115 
inet4Addr(String addr)116     private static Inet4Address inet4Addr(String addr) {
117         return (Inet4Address) parseNumericAddress(addr);
118     }
119 
asSet(int[] ints)120     private static Set<Integer> asSet(int[] ints) {
121         return IntStream.of(ints).boxed().collect(Collectors.toSet());
122     }
123 }
124