LinkPropertiesTest.java revision d1e0fae2bc5c98b1f00b185d7be7219dc7e1d0f7
1/* 2 * Copyright (C) 2010 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 17package android.net; 18 19import android.net.LinkProperties; 20import android.net.RouteInfo; 21import android.test.suitebuilder.annotation.SmallTest; 22import junit.framework.TestCase; 23 24import java.net.InetAddress; 25import java.util.ArrayList; 26 27public class LinkPropertiesTest extends TestCase { 28 private static String ADDRV4 = "75.208.6.1"; 29 private static String ADDRV6 = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"; 30 private static String DNS1 = "75.208.7.1"; 31 private static String DNS2 = "69.78.7.1"; 32 private static String GATEWAY1 = "75.208.8.1"; 33 private static String GATEWAY2 = "69.78.8.1"; 34 private static String NAME = "qmi0"; 35 36 public void assertLinkPropertiesEqual(LinkProperties source, LinkProperties target) { 37 // Check implementation of equals(), element by element. 38 assertTrue(source.isIdenticalInterfaceName(target)); 39 assertTrue(target.isIdenticalInterfaceName(source)); 40 41 assertTrue(source.isIdenticalAddresses(target)); 42 assertTrue(target.isIdenticalAddresses(source)); 43 44 assertTrue(source.isIdenticalDnses(target)); 45 assertTrue(target.isIdenticalDnses(source)); 46 47 assertTrue(source.isIdenticalRoutes(target)); 48 assertTrue(target.isIdenticalRoutes(source)); 49 50 assertTrue(source.isIdenticalHttpProxy(target)); 51 assertTrue(target.isIdenticalHttpProxy(source)); 52 53 assertTrue(source.isIdenticalStackedLinks(target)); 54 assertTrue(target.isIdenticalStackedLinks(source)); 55 56 // Check result of equals(). 57 assertTrue(source.equals(target)); 58 assertTrue(target.equals(source)); 59 60 // Check hashCode. 61 assertEquals(source.hashCode(), target.hashCode()); 62 } 63 64 @SmallTest 65 public void testEqualsNull() { 66 LinkProperties source = new LinkProperties(); 67 LinkProperties target = new LinkProperties(); 68 69 assertFalse(source == target); 70 assertLinkPropertiesEqual(source, target); 71 } 72 73 @SmallTest 74 public void testEqualsSameOrder() { 75 try { 76 LinkProperties source = new LinkProperties(); 77 source.setInterfaceName(NAME); 78 // set 2 link addresses 79 source.addLinkAddress(new LinkAddress( 80 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 81 source.addLinkAddress(new LinkAddress( 82 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 83 // set 2 dnses 84 source.addDns(NetworkUtils.numericToInetAddress(DNS1)); 85 source.addDns(NetworkUtils.numericToInetAddress(DNS2)); 86 // set 2 gateways 87 source.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1))); 88 source.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2))); 89 90 LinkProperties target = new LinkProperties(); 91 92 // All fields are same 93 target.setInterfaceName(NAME); 94 target.addLinkAddress(new LinkAddress( 95 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 96 target.addLinkAddress(new LinkAddress( 97 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 98 target.addDns(NetworkUtils.numericToInetAddress(DNS1)); 99 target.addDns(NetworkUtils.numericToInetAddress(DNS2)); 100 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1))); 101 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2))); 102 103 assertLinkPropertiesEqual(source, target); 104 105 target.clear(); 106 // change Interface Name 107 target.setInterfaceName("qmi1"); 108 target.addLinkAddress(new LinkAddress( 109 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 110 target.addLinkAddress(new LinkAddress( 111 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 112 target.addDns(NetworkUtils.numericToInetAddress(DNS1)); 113 target.addDns(NetworkUtils.numericToInetAddress(DNS2)); 114 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1))); 115 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2))); 116 assertFalse(source.equals(target)); 117 118 target.clear(); 119 target.setInterfaceName(NAME); 120 // change link addresses 121 target.addLinkAddress(new LinkAddress( 122 NetworkUtils.numericToInetAddress("75.208.6.2"), 32)); 123 target.addLinkAddress(new LinkAddress( 124 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 125 target.addDns(NetworkUtils.numericToInetAddress(DNS1)); 126 target.addDns(NetworkUtils.numericToInetAddress(DNS2)); 127 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1))); 128 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2))); 129 assertFalse(source.equals(target)); 130 131 target.clear(); 132 target.setInterfaceName(NAME); 133 target.addLinkAddress(new LinkAddress( 134 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 135 target.addLinkAddress(new LinkAddress( 136 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 137 // change dnses 138 target.addDns(NetworkUtils.numericToInetAddress("75.208.7.2")); 139 target.addDns(NetworkUtils.numericToInetAddress(DNS2)); 140 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1))); 141 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2))); 142 assertFalse(source.equals(target)); 143 144 target.clear(); 145 target.setInterfaceName(NAME); 146 target.addLinkAddress(new LinkAddress( 147 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 148 target.addLinkAddress(new LinkAddress( 149 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 150 target.addDns(NetworkUtils.numericToInetAddress(DNS1)); 151 target.addDns(NetworkUtils.numericToInetAddress(DNS2)); 152 // change gateway 153 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress("75.208.8.2"))); 154 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2))); 155 assertFalse(source.equals(target)); 156 157 } catch (Exception e) { 158 throw new RuntimeException(e.toString()); 159 //fail(); 160 } 161 } 162 163 @SmallTest 164 public void testEqualsDifferentOrder() { 165 try { 166 LinkProperties source = new LinkProperties(); 167 source.setInterfaceName(NAME); 168 // set 2 link addresses 169 source.addLinkAddress(new LinkAddress( 170 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 171 source.addLinkAddress(new LinkAddress( 172 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 173 // set 2 dnses 174 source.addDns(NetworkUtils.numericToInetAddress(DNS1)); 175 source.addDns(NetworkUtils.numericToInetAddress(DNS2)); 176 // set 2 gateways 177 source.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1))); 178 source.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2))); 179 180 LinkProperties target = new LinkProperties(); 181 // Exchange order 182 target.setInterfaceName(NAME); 183 target.addLinkAddress(new LinkAddress( 184 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 185 target.addLinkAddress(new LinkAddress( 186 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 187 target.addDns(NetworkUtils.numericToInetAddress(DNS2)); 188 target.addDns(NetworkUtils.numericToInetAddress(DNS1)); 189 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2))); 190 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1))); 191 192 assertLinkPropertiesEqual(source, target); 193 } catch (Exception e) { 194 fail(); 195 } 196 } 197 198 @SmallTest 199 public void testEqualsDuplicated() { 200 try { 201 LinkProperties source = new LinkProperties(); 202 // set 3 link addresses, eg, [A, A, B] 203 source.addLinkAddress(new LinkAddress( 204 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 205 source.addLinkAddress(new LinkAddress( 206 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 207 source.addLinkAddress(new LinkAddress( 208 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 209 210 LinkProperties target = new LinkProperties(); 211 // set 3 link addresses, eg, [A, B, B] 212 target.addLinkAddress(new LinkAddress( 213 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 214 target.addLinkAddress(new LinkAddress( 215 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 216 target.addLinkAddress(new LinkAddress( 217 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 218 219 assertLinkPropertiesEqual(source, target); 220 } catch (Exception e) { 221 fail(); 222 } 223 } 224 225 private void assertAllRoutesHaveInterface(String iface, LinkProperties lp) { 226 for (RouteInfo r : lp.getRoutes()) { 227 assertEquals(iface, r.getInterface()); 228 } 229 } 230 231 @SmallTest 232 public void testRouteInterfaces() { 233 LinkAddress prefix = new LinkAddress( 234 NetworkUtils.numericToInetAddress("2001:db8::"), 32); 235 InetAddress address = NetworkUtils.numericToInetAddress(ADDRV6); 236 237 // Add a route with no interface to a LinkProperties with no interface. No errors. 238 LinkProperties lp = new LinkProperties(); 239 RouteInfo r = new RouteInfo(prefix, address, null); 240 lp.addRoute(r); 241 assertEquals(1, lp.getRoutes().size()); 242 assertAllRoutesHaveInterface(null, lp); 243 244 // Add a route with an interface. Except an exception. 245 r = new RouteInfo(prefix, address, "wlan0"); 246 try { 247 lp.addRoute(r); 248 fail("Adding wlan0 route to LP with no interface, expect exception"); 249 } catch (IllegalArgumentException expected) {} 250 251 // Change the interface name. All the routes should change their interface name too. 252 lp.setInterfaceName("rmnet0"); 253 assertAllRoutesHaveInterface("rmnet0", lp); 254 255 // Now add a route with the wrong interface. This causes an exception too. 256 try { 257 lp.addRoute(r); 258 fail("Adding wlan0 route to rmnet0 LP, expect exception"); 259 } catch (IllegalArgumentException expected) {} 260 261 // If the interface name matches, the route is added. 262 lp.setInterfaceName("wlan0"); 263 lp.addRoute(r); 264 assertEquals(2, lp.getRoutes().size()); 265 assertAllRoutesHaveInterface("wlan0", lp); 266 267 // Routes with null interfaces are converted to wlan0. 268 r = RouteInfo.makeHostRoute(NetworkUtils.numericToInetAddress(ADDRV6), null); 269 lp.addRoute(r); 270 assertEquals(3, lp.getRoutes().size()); 271 assertAllRoutesHaveInterface("wlan0", lp); 272 273 // Check comparisons work. 274 LinkProperties lp2 = new LinkProperties(lp); 275 assertAllRoutesHaveInterface("wlan0", lp); 276 assertEquals(0, lp.compareAllRoutes(lp2).added.size()); 277 assertEquals(0, lp.compareAllRoutes(lp2).removed.size()); 278 279 lp2.setInterfaceName("p2p0"); 280 assertAllRoutesHaveInterface("p2p0", lp2); 281 assertEquals(3, lp.compareAllRoutes(lp2).added.size()); 282 assertEquals(3, lp.compareAllRoutes(lp2).removed.size()); 283 } 284 285 @SmallTest 286 public void testStackedInterfaces() { 287 LinkProperties rmnet0 = new LinkProperties(); 288 rmnet0.setInterfaceName("rmnet0"); 289 rmnet0.addLinkAddress(new LinkAddress( 290 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 291 292 LinkProperties clat4 = new LinkProperties(); 293 clat4.setInterfaceName("clat4"); 294 clat4.addLinkAddress(new LinkAddress( 295 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 296 297 assertEquals(0, rmnet0.getStackedLinks().size()); 298 assertEquals(1, rmnet0.getAddresses().size()); 299 assertEquals(1, rmnet0.getLinkAddresses().size()); 300 assertEquals(1, rmnet0.getAllAddresses().size()); 301 assertEquals(1, rmnet0.getAllLinkAddresses().size()); 302 303 rmnet0.addStackedLink(clat4); 304 assertEquals(1, rmnet0.getStackedLinks().size()); 305 assertEquals(1, rmnet0.getAddresses().size()); 306 assertEquals(1, rmnet0.getLinkAddresses().size()); 307 assertEquals(2, rmnet0.getAllAddresses().size()); 308 assertEquals(2, rmnet0.getAllLinkAddresses().size()); 309 310 rmnet0.addStackedLink(clat4); 311 assertEquals(1, rmnet0.getStackedLinks().size()); 312 assertEquals(1, rmnet0.getAddresses().size()); 313 assertEquals(1, rmnet0.getLinkAddresses().size()); 314 assertEquals(2, rmnet0.getAllAddresses().size()); 315 assertEquals(2, rmnet0.getAllLinkAddresses().size()); 316 317 assertEquals(0, clat4.getStackedLinks().size()); 318 319 // Modify an item in the returned collection to see what happens. 320 for (LinkProperties link : rmnet0.getStackedLinks()) { 321 if (link.getInterfaceName().equals("clat4")) { 322 link.setInterfaceName("newname"); 323 } 324 } 325 for (LinkProperties link : rmnet0.getStackedLinks()) { 326 assertFalse("newname".equals(link.getInterfaceName())); 327 } 328 } 329} 330