• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 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;
18 
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertFalse;
21 import static org.junit.Assert.assertNotEquals;
22 import static org.junit.Assert.assertNotNull;
23 import static org.junit.Assert.assertNull;
24 import static org.junit.Assert.assertTrue;
25 
26 import android.os.Parcel;
27 
28 import androidx.test.filters.SmallTest;
29 import androidx.test.runner.AndroidJUnit4;
30 
31 import org.junit.Test;
32 import org.junit.runner.RunWith;
33 
34 import java.net.InetAddress;
35 import java.util.ArrayList;
36 import java.util.HashSet;
37 import java.util.List;
38 
39 @RunWith(AndroidJUnit4.class)
40 @SmallTest
41 public class StaticIpConfigurationTest {
42 
43     private static final String ADDRSTR = "192.0.2.2/25";
44     private static final LinkAddress ADDR = new LinkAddress(ADDRSTR);
45     private static final InetAddress GATEWAY = IpAddress("192.0.2.1");
46     private static final InetAddress OFFLINKGATEWAY = IpAddress("192.0.2.129");
47     private static final InetAddress DNS1 = IpAddress("8.8.8.8");
48     private static final InetAddress DNS2 = IpAddress("8.8.4.4");
49     private static final InetAddress DNS3 = IpAddress("4.2.2.2");
50     private static final String IFACE = "eth0";
51     private static final String FAKE_DOMAINS = "google.com";
52 
IpAddress(String addr)53     private static InetAddress IpAddress(String addr) {
54         return InetAddress.parseNumericAddress(addr);
55     }
56 
checkEmpty(StaticIpConfiguration s)57     private void checkEmpty(StaticIpConfiguration s) {
58         assertNull(s.ipAddress);
59         assertNull(s.gateway);
60         assertNull(s.domains);
61         assertEquals(0, s.dnsServers.size());
62     }
63 
makeTestObject()64     private StaticIpConfiguration makeTestObject() {
65         StaticIpConfiguration s = new StaticIpConfiguration();
66         s.ipAddress = ADDR;
67         s.gateway = GATEWAY;
68         s.dnsServers.add(DNS1);
69         s.dnsServers.add(DNS2);
70         s.dnsServers.add(DNS3);
71         s.domains = FAKE_DOMAINS;
72         return s;
73     }
74 
75     @Test
testConstructor()76     public void testConstructor() {
77         StaticIpConfiguration s = new StaticIpConfiguration();
78         checkEmpty(s);
79     }
80 
81     @Test
testCopyAndClear()82     public void testCopyAndClear() {
83         StaticIpConfiguration empty = new StaticIpConfiguration((StaticIpConfiguration) null);
84         checkEmpty(empty);
85 
86         StaticIpConfiguration s1 = makeTestObject();
87         StaticIpConfiguration s2 = new StaticIpConfiguration(s1);
88         assertEquals(s1, s2);
89         s2.clear();
90         assertEquals(empty, s2);
91     }
92 
93     @Test
testHashCodeAndEquals()94     public void testHashCodeAndEquals() {
95         HashSet<Integer> hashCodes = new HashSet();
96         hashCodes.add(0);
97 
98         StaticIpConfiguration s = new StaticIpConfiguration();
99         // Check that this hash code is nonzero and different from all the ones seen so far.
100         assertTrue(hashCodes.add(s.hashCode()));
101 
102         s.ipAddress = ADDR;
103         assertTrue(hashCodes.add(s.hashCode()));
104 
105         s.gateway = GATEWAY;
106         assertTrue(hashCodes.add(s.hashCode()));
107 
108         s.dnsServers.add(DNS1);
109         assertTrue(hashCodes.add(s.hashCode()));
110 
111         s.dnsServers.add(DNS2);
112         assertTrue(hashCodes.add(s.hashCode()));
113 
114         s.dnsServers.add(DNS3);
115         assertTrue(hashCodes.add(s.hashCode()));
116 
117         s.domains = "example.com";
118         assertTrue(hashCodes.add(s.hashCode()));
119 
120         assertFalse(s.equals(null));
121         assertEquals(s, s);
122 
123         StaticIpConfiguration s2 = new StaticIpConfiguration(s);
124         assertEquals(s, s2);
125 
126         s.ipAddress = new LinkAddress(DNS1, 32);
127         assertNotEquals(s, s2);
128 
129         s2 = new StaticIpConfiguration(s);
130         s.domains = "foo";
131         assertNotEquals(s, s2);
132 
133         s2 = new StaticIpConfiguration(s);
134         s.gateway = DNS2;
135         assertNotEquals(s, s2);
136 
137         s2 = new StaticIpConfiguration(s);
138         s.dnsServers.add(DNS3);
139         assertNotEquals(s, s2);
140     }
141 
142     @Test
testToLinkProperties()143     public void testToLinkProperties() {
144         LinkProperties expected = new LinkProperties();
145         expected.setInterfaceName(IFACE);
146 
147         StaticIpConfiguration s = new StaticIpConfiguration();
148         assertEquals(expected, s.toLinkProperties(IFACE));
149 
150         final RouteInfo connectedRoute = new RouteInfo(new IpPrefix(ADDRSTR), null, IFACE);
151         s.ipAddress = ADDR;
152         expected.addLinkAddress(ADDR);
153         expected.addRoute(connectedRoute);
154         assertEquals(expected, s.toLinkProperties(IFACE));
155 
156         s.gateway = GATEWAY;
157         RouteInfo defaultRoute = new RouteInfo(new IpPrefix("0.0.0.0/0"), GATEWAY, IFACE);
158         expected.addRoute(defaultRoute);
159         assertEquals(expected, s.toLinkProperties(IFACE));
160 
161         s.gateway = OFFLINKGATEWAY;
162         expected.removeRoute(defaultRoute);
163         defaultRoute = new RouteInfo(new IpPrefix("0.0.0.0/0"), OFFLINKGATEWAY, IFACE);
164         expected.addRoute(defaultRoute);
165 
166         RouteInfo gatewayRoute = new RouteInfo(new IpPrefix("192.0.2.129/32"), null, IFACE);
167         expected.addRoute(gatewayRoute);
168         assertEquals(expected, s.toLinkProperties(IFACE));
169 
170         s.dnsServers.add(DNS1);
171         expected.addDnsServer(DNS1);
172         assertEquals(expected, s.toLinkProperties(IFACE));
173 
174         s.dnsServers.add(DNS2);
175         s.dnsServers.add(DNS3);
176         expected.addDnsServer(DNS2);
177         expected.addDnsServer(DNS3);
178         assertEquals(expected, s.toLinkProperties(IFACE));
179 
180         s.domains = FAKE_DOMAINS;
181         expected.setDomains(FAKE_DOMAINS);
182         assertEquals(expected, s.toLinkProperties(IFACE));
183 
184         s.gateway = null;
185         expected.removeRoute(defaultRoute);
186         expected.removeRoute(gatewayRoute);
187         assertEquals(expected, s.toLinkProperties(IFACE));
188 
189         // Without knowing the IP address, we don't have a directly-connected route, so we can't
190         // tell if the gateway is off-link or not and we don't add a host route. This isn't a real
191         // configuration, but we should at least not crash.
192         s.gateway = OFFLINKGATEWAY;
193         s.ipAddress = null;
194         expected.removeLinkAddress(ADDR);
195         expected.removeRoute(connectedRoute);
196         expected.addRoute(defaultRoute);
197         assertEquals(expected, s.toLinkProperties(IFACE));
198     }
199 
passThroughParcel(StaticIpConfiguration s)200     private StaticIpConfiguration passThroughParcel(StaticIpConfiguration s) {
201         Parcel p = Parcel.obtain();
202         StaticIpConfiguration s2 = null;
203         try {
204             s.writeToParcel(p, 0);
205             p.setDataPosition(0);
206             s2 = StaticIpConfiguration.readFromParcel(p);
207         } finally {
208             p.recycle();
209         }
210         assertNotNull(s2);
211         return s2;
212     }
213 
214     @Test
testParceling()215     public void testParceling() {
216         StaticIpConfiguration s = makeTestObject();
217         StaticIpConfiguration s2 = passThroughParcel(s);
218         assertEquals(s, s2);
219     }
220 
221     @Test
testBuilder()222     public void testBuilder() {
223         final ArrayList<InetAddress> dnsServers = new ArrayList<>();
224         dnsServers.add(DNS1);
225 
226         final StaticIpConfiguration s = new StaticIpConfiguration.Builder()
227                 .setIpAddress(ADDR)
228                 .setGateway(GATEWAY)
229                 .setDomains(FAKE_DOMAINS)
230                 .setDnsServers(dnsServers)
231                 .build();
232 
233         assertEquals(s.ipAddress, s.getIpAddress());
234         assertEquals(ADDR, s.getIpAddress());
235         assertEquals(s.gateway, s.getGateway());
236         assertEquals(GATEWAY, s.getGateway());
237         assertEquals(s.domains, s.getDomains());
238         assertEquals(FAKE_DOMAINS, s.getDomains());
239         assertTrue(s.dnsServers.equals(s.getDnsServers()));
240         assertEquals(1, s.getDnsServers().size());
241         assertEquals(DNS1, s.getDnsServers().get(0));
242     }
243 
244     @Test
testAddDnsServers()245     public void testAddDnsServers() {
246         final StaticIpConfiguration s = new StaticIpConfiguration((StaticIpConfiguration) null);
247         checkEmpty(s);
248 
249         s.addDnsServer(DNS1);
250         assertEquals(1, s.getDnsServers().size());
251         assertEquals(DNS1, s.getDnsServers().get(0));
252 
253         s.addDnsServer(DNS2);
254         s.addDnsServer(DNS3);
255         assertEquals(3, s.getDnsServers().size());
256         assertEquals(DNS2, s.getDnsServers().get(1));
257         assertEquals(DNS3, s.getDnsServers().get(2));
258     }
259 
260     @Test
testGetRoutes()261     public void testGetRoutes() {
262         final StaticIpConfiguration s = makeTestObject();
263         final List<RouteInfo> routeInfoList = s.getRoutes(IFACE);
264 
265         assertEquals(2, routeInfoList.size());
266         assertEquals(new RouteInfo(ADDR, (InetAddress) null, IFACE), routeInfoList.get(0));
267         assertEquals(new RouteInfo((IpPrefix) null, GATEWAY, IFACE), routeInfoList.get(1));
268     }
269 }
270