AccessPointTest.java revision 43d2a1700b6eb1d804924c6a1e5e0161a13a5348
1/* 2 * Copyright (C) 2016 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 */ 16package com.android.settingslib.wifi; 17 18import static com.google.common.truth.Truth.assertThat; 19import static com.google.common.truth.Truth.assertWithMessage; 20 21import static org.mockito.Mockito.any; 22import static org.mockito.Mockito.anyInt; 23import static org.mockito.Mockito.mock; 24import static org.mockito.Mockito.verify; 25import static org.mockito.Mockito.when; 26 27import android.content.Context; 28import android.net.ConnectivityManager; 29import android.net.NetworkInfo; 30import android.net.NetworkKey; 31import android.net.RssiCurve; 32import android.net.ScoredNetwork; 33import android.net.WifiKey; 34import android.net.wifi.ScanResult; 35import android.net.wifi.WifiConfiguration; 36import android.net.wifi.WifiInfo; 37import android.net.wifi.WifiNetworkScoreCache; 38import android.net.wifi.WifiSsid; 39import android.net.wifi.hotspot2.PasspointConfiguration; 40import android.net.wifi.hotspot2.pps.HomeSp; 41import android.os.Bundle; 42import android.os.SystemClock; 43import android.support.test.InstrumentationRegistry; 44import android.support.test.filters.SmallTest; 45import android.support.test.runner.AndroidJUnit4; 46import android.text.SpannableString; 47import android.text.style.TtsSpan; 48 49import com.android.settingslib.R; 50 51import org.junit.Before; 52import org.junit.Test; 53import org.junit.runner.RunWith; 54import org.mockito.Mock; 55import org.mockito.MockitoAnnotations; 56 57import java.util.ArrayList; 58import java.util.Collections; 59 60@SmallTest 61@RunWith(AndroidJUnit4.class) 62public class AccessPointTest { 63 64 private static final String TEST_SSID = "test_ssid"; 65 private Context mContext; 66 @Mock private RssiCurve mockBadgeCurve; 67 @Mock private WifiNetworkScoreCache mockWifiNetworkScoreCache; 68 69 @Before 70 public void setUp() { 71 MockitoAnnotations.initMocks(this); 72 mContext = InstrumentationRegistry.getTargetContext(); 73 } 74 75 @Test 76 public void testSsidIsTelephoneSpan() { 77 final Bundle bundle = new Bundle(); 78 bundle.putString("key_ssid", TEST_SSID); 79 final AccessPoint ap = new AccessPoint(InstrumentationRegistry.getTargetContext(), bundle); 80 final CharSequence ssid = ap.getSsid(); 81 82 assertThat(ssid instanceof SpannableString).isTrue(); 83 84 TtsSpan[] spans = ((SpannableString) ssid).getSpans(0, TEST_SSID.length(), TtsSpan.class); 85 86 assertThat(spans.length).isEqualTo(1); 87 assertThat(spans[0].getType()).isEqualTo(TtsSpan.TYPE_TELEPHONE); 88 } 89 90 @Test 91 public void testCopyAccessPoint_dataShouldMatch() { 92 WifiConfiguration configuration = createWifiConfiguration(); 93 configuration.meteredHint = true; 94 95 NetworkInfo networkInfo = 96 new NetworkInfo(ConnectivityManager.TYPE_WIFI, 2, "WIFI", "WIFI_SUBTYPE"); 97 AccessPoint originalAccessPoint = new AccessPoint(mContext, configuration); 98 WifiInfo wifiInfo = new WifiInfo(); 99 wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(configuration.SSID)); 100 wifiInfo.setBSSID(configuration.BSSID); 101 originalAccessPoint.update(configuration, wifiInfo, networkInfo); 102 AccessPoint copy = new AccessPoint(mContext, originalAccessPoint); 103 104 assertThat(originalAccessPoint.getSsid().toString()).isEqualTo(copy.getSsid().toString()); 105 assertThat(originalAccessPoint.getBssid()).isEqualTo(copy.getBssid()); 106 assertThat(originalAccessPoint.getConfig()).isEqualTo(copy.getConfig()); 107 assertThat(originalAccessPoint.getSecurity()).isEqualTo(copy.getSecurity()); 108 assertThat(originalAccessPoint.isMetered()).isEqualTo(copy.isMetered()); 109 assertThat(originalAccessPoint.compareTo(copy) == 0).isTrue(); 110 } 111 112 @Test 113 public void testThatCopyAccessPoint_scanCacheShouldMatch() { 114 AccessPoint original = createAccessPointWithScanResultCache(); 115 assertThat(original.getRssi()).isEqualTo(4); 116 AccessPoint copy = new AccessPoint(mContext, createWifiConfiguration()); 117 assertThat(copy.getRssi()).isEqualTo(AccessPoint.UNREACHABLE_RSSI); 118 copy.copyFrom(original); 119 assertThat(original.getRssi()).isEqualTo(copy.getRssi()); 120 } 121 122 @Test 123 public void testCompareTo_GivesActiveBeforeInactive() { 124 AccessPoint activeAp = new TestAccessPointBuilder(mContext).setActive(true).build(); 125 AccessPoint inactiveAp = new TestAccessPointBuilder(mContext).setActive(false).build(); 126 127 assertSortingWorks(activeAp, inactiveAp); 128 } 129 130 @Test 131 public void testCompareTo_GivesReachableBeforeUnreachable() { 132 AccessPoint nearAp = new TestAccessPointBuilder(mContext).setReachable(true).build(); 133 AccessPoint farAp = new TestAccessPointBuilder(mContext).setReachable(false).build(); 134 135 assertSortingWorks(nearAp, farAp); 136 } 137 138 @Test 139 public void testCompareTo_GivesSavedBeforeUnsaved() { 140 AccessPoint savedAp = new TestAccessPointBuilder(mContext).setSaved(true).build(); 141 AccessPoint notSavedAp = new TestAccessPointBuilder(mContext).setSaved(false).build(); 142 143 assertSortingWorks(savedAp, notSavedAp); 144 } 145 146 //TODO: add tests for mRankingScore sort order if ranking is exposed 147 148 @Test 149 public void testCompareTo_GivesHighLevelBeforeLowLevel() { 150 final int highLevel = AccessPoint.SIGNAL_LEVELS - 1; 151 final int lowLevel = 1; 152 assertThat(highLevel).isGreaterThan(lowLevel); 153 154 AccessPoint strongAp = new TestAccessPointBuilder(mContext).setLevel(highLevel).build(); 155 AccessPoint weakAp = new TestAccessPointBuilder(mContext).setLevel(lowLevel).build(); 156 157 assertSortingWorks(strongAp, weakAp); 158 } 159 160 @Test 161 public void testCompareTo_GivesSsidAlphabetically() { 162 163 final String firstName = "AAAAAA"; 164 final String secondName = "zzzzzz"; 165 166 AccessPoint firstAp = new TestAccessPointBuilder(mContext).setSsid(firstName).build(); 167 AccessPoint secondAp = new TestAccessPointBuilder(mContext).setSsid(secondName).build(); 168 169 assertThat(firstAp.getSsidStr().compareToIgnoreCase(secondAp.getSsidStr()) < 0).isTrue(); 170 assertSortingWorks(firstAp, secondAp); 171 } 172 173 @Test 174 public void testCompareTo_GivesSsidCasePrecendenceAfterAlphabetical() { 175 176 final String firstName = "aaAaaa"; 177 final String secondName = "aaaaaa"; 178 final String thirdName = "BBBBBB"; 179 180 AccessPoint firstAp = new TestAccessPointBuilder(mContext).setSsid(firstName).build(); 181 AccessPoint secondAp = new TestAccessPointBuilder(mContext).setSsid(secondName).build(); 182 AccessPoint thirdAp = new TestAccessPointBuilder(mContext).setSsid(thirdName).build(); 183 184 assertSortingWorks(firstAp, secondAp); 185 assertSortingWorks(secondAp, thirdAp); 186 } 187 188 @Test 189 public void testCompareTo_AllSortingRulesCombined() { 190 191 AccessPoint active = new TestAccessPointBuilder(mContext).setActive(true).build(); 192 AccessPoint reachableAndMinLevel = new TestAccessPointBuilder(mContext) 193 .setReachable(true).build(); 194 AccessPoint saved = new TestAccessPointBuilder(mContext).setSaved(true).build(); 195 AccessPoint highLevelAndReachable = new TestAccessPointBuilder(mContext) 196 .setLevel(AccessPoint.SIGNAL_LEVELS - 1).build(); 197 AccessPoint firstName = new TestAccessPointBuilder(mContext).setSsid("a").build(); 198 AccessPoint lastname = new TestAccessPointBuilder(mContext).setSsid("z").build(); 199 200 ArrayList<AccessPoint> points = new ArrayList<AccessPoint>(); 201 points.add(lastname); 202 points.add(firstName); 203 points.add(highLevelAndReachable); 204 points.add(saved); 205 points.add(reachableAndMinLevel); 206 points.add(active); 207 208 Collections.sort(points); 209 assertThat(points.indexOf(active)).isLessThan(points.indexOf(reachableAndMinLevel)); 210 assertThat(points.indexOf(reachableAndMinLevel)).isLessThan(points.indexOf(saved)); 211 // note: the saved AP will not appear before highLevelAndReachable, 212 // because all APs with a signal level are reachable, 213 // and isReachable() takes higher sorting precedence than isSaved(). 214 assertThat(points.indexOf(saved)).isLessThan(points.indexOf(firstName)); 215 assertThat(points.indexOf(highLevelAndReachable)).isLessThan(points.indexOf(firstName)); 216 assertThat(points.indexOf(firstName)).isLessThan(points.indexOf(lastname)); 217 } 218 219 @Test 220 public void testRssiIsSetFromScanResults() { 221 AccessPoint ap = createAccessPointWithScanResultCache(); 222 int originalRssi = ap.getRssi(); 223 assertThat(originalRssi).isNotEqualTo(AccessPoint.UNREACHABLE_RSSI); 224 } 225 226 @Test 227 public void testGetRssiShouldReturnSetRssiValue() { 228 AccessPoint ap = createAccessPointWithScanResultCache(); 229 int originalRssi = ap.getRssi(); 230 int newRssi = originalRssi - 10; 231 ap.setRssi(newRssi); 232 assertThat(ap.getRssi()).isEqualTo(newRssi); 233 } 234 235 @Test 236 public void testUpdateWithScanResultShouldAverageRssi() { 237 String ssid = "ssid"; 238 int originalRssi = -65; 239 int newRssi = -80; 240 int expectedRssi = (originalRssi + newRssi) / 2; 241 AccessPoint ap = 242 new TestAccessPointBuilder(mContext).setSsid(ssid).setRssi(originalRssi).build(); 243 244 ScanResult scanResult = new ScanResult(); 245 scanResult.SSID = ssid; 246 scanResult.level = newRssi; 247 scanResult.BSSID = "bssid"; 248 scanResult.timestamp = SystemClock.elapsedRealtime() * 1000; 249 scanResult.capabilities = ""; 250 assertThat(ap.update(scanResult)).isTrue(); 251 252 assertThat(ap.getRssi()).isEqualTo(expectedRssi); 253 } 254 255 @Test 256 public void testCreateFromPasspointConfig() { 257 PasspointConfiguration config = new PasspointConfiguration(); 258 HomeSp homeSp = new HomeSp(); 259 homeSp.setFqdn("test.com"); 260 homeSp.setFriendlyName("Test Provider"); 261 config.setHomeSp(homeSp); 262 AccessPoint ap = new AccessPoint(mContext, config); 263 assertThat(ap.isPasspointConfig()).isTrue(); 264 } 265 266 @Test 267 public void testIsMetered_returnTrueWhenWifiConfigurationIsMetered() { 268 WifiConfiguration configuration = createWifiConfiguration(); 269 configuration.meteredHint = true; 270 271 NetworkInfo networkInfo = 272 new NetworkInfo(ConnectivityManager.TYPE_WIFI, 2, "WIFI", "WIFI_SUBTYPE"); 273 AccessPoint accessPoint = new AccessPoint(mContext, configuration); 274 WifiInfo wifiInfo = new WifiInfo(); 275 wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(configuration.SSID)); 276 wifiInfo.setBSSID(configuration.BSSID); 277 wifiInfo.setNetworkId(configuration.networkId); 278 accessPoint.update(configuration, wifiInfo, networkInfo); 279 280 assertThat(accessPoint.isMetered()).isTrue(); 281 } 282 283 @Test 284 public void testIsMetered_returnTrueWhenWifiInfoIsMetered() { 285 WifiConfiguration configuration = createWifiConfiguration(); 286 287 NetworkInfo networkInfo = 288 new NetworkInfo(ConnectivityManager.TYPE_WIFI, 2, "WIFI", "WIFI_SUBTYPE"); 289 AccessPoint accessPoint = new AccessPoint(mContext, configuration); 290 WifiInfo wifiInfo = new WifiInfo(); 291 wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(configuration.SSID)); 292 wifiInfo.setBSSID(configuration.BSSID); 293 wifiInfo.setNetworkId(configuration.networkId); 294 wifiInfo.setMeteredHint(true); 295 accessPoint.update(configuration, wifiInfo, networkInfo); 296 297 assertThat(accessPoint.isMetered()).isTrue(); 298 } 299 300 @Test 301 public void testIsMetered_returnTrueWhenScoredNetworkIsMetered() { 302 AccessPoint ap = createAccessPointWithScanResultCache(); 303 304 when(mockWifiNetworkScoreCache.getScoredNetwork(any(ScanResult.class))) 305 .thenReturn( 306 new ScoredNetwork( 307 null /* NetworkKey */, 308 null /* rssiCurve */, 309 true /* metered */)); 310 ap.update(mockWifiNetworkScoreCache, false /* scoringUiEnabled */); 311 312 assertThat(ap.isMetered()).isTrue(); 313 } 314 315 @Test 316 public void testIsMetered_returnFalseByDefault() { 317 WifiConfiguration configuration = createWifiConfiguration(); 318 319 NetworkInfo networkInfo = 320 new NetworkInfo(ConnectivityManager.TYPE_WIFI, 2, "WIFI", "WIFI_SUBTYPE"); 321 AccessPoint accessPoint = new AccessPoint(mContext, configuration); 322 WifiInfo wifiInfo = new WifiInfo(); 323 wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(configuration.SSID)); 324 wifiInfo.setBSSID(configuration.BSSID); 325 wifiInfo.setNetworkId(configuration.networkId); 326 accessPoint.update(configuration, wifiInfo, networkInfo); 327 328 assertThat(accessPoint.isMetered()).isFalse(); 329 } 330 331 @Test 332 public void testSpeedLabel_returnsVeryFast() { 333 AccessPoint ap = createAccessPointWithScanResultCache(); 334 335 when(mockWifiNetworkScoreCache.getScoredNetwork(any(ScanResult.class))) 336 .thenReturn(buildScoredNetworkWithMockBadgeCurve()); 337 when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) AccessPoint.Speed.VERY_FAST); 338 339 ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */); 340 341 assertThat(ap.getSpeed()).isEqualTo(AccessPoint.Speed.VERY_FAST); 342 assertThat(ap.getSpeedLabel()) 343 .isEqualTo(mContext.getString(R.string.speed_label_very_fast)); 344 } 345 346 @Test 347 public void testSpeedLabel_returnsFast() { 348 AccessPoint ap = createAccessPointWithScanResultCache(); 349 350 when(mockWifiNetworkScoreCache.getScoredNetwork(any(ScanResult.class))) 351 .thenReturn(buildScoredNetworkWithMockBadgeCurve()); 352 when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) AccessPoint.Speed.FAST); 353 354 ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */); 355 356 assertThat(ap.getSpeed()).isEqualTo(AccessPoint.Speed.FAST); 357 assertThat(ap.getSpeedLabel()) 358 .isEqualTo(mContext.getString(R.string.speed_label_fast)); 359 } 360 361 @Test 362 public void testSpeedLabel_returnsOkay() { 363 AccessPoint ap = createAccessPointWithScanResultCache(); 364 365 when(mockWifiNetworkScoreCache.getScoredNetwork(any(ScanResult.class))) 366 .thenReturn(buildScoredNetworkWithMockBadgeCurve()); 367 when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) AccessPoint.Speed.MODERATE); 368 369 ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */); 370 371 assertThat(ap.getSpeed()).isEqualTo(AccessPoint.Speed.MODERATE); 372 assertThat(ap.getSpeedLabel()) 373 .isEqualTo(mContext.getString(R.string.speed_label_okay)); 374 } 375 376 @Test 377 public void testSpeedLabel_returnsSlow() { 378 AccessPoint ap = createAccessPointWithScanResultCache(); 379 380 when(mockWifiNetworkScoreCache.getScoredNetwork(any(ScanResult.class))) 381 .thenReturn(buildScoredNetworkWithMockBadgeCurve()); 382 when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) AccessPoint.Speed.SLOW); 383 384 ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */); 385 386 assertThat(ap.getSpeed()).isEqualTo(AccessPoint.Speed.SLOW); 387 assertThat(ap.getSpeedLabel()) 388 .isEqualTo(mContext.getString(R.string.speed_label_slow)); 389 } 390 391 @Test 392 public void testSummaryString_showsSpeedLabel() { 393 AccessPoint ap = createAccessPointWithScanResultCache(); 394 395 when(mockWifiNetworkScoreCache.getScoredNetwork(any(ScanResult.class))) 396 .thenReturn(buildScoredNetworkWithMockBadgeCurve()); 397 when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) AccessPoint.Speed.VERY_FAST); 398 399 ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */); 400 401 assertThat(ap.getSummary()).isEqualTo(mContext.getString(R.string.speed_label_very_fast)); 402 } 403 404 @Test 405 public void testSummaryString_concatenatesSpeedLabel() { 406 AccessPoint ap = createAccessPointWithScanResultCache(); 407 ap.update(new WifiConfiguration()); 408 409 when(mockWifiNetworkScoreCache.getScoredNetwork(any(ScanResult.class))) 410 .thenReturn(buildScoredNetworkWithMockBadgeCurve()); 411 when(mockBadgeCurve.lookupScore(anyInt())).thenReturn((byte) AccessPoint.Speed.VERY_FAST); 412 413 ap.update(mockWifiNetworkScoreCache, true /* scoringUiEnabled */); 414 415 String expectedString = mContext.getString(R.string.speed_label_very_fast) + " / " 416 + mContext.getString(R.string.wifi_remembered); 417 assertThat(ap.getSummary()).isEqualTo(expectedString); 418 } 419 420 @Test 421 public void testSummaryString_showsWrongPasswordLabel() { 422 WifiConfiguration configuration = createWifiConfiguration(); 423 configuration.getNetworkSelectionStatus().setNetworkSelectionStatus( 424 WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_PERMANENTLY_DISABLED); 425 configuration.getNetworkSelectionStatus().setNetworkSelectionDisableReason( 426 WifiConfiguration.NetworkSelectionStatus.DISABLED_BY_WRONG_PASSWORD); 427 AccessPoint ap = new AccessPoint(mContext, configuration); 428 429 assertThat(ap.getSummary()).isEqualTo(mContext.getString( 430 R.string.wifi_check_password_try_again)); 431 } 432 433 private ScoredNetwork buildScoredNetworkWithMockBadgeCurve() { 434 Bundle attr1 = new Bundle(); 435 attr1.putParcelable(ScoredNetwork.ATTRIBUTES_KEY_BADGING_CURVE, mockBadgeCurve); 436 return new ScoredNetwork( 437 new NetworkKey(new WifiKey("\"ssid\"", "00:00:00:00:00:00")), 438 mockBadgeCurve, 439 false /* meteredHint */, 440 attr1); 441 442 } 443 444 private AccessPoint createAccessPointWithScanResultCache() { 445 Bundle bundle = new Bundle(); 446 ArrayList<ScanResult> scanResults = new ArrayList<>(); 447 for (int i = 0; i < 5; i++) { 448 ScanResult scanResult = new ScanResult(); 449 scanResult.level = i; 450 scanResult.BSSID = "bssid-" + i; 451 scanResult.timestamp = SystemClock.elapsedRealtime() * 1000; 452 scanResult.capabilities = ""; 453 scanResults.add(scanResult); 454 } 455 456 bundle.putParcelableArrayList(AccessPoint.KEY_SCANRESULTCACHE, scanResults); 457 return new AccessPoint(mContext, bundle); 458 } 459 460 private WifiConfiguration createWifiConfiguration() { 461 WifiConfiguration configuration = new WifiConfiguration(); 462 configuration.BSSID = "bssid"; 463 configuration.SSID = "ssid"; 464 configuration.networkId = 123; 465 return configuration; 466 } 467 468 /** 469 * Assert that the first AccessPoint appears after the second AccessPoint 470 * once sorting has been completed. 471 */ 472 private void assertSortingWorks(AccessPoint first, AccessPoint second) { 473 474 ArrayList<AccessPoint> points = new ArrayList<AccessPoint>(); 475 476 // add in reverse order so we can tell that sorting actually changed something 477 points.add(second); 478 points.add(first); 479 Collections.sort(points); 480 assertWithMessage( 481 String.format("After sorting: second AccessPoint should have higher array index " 482 + "than the first, but found indicies second '%s' and first '%s'.", 483 points.indexOf(second), points.indexOf(first))) 484 .that(points.indexOf(second)).isGreaterThan(points.indexOf(first)); 485 } 486 487 @Test 488 public void testBuilder_setActive() { 489 AccessPoint activeAp = new TestAccessPointBuilder(mContext).setActive(true).build(); 490 assertThat(activeAp.isActive()).isTrue(); 491 492 AccessPoint inactiveAp = new TestAccessPointBuilder(mContext).setActive(false).build(); 493 assertThat(inactiveAp.isActive()).isFalse(); 494 } 495 496 @Test 497 public void testBuilder_setReachable() { 498 AccessPoint nearAp = new TestAccessPointBuilder(mContext).setReachable(true).build(); 499 assertThat(nearAp.isReachable()).isTrue(); 500 501 AccessPoint farAp = new TestAccessPointBuilder(mContext).setReachable(false).build(); 502 assertThat(farAp.isReachable()).isFalse(); 503 } 504 505 @Test 506 public void testBuilder_setSaved() { 507 AccessPoint savedAp = new TestAccessPointBuilder(mContext).setSaved(true).build(); 508 assertThat(savedAp.isSaved()).isTrue(); 509 510 AccessPoint newAp = new TestAccessPointBuilder(mContext).setSaved(false).build(); 511 assertThat(newAp.isSaved()).isFalse(); 512 } 513 514 @Test 515 public void testBuilder_setLevel() { 516 AccessPoint testAp; 517 518 for (int i = 0; i < AccessPoint.SIGNAL_LEVELS; i++) { 519 testAp = new TestAccessPointBuilder(mContext).setLevel(i).build(); 520 assertThat(testAp.getLevel()).isEqualTo(i); 521 } 522 523 // numbers larger than the max level should be set to max 524 testAp = new TestAccessPointBuilder(mContext).setLevel(AccessPoint.SIGNAL_LEVELS).build(); 525 assertThat(testAp.getLevel()).isEqualTo(AccessPoint.SIGNAL_LEVELS - 1); 526 527 // numbers less than 0 should give level 0 528 testAp = new TestAccessPointBuilder(mContext).setLevel(-100).build(); 529 assertThat(testAp.getLevel()).isEqualTo(0); 530 } 531 532 @Test 533 public void testBuilder_settingReachableAfterLevelDoesNotAffectLevel() { 534 int level = 1; 535 assertThat(level).isLessThan(AccessPoint.SIGNAL_LEVELS - 1); 536 537 AccessPoint testAp = 538 new TestAccessPointBuilder(mContext).setLevel(level).setReachable(true).build(); 539 assertThat(testAp.getLevel()).isEqualTo(level); 540 } 541 542 @Test 543 public void testBuilder_setSsid() { 544 String name = "AmazingSsid!"; 545 AccessPoint namedAp = new TestAccessPointBuilder(mContext).setSsid(name).build(); 546 assertThat(namedAp.getSsidStr()).isEqualTo(name); 547 } 548 549 @Test 550 public void testBuilder_passpointConfig() { 551 String fqdn = "Test.com"; 552 String providerFriendlyName = "Test Provider"; 553 AccessPoint ap = new TestAccessPointBuilder(mContext).setFqdn(fqdn) 554 .setProviderFriendlyName(providerFriendlyName).build(); 555 assertThat(ap.isPasspointConfig()).isTrue(); 556 assertThat(ap.getPasspointFqdn()).isEqualTo(fqdn); 557 assertThat(ap.getConfigName()).isEqualTo(providerFriendlyName); 558 } 559 560 @Test 561 public void testUpdateNetworkInfo_returnsTrue() { 562 int networkId = 123; 563 int rssi = -55; 564 WifiConfiguration config = new WifiConfiguration(); 565 config.networkId = networkId; 566 WifiInfo wifiInfo = new WifiInfo(); 567 wifiInfo.setNetworkId(networkId); 568 wifiInfo.setRssi(rssi); 569 570 NetworkInfo networkInfo = 571 new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", ""); 572 networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTING, "", ""); 573 574 AccessPoint ap = new TestAccessPointBuilder(mContext) 575 .setNetworkInfo(networkInfo) 576 .setNetworkId(networkId) 577 .setRssi(rssi) 578 .setWifiInfo(wifiInfo) 579 .build(); 580 581 NetworkInfo newInfo = new NetworkInfo(networkInfo); 582 newInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "", ""); 583 assertThat(ap.update(config, wifiInfo, newInfo)).isTrue(); 584 } 585 586 @Test 587 public void testUpdateNetworkInfoWithSameInfo_returnsFalse() { 588 int networkId = 123; 589 int rssi = -55; 590 WifiConfiguration config = new WifiConfiguration(); 591 config.networkId = networkId; 592 WifiInfo wifiInfo = new WifiInfo(); 593 wifiInfo.setNetworkId(networkId); 594 wifiInfo.setRssi(rssi); 595 596 NetworkInfo networkInfo = 597 new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", ""); 598 networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTING, "", ""); 599 600 AccessPoint ap = new TestAccessPointBuilder(mContext) 601 .setNetworkInfo(networkInfo) 602 .setNetworkId(networkId) 603 .setRssi(rssi) 604 .setWifiInfo(wifiInfo) 605 .build(); 606 607 NetworkInfo newInfo = new NetworkInfo(networkInfo); // same values 608 assertThat(ap.update(config, wifiInfo, newInfo)).isFalse(); 609 } 610 611 @Test 612 public void testUpdateWithConfigChangeOnly_returnsFalseButInvokesListener() { 613 int networkId = 123; 614 int rssi = -55; 615 WifiConfiguration config = new WifiConfiguration(); 616 config.networkId = networkId; 617 config.numNoInternetAccessReports = 1; 618 619 WifiInfo wifiInfo = new WifiInfo(); 620 wifiInfo.setNetworkId(networkId); 621 wifiInfo.setRssi(rssi); 622 623 NetworkInfo networkInfo = 624 new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", ""); 625 networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, "", ""); 626 627 AccessPoint ap = new TestAccessPointBuilder(mContext) 628 .setNetworkInfo(networkInfo) 629 .setNetworkId(networkId) 630 .setRssi(rssi) 631 .setWifiInfo(wifiInfo) 632 .build(); 633 634 AccessPoint.AccessPointListener mockListener = mock(AccessPoint.AccessPointListener.class); 635 ap.setListener(mockListener); 636 WifiConfiguration newConfig = new WifiConfiguration(config); 637 config.validatedInternetAccess = true; 638 639 assertThat(ap.update(newConfig, wifiInfo, networkInfo)).isFalse(); 640 verify(mockListener).onAccessPointChanged(ap); 641 } 642 643 @Test 644 public void testUpdateWithNullWifiConfiguration_doesNotThrowNPE() { 645 int networkId = 123; 646 int rssi = -55; 647 WifiConfiguration config = new WifiConfiguration(); 648 config.networkId = networkId; 649 WifiInfo wifiInfo = new WifiInfo(); 650 wifiInfo.setNetworkId(networkId); 651 wifiInfo.setRssi(rssi); 652 653 NetworkInfo networkInfo = 654 new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, "WIFI", ""); 655 networkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTING, "", ""); 656 657 AccessPoint ap = new TestAccessPointBuilder(mContext) 658 .setNetworkInfo(networkInfo) 659 .setNetworkId(networkId) 660 .setRssi(rssi) 661 .setWifiInfo(wifiInfo) 662 .build(); 663 664 ap.update(null, wifiInfo, networkInfo); 665 } 666} 667