LinkPropertiesTest.java revision 419a4ce9e461177d75eca5fd71fc8c275969e479
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 @SmallTest 37 public void testEqualsNull() { 38 LinkProperties source = new LinkProperties(); 39 LinkProperties target = new LinkProperties(); 40 41 assertFalse(source == target); 42 assertTrue(source.equals(target)); 43 assertTrue(source.hashCode() == target.hashCode()); 44 } 45 46 @SmallTest 47 public void testEqualsSameOrder() { 48 try { 49 LinkProperties source = new LinkProperties(); 50 source.setInterfaceName(NAME); 51 // set 2 link addresses 52 source.addLinkAddress(new LinkAddress( 53 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 54 source.addLinkAddress(new LinkAddress( 55 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 56 // set 2 dnses 57 source.addDns(NetworkUtils.numericToInetAddress(DNS1)); 58 source.addDns(NetworkUtils.numericToInetAddress(DNS2)); 59 // set 2 gateways 60 source.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1))); 61 source.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2))); 62 63 LinkProperties target = new LinkProperties(); 64 65 // All fields are same 66 target.setInterfaceName(NAME); 67 target.addLinkAddress(new LinkAddress( 68 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 69 target.addLinkAddress(new LinkAddress( 70 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 71 target.addDns(NetworkUtils.numericToInetAddress(DNS1)); 72 target.addDns(NetworkUtils.numericToInetAddress(DNS2)); 73 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1))); 74 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2))); 75 76 assertTrue(source.equals(target)); 77 assertTrue(source.hashCode() == target.hashCode()); 78 79 target.clear(); 80 // change Interface Name 81 target.setInterfaceName("qmi1"); 82 target.addLinkAddress(new LinkAddress( 83 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 84 target.addLinkAddress(new LinkAddress( 85 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 86 target.addDns(NetworkUtils.numericToInetAddress(DNS1)); 87 target.addDns(NetworkUtils.numericToInetAddress(DNS2)); 88 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1))); 89 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2))); 90 assertFalse(source.equals(target)); 91 92 target.clear(); 93 target.setInterfaceName(NAME); 94 // change link addresses 95 target.addLinkAddress(new LinkAddress( 96 NetworkUtils.numericToInetAddress("75.208.6.2"), 32)); 97 target.addLinkAddress(new LinkAddress( 98 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 99 target.addDns(NetworkUtils.numericToInetAddress(DNS1)); 100 target.addDns(NetworkUtils.numericToInetAddress(DNS2)); 101 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1))); 102 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2))); 103 assertFalse(source.equals(target)); 104 105 target.clear(); 106 target.setInterfaceName(NAME); 107 target.addLinkAddress(new LinkAddress( 108 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 109 target.addLinkAddress(new LinkAddress( 110 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 111 // change dnses 112 target.addDns(NetworkUtils.numericToInetAddress("75.208.7.2")); 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 target.addLinkAddress(new LinkAddress( 121 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 122 target.addLinkAddress(new LinkAddress( 123 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 124 target.addDns(NetworkUtils.numericToInetAddress(DNS1)); 125 target.addDns(NetworkUtils.numericToInetAddress(DNS2)); 126 // change gateway 127 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress("75.208.8.2"))); 128 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2))); 129 assertFalse(source.equals(target)); 130 131 } catch (Exception e) { 132 throw new RuntimeException(e.toString()); 133 //fail(); 134 } 135 } 136 137 @SmallTest 138 public void testEqualsDifferentOrder() { 139 try { 140 LinkProperties source = new LinkProperties(); 141 source.setInterfaceName(NAME); 142 // set 2 link addresses 143 source.addLinkAddress(new LinkAddress( 144 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 145 source.addLinkAddress(new LinkAddress( 146 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 147 // set 2 dnses 148 source.addDns(NetworkUtils.numericToInetAddress(DNS1)); 149 source.addDns(NetworkUtils.numericToInetAddress(DNS2)); 150 // set 2 gateways 151 source.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1))); 152 source.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2))); 153 154 LinkProperties target = new LinkProperties(); 155 // Exchange order 156 target.setInterfaceName(NAME); 157 target.addLinkAddress(new LinkAddress( 158 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 159 target.addLinkAddress(new LinkAddress( 160 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 161 target.addDns(NetworkUtils.numericToInetAddress(DNS2)); 162 target.addDns(NetworkUtils.numericToInetAddress(DNS1)); 163 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY2))); 164 target.addRoute(new RouteInfo(NetworkUtils.numericToInetAddress(GATEWAY1))); 165 166 assertTrue(source.equals(target)); 167 assertTrue(source.hashCode() == target.hashCode()); 168 } catch (Exception e) { 169 fail(); 170 } 171 } 172 173 @SmallTest 174 public void testEqualsDuplicated() { 175 try { 176 LinkProperties source = new LinkProperties(); 177 // set 3 link addresses, eg, [A, A, B] 178 source.addLinkAddress(new LinkAddress( 179 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 180 source.addLinkAddress(new LinkAddress( 181 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 182 source.addLinkAddress(new LinkAddress( 183 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 184 185 LinkProperties target = new LinkProperties(); 186 // set 3 link addresses, eg, [A, B, B] 187 target.addLinkAddress(new LinkAddress( 188 NetworkUtils.numericToInetAddress(ADDRV4), 32)); 189 target.addLinkAddress(new LinkAddress( 190 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 191 target.addLinkAddress(new LinkAddress( 192 NetworkUtils.numericToInetAddress(ADDRV6), 128)); 193 194 assertTrue(source.equals(target)); 195 assertTrue(source.hashCode() == target.hashCode()); 196 } catch (Exception e) { 197 fail(); 198 } 199 } 200 201 private void assertAllRoutesHaveInterface(String iface, LinkProperties lp) { 202 for (RouteInfo r : lp.getRoutes()) { 203 assertEquals(iface, r.getInterface()); 204 } 205 } 206 207 @SmallTest 208 public void testRouteInterfaces() { 209 LinkAddress prefix = new LinkAddress( 210 NetworkUtils.numericToInetAddress("2001:db8::"), 32); 211 InetAddress address = NetworkUtils.numericToInetAddress(ADDRV6); 212 213 // Add a route with no interface to a LinkProperties with no interface. No errors. 214 LinkProperties lp = new LinkProperties(); 215 RouteInfo r = new RouteInfo(prefix, address, null); 216 lp.addRoute(r); 217 assertEquals(1, lp.getRoutes().size()); 218 assertAllRoutesHaveInterface(null, lp); 219 220 // Add a route with an interface. Except an exception. 221 r = new RouteInfo(prefix, address, "wlan0"); 222 try { 223 lp.addRoute(r); 224 fail("Adding wlan0 route to LP with no interface, expect exception"); 225 } catch (IllegalArgumentException expected) {} 226 227 // Change the interface name. All the routes should change their interface name too. 228 lp.setInterfaceName("rmnet0"); 229 assertAllRoutesHaveInterface("rmnet0", lp); 230 231 // Now add a route with the wrong interface. This causes an exception too. 232 try { 233 lp.addRoute(r); 234 fail("Adding wlan0 route to rmnet0 LP, expect exception"); 235 } catch (IllegalArgumentException expected) {} 236 237 // If the interface name matches, the route is added. 238 lp.setInterfaceName("wlan0"); 239 lp.addRoute(r); 240 assertEquals(2, lp.getRoutes().size()); 241 assertAllRoutesHaveInterface("wlan0", lp); 242 243 // Routes with null interfaces are converted to wlan0. 244 r = RouteInfo.makeHostRoute(NetworkUtils.numericToInetAddress(ADDRV6), null); 245 lp.addRoute(r); 246 assertEquals(3, lp.getRoutes().size()); 247 assertAllRoutesHaveInterface("wlan0", lp); 248 249 // Check comparisons work. 250 LinkProperties lp2 = new LinkProperties(lp); 251 assertAllRoutesHaveInterface("wlan0", lp); 252 assertEquals(0, lp.compareRoutes(lp2).added.size()); 253 assertEquals(0, lp.compareRoutes(lp2).removed.size()); 254 255 lp2.setInterfaceName("p2p0"); 256 assertAllRoutesHaveInterface("p2p0", lp2); 257 assertEquals(3, lp.compareRoutes(lp2).added.size()); 258 assertEquals(3, lp.compareRoutes(lp2).removed.size()); 259 260 @SmallTest 261 public void testStackedInterfaces() { 262 LinkProperties rmnet0 = new LinkProperties(); 263 rmnet0.setInterfaceName("rmnet0"); 264 265 LinkProperties clat4 = new LinkProperties(); 266 clat4.setInterfaceName("clat4"); 267 268 assertEquals(0, rmnet0.getStackedLinks().size()); 269 rmnet0.addStackedLink(clat4); 270 assertEquals(1, rmnet0.getStackedLinks().size()); 271 rmnet0.addStackedLink(clat4); 272 assertEquals(1, rmnet0.getStackedLinks().size()); 273 assertEquals(0, clat4.getStackedLinks().size()); 274 275 // Modify an item in the returned collection to see what happens. 276 for (LinkProperties link : rmnet0.getStackedLinks()) { 277 if (link.getInterfaceName().equals("clat4")) { 278 link.setInterfaceName("newname"); 279 } 280 } 281 for (LinkProperties link : rmnet0.getStackedLinks()) { 282 assertFalse("newname".equals(link.getInterfaceName())); 283 } 284 } 285} 286