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.wifi; 18 19 import static android.net.wifi.ScanResult.WIFI_BAND_5_GHZ; 20 import static android.os.PatternMatcher.PATTERN_LITERAL; 21 import static android.os.PatternMatcher.PATTERN_PREFIX; 22 import static android.os.PatternMatcher.PATTERN_SIMPLE_GLOB; 23 24 import static org.junit.Assert.assertArrayEquals; 25 import static org.junit.Assert.assertEquals; 26 import static org.junit.Assert.assertFalse; 27 import static org.junit.Assert.assertNotNull; 28 import static org.junit.Assert.assertNull; 29 import static org.junit.Assert.assertThrows; 30 import static org.junit.Assert.assertTrue; 31 import static org.junit.Assume.assumeTrue; 32 33 import android.net.MacAddress; 34 import android.net.MatchAllNetworkSpecifier; 35 import android.net.NetworkSpecifier; 36 import android.os.Parcel; 37 import android.os.PatternMatcher; 38 import android.util.Pair; 39 40 import androidx.test.filters.SmallTest; 41 42 import com.android.modules.utils.build.SdkLevel; 43 44 import org.junit.Test; 45 46 import java.security.cert.X509Certificate; 47 48 /** 49 * Unit tests for {@link android.net.wifi.WifiNetworkSpecifier}. 50 */ 51 @SmallTest 52 public class WifiNetworkSpecifierTest { 53 private static final String TEST_SSID = "Test123"; 54 private static final String TEST_BSSID_OUI_BASE_ADDRESS = "12:12:12:00:00:00"; 55 private static final String TEST_BSSID_OUI_MASK = "ff:ff:ff:00:00:00"; 56 private static final String TEST_BSSID = "12:12:12:12:12:12"; 57 private static final String TEST_PRESHARED_KEY = "\"Test123\""; 58 private static final String TEST_DOMAIN_SUFFIX_MATCH = "domainSuffixMatch"; 59 60 /** 61 * Validate correctness of WifiNetworkSpecifier object created by 62 * {@link WifiNetworkSpecifier.Builder#build()} for open network with SSID pattern. 63 */ 64 @Test testWifiNetworkSpecifierBuilderForOpenNetworkWithSsidPattern()65 public void testWifiNetworkSpecifierBuilderForOpenNetworkWithSsidPattern() { 66 NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() 67 .setSsidPattern(new PatternMatcher(TEST_SSID, PATTERN_PREFIX)) 68 .build(); 69 70 assertTrue(specifier instanceof WifiNetworkSpecifier); 71 WifiNetworkSpecifier wifiNetworkSpecifier = (WifiNetworkSpecifier) specifier; 72 73 assertEquals(TEST_SSID, wifiNetworkSpecifier.ssidPatternMatcher.getPath()); 74 assertEquals(PATTERN_PREFIX, wifiNetworkSpecifier.ssidPatternMatcher.getType()); 75 assertEquals(WifiManager.ALL_ZEROS_MAC_ADDRESS, 76 wifiNetworkSpecifier.bssidPatternMatcher.first); 77 assertEquals(WifiManager.ALL_ZEROS_MAC_ADDRESS, 78 wifiNetworkSpecifier.bssidPatternMatcher.second); 79 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 80 .get(WifiConfiguration.KeyMgmt.NONE)); 81 } 82 83 /** 84 * Validate correctness of WifiNetworkSpecifier object created by 85 * {@link WifiNetworkSpecifier.Builder#build()} for WPA_PSK network with BSSID 86 * pattern. 87 */ 88 @Test testWifiNetworkSpecifierBuilderForWpa2PskNetworkWithBssidPattern()89 public void testWifiNetworkSpecifierBuilderForWpa2PskNetworkWithBssidPattern() { 90 NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() 91 .setBssidPattern(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS), 92 MacAddress.fromString(TEST_BSSID_OUI_MASK)) 93 .setWpa2Passphrase(TEST_PRESHARED_KEY) 94 .build(); 95 96 assertTrue(specifier instanceof WifiNetworkSpecifier); 97 WifiNetworkSpecifier wifiNetworkSpecifier = (WifiNetworkSpecifier) specifier; 98 99 assertEquals(".*", wifiNetworkSpecifier.ssidPatternMatcher.getPath()); 100 assertEquals(PATTERN_SIMPLE_GLOB, wifiNetworkSpecifier.ssidPatternMatcher.getType()); 101 assertEquals(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS), 102 wifiNetworkSpecifier.bssidPatternMatcher.first); 103 assertEquals(MacAddress.fromString(TEST_BSSID_OUI_MASK), 104 wifiNetworkSpecifier.bssidPatternMatcher.second); 105 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 106 .get(WifiConfiguration.KeyMgmt.WPA_PSK)); 107 assertEquals("\"" + TEST_PRESHARED_KEY + "\"", 108 wifiNetworkSpecifier.wifiConfiguration.preSharedKey); 109 } 110 111 /** 112 * Validate correctness of WifiNetworkSpecifier object created by 113 * {@link WifiNetworkSpecifier.Builder#build()} for WPA_EAP network with 114 * SSID and BSSID pattern. 115 */ 116 @Test testWifiNetworkSpecifierBuilderForWpa2EapHiddenNetworkWithSsidAndBssid()117 public void testWifiNetworkSpecifierBuilderForWpa2EapHiddenNetworkWithSsidAndBssid() { 118 WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig(); 119 enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 120 enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.GTC); 121 122 NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() 123 .setSsid(TEST_SSID) 124 .setBssid(MacAddress.fromString(TEST_BSSID)) 125 .setWpa2EnterpriseConfig(enterpriseConfig) 126 .setIsHiddenSsid(true) 127 .build(); 128 129 assertTrue(specifier instanceof WifiNetworkSpecifier); 130 WifiNetworkSpecifier wifiNetworkSpecifier = (WifiNetworkSpecifier) specifier; 131 132 assertEquals(TEST_SSID, wifiNetworkSpecifier.ssidPatternMatcher.getPath()); 133 assertEquals(PATTERN_LITERAL, wifiNetworkSpecifier.ssidPatternMatcher.getType()); 134 assertEquals(MacAddress.fromString(TEST_BSSID), 135 wifiNetworkSpecifier.bssidPatternMatcher.first); 136 assertEquals(MacAddress.BROADCAST_ADDRESS, 137 wifiNetworkSpecifier.bssidPatternMatcher.second); 138 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 139 .get(WifiConfiguration.KeyMgmt.WPA_EAP)); 140 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 141 .get(WifiConfiguration.KeyMgmt.IEEE8021X)); 142 assertTrue(wifiNetworkSpecifier.wifiConfiguration.hiddenSSID); 143 assertEquals(enterpriseConfig.getEapMethod(), 144 wifiNetworkSpecifier.wifiConfiguration.enterpriseConfig.getEapMethod()); 145 assertEquals(enterpriseConfig.getPhase2Method(), 146 wifiNetworkSpecifier.wifiConfiguration.enterpriseConfig.getPhase2Method()); 147 } 148 149 /** 150 * Validate correctness of WifiNetworkSpecifier object created by 151 * {@link WifiNetworkSpecifier.Builder#build()} for WPA3-Enterprise network. 152 */ 153 @Test testWifiNetworkSpecifierBuilderForWpa3EapNetwork()154 public void testWifiNetworkSpecifierBuilderForWpa3EapNetwork() { 155 WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig(); 156 enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 157 enterpriseConfig.setCaCertificate(FakeKeys.CA_CERT0); 158 enterpriseConfig.setDomainSuffixMatch(TEST_DOMAIN_SUFFIX_MATCH); 159 160 NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() 161 .setSsid(TEST_SSID) 162 .setWpa3EnterpriseConfig(enterpriseConfig) 163 .build(); 164 165 assertTrue(specifier instanceof WifiNetworkSpecifier); 166 WifiNetworkSpecifier wifiNetworkSpecifier = (WifiNetworkSpecifier) specifier; 167 168 assertEquals("\"" + TEST_SSID + "\"", wifiNetworkSpecifier.wifiConfiguration.SSID); 169 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 170 .get(WifiConfiguration.KeyMgmt.IEEE8021X)); 171 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 172 .get(WifiConfiguration.KeyMgmt.WPA_EAP)); 173 assertFalse(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 174 .get(WifiConfiguration.KeyMgmt.SUITE_B_192)); 175 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupCiphers 176 .get(WifiConfiguration.GroupCipher.CCMP)); 177 assertTrue(wifiNetworkSpecifier.wifiConfiguration.requirePmf); 178 assertNull(wifiNetworkSpecifier.wifiConfiguration.preSharedKey); 179 assertNotNull(wifiNetworkSpecifier.wifiConfiguration.enterpriseConfig); 180 } 181 182 /** 183 * Validate correctness of WifiNetworkSpecifier object created by 184 * {@link WifiNetworkSpecifier.Builder#build()} for WPA3-Enterprise network. 185 */ 186 @Test testWifiNetworkSpecifierBuilderForWpa3EapNetworkWithStandardApi()187 public void testWifiNetworkSpecifierBuilderForWpa3EapNetworkWithStandardApi() { 188 assumeTrue(SdkLevel.isAtLeastS()); 189 WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig(); 190 enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 191 enterpriseConfig.setCaCertificate(FakeKeys.CA_CERT0); 192 enterpriseConfig.setDomainSuffixMatch(TEST_DOMAIN_SUFFIX_MATCH); 193 194 NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() 195 .setSsid(TEST_SSID) 196 .setWpa3EnterpriseStandardModeConfig(enterpriseConfig) 197 .build(); 198 199 assertTrue(specifier instanceof WifiNetworkSpecifier); 200 WifiNetworkSpecifier wifiNetworkSpecifier = (WifiNetworkSpecifier) specifier; 201 202 assertEquals("\"" + TEST_SSID + "\"", wifiNetworkSpecifier.wifiConfiguration.SSID); 203 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 204 .get(WifiConfiguration.KeyMgmt.IEEE8021X)); 205 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 206 .get(WifiConfiguration.KeyMgmt.WPA_EAP)); 207 assertFalse(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 208 .get(WifiConfiguration.KeyMgmt.SUITE_B_192)); 209 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupCiphers 210 .get(WifiConfiguration.GroupCipher.CCMP)); 211 assertTrue(wifiNetworkSpecifier.wifiConfiguration.requirePmf); 212 assertNull(wifiNetworkSpecifier.wifiConfiguration.preSharedKey); 213 assertNotNull(wifiNetworkSpecifier.wifiConfiguration.enterpriseConfig); 214 } 215 216 /** 217 * Validate correctness of WifiNetworkSpecifier object created by 218 * {@link WifiNetworkSpecifier.Builder#build()} for WPA3-Enterprise network 219 * with 192-bit RSA certificates. 220 */ 221 @Test testWifiNetworkSpecifierBuilderForWpa3EapNetworkWithSuiteBRsaCerts()222 public void testWifiNetworkSpecifierBuilderForWpa3EapNetworkWithSuiteBRsaCerts() { 223 assumeTrue(SdkLevel.isAtLeastS()); 224 WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig(); 225 enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 226 enterpriseConfig.setCaCertificate(FakeKeys.CA_SUITE_B_RSA3072_CERT); 227 enterpriseConfig.setClientKeyEntryWithCertificateChain(FakeKeys.CLIENT_SUITE_B_RSA3072_KEY, 228 new X509Certificate[] {FakeKeys.CLIENT_SUITE_B_RSA3072_CERT}); 229 230 enterpriseConfig.setDomainSuffixMatch(TEST_DOMAIN_SUFFIX_MATCH); 231 232 NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() 233 .setSsid(TEST_SSID) 234 .setWpa3EnterpriseStandardModeConfig(enterpriseConfig) 235 .build(); 236 237 assertTrue(specifier instanceof WifiNetworkSpecifier); 238 WifiNetworkSpecifier wifiNetworkSpecifier = (WifiNetworkSpecifier) specifier; 239 240 assertEquals("\"" + TEST_SSID + "\"", wifiNetworkSpecifier.wifiConfiguration.SSID); 241 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 242 .get(WifiConfiguration.KeyMgmt.IEEE8021X)); 243 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 244 .get(WifiConfiguration.KeyMgmt.WPA_EAP)); 245 assertFalse(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 246 .get(WifiConfiguration.KeyMgmt.SUITE_B_192)); 247 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupCiphers 248 .get(WifiConfiguration.GroupCipher.CCMP)); 249 assertTrue(wifiNetworkSpecifier.wifiConfiguration.requirePmf); 250 assertNull(wifiNetworkSpecifier.wifiConfiguration.preSharedKey); 251 assertNotNull(wifiNetworkSpecifier.wifiConfiguration.enterpriseConfig); 252 } 253 254 /** 255 * Validate correctness of WifiNetworkSpecifier object created by 256 * {@link WifiNetworkSpecifier.Builder#build()} for WPA3-Enterprise network 257 * with 192-bit ECC certificates. 258 */ 259 @Test testWifiNetworkSpecifierBuilderForWpa3EapNetworkWithSuiteBEccCerts()260 public void testWifiNetworkSpecifierBuilderForWpa3EapNetworkWithSuiteBEccCerts() { 261 assumeTrue(SdkLevel.isAtLeastS()); 262 WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig(); 263 enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 264 enterpriseConfig.setCaCertificate(FakeKeys.CA_SUITE_B_ECDSA_CERT); 265 enterpriseConfig.setClientKeyEntryWithCertificateChain(FakeKeys.CLIENT_SUITE_B_ECC_KEY, 266 new X509Certificate[] {FakeKeys.CLIENT_SUITE_B_ECDSA_CERT}); 267 268 enterpriseConfig.setDomainSuffixMatch(TEST_DOMAIN_SUFFIX_MATCH); 269 270 NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() 271 .setSsid(TEST_SSID) 272 .setWpa3EnterpriseStandardModeConfig(enterpriseConfig) 273 .build(); 274 275 assertTrue(specifier instanceof WifiNetworkSpecifier); 276 WifiNetworkSpecifier wifiNetworkSpecifier = (WifiNetworkSpecifier) specifier; 277 278 assertEquals("\"" + TEST_SSID + "\"", wifiNetworkSpecifier.wifiConfiguration.SSID); 279 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 280 .get(WifiConfiguration.KeyMgmt.IEEE8021X)); 281 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 282 .get(WifiConfiguration.KeyMgmt.WPA_EAP)); 283 assertFalse(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 284 .get(WifiConfiguration.KeyMgmt.SUITE_B_192)); 285 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupCiphers 286 .get(WifiConfiguration.GroupCipher.CCMP)); 287 assertTrue(wifiNetworkSpecifier.wifiConfiguration.requirePmf); 288 assertNull(wifiNetworkSpecifier.wifiConfiguration.preSharedKey); 289 assertNotNull(wifiNetworkSpecifier.wifiConfiguration.enterpriseConfig); 290 } 291 292 /** 293 * Validate correctness of WifiNetworkSpecifier object created by 294 * {@link WifiNetworkSpecifier.Builder#build()} for WPA3-Enterprise 192-bit RSA SuiteB network. 295 */ 296 @Test testWifiNetworkSpecifierBuilderForWpa3SuiteBRsaEapNetwork()297 public void testWifiNetworkSpecifierBuilderForWpa3SuiteBRsaEapNetwork() { 298 WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig(); 299 enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 300 enterpriseConfig.setCaCertificate(FakeKeys.CA_SUITE_B_RSA3072_CERT); 301 enterpriseConfig.setClientKeyEntryWithCertificateChain(FakeKeys.CLIENT_SUITE_B_RSA3072_KEY, 302 new X509Certificate[] {FakeKeys.CLIENT_SUITE_B_RSA3072_CERT}); 303 304 enterpriseConfig.setDomainSuffixMatch(TEST_DOMAIN_SUFFIX_MATCH); 305 306 NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() 307 .setSsid(TEST_SSID) 308 .setWpa3EnterpriseConfig(enterpriseConfig) 309 .build(); 310 311 assertTrue(specifier instanceof WifiNetworkSpecifier); 312 WifiNetworkSpecifier wifiNetworkSpecifier = (WifiNetworkSpecifier) specifier; 313 314 assertEquals("\"" + TEST_SSID + "\"", wifiNetworkSpecifier.wifiConfiguration.SSID); 315 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 316 .get(WifiConfiguration.KeyMgmt.SUITE_B_192)); 317 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupCiphers 318 .get(WifiConfiguration.GroupCipher.GCMP_256)); 319 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupManagementCiphers 320 .get(WifiConfiguration.GroupMgmtCipher.BIP_GMAC_256)); 321 assertTrue(wifiNetworkSpecifier.wifiConfiguration.requirePmf); 322 assertNull(wifiNetworkSpecifier.wifiConfiguration.preSharedKey); 323 assertNotNull(wifiNetworkSpecifier.wifiConfiguration.enterpriseConfig); 324 } 325 326 /** 327 * Validate correctness of WifiNetworkSpecifier object created by 328 * {@link WifiNetworkSpecifier.Builder#build()} for WPA3-Enterprise 192-bit ECC SuiteB network. 329 */ 330 @Test testWifiNetworkSpecifierBuilderForWpa3SuiteBEccEapNetwork()331 public void testWifiNetworkSpecifierBuilderForWpa3SuiteBEccEapNetwork() { 332 WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig(); 333 enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 334 enterpriseConfig.setCaCertificate(FakeKeys.CA_SUITE_B_ECDSA_CERT); 335 enterpriseConfig.setClientKeyEntryWithCertificateChain(FakeKeys.CLIENT_SUITE_B_ECC_KEY, 336 new X509Certificate[] {FakeKeys.CLIENT_SUITE_B_ECDSA_CERT}); 337 338 enterpriseConfig.setDomainSuffixMatch(TEST_DOMAIN_SUFFIX_MATCH); 339 340 NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() 341 .setSsid(TEST_SSID) 342 .setWpa3EnterpriseConfig(enterpriseConfig) 343 .build(); 344 345 assertTrue(specifier instanceof WifiNetworkSpecifier); 346 WifiNetworkSpecifier wifiNetworkSpecifier = (WifiNetworkSpecifier) specifier; 347 348 assertEquals("\"" + TEST_SSID + "\"", wifiNetworkSpecifier.wifiConfiguration.SSID); 349 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 350 .get(WifiConfiguration.KeyMgmt.SUITE_B_192)); 351 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupCiphers 352 .get(WifiConfiguration.GroupCipher.GCMP_256)); 353 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupManagementCiphers 354 .get(WifiConfiguration.GroupMgmtCipher.BIP_GMAC_256)); 355 assertTrue(wifiNetworkSpecifier.wifiConfiguration.requirePmf); 356 assertNull(wifiNetworkSpecifier.wifiConfiguration.preSharedKey); 357 assertNotNull(wifiNetworkSpecifier.wifiConfiguration.enterpriseConfig); 358 } 359 360 /** 361 * Validate correctness of WifiNetworkSpecifier object created by 362 * {@link WifiNetworkSpecifier.Builder#build()} for WPA3-Enterprise 192-bit RSA SuiteB network. 363 */ 364 @Test testWifiNetworkSpecifierBuilderForWpa3SuiteBRsaEapNetworkWith192BitApi()365 public void testWifiNetworkSpecifierBuilderForWpa3SuiteBRsaEapNetworkWith192BitApi() { 366 assumeTrue(SdkLevel.isAtLeastS()); 367 WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig(); 368 enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 369 enterpriseConfig.setCaCertificate(FakeKeys.CA_SUITE_B_RSA3072_CERT); 370 enterpriseConfig.setClientKeyEntryWithCertificateChain(FakeKeys.CLIENT_SUITE_B_RSA3072_KEY, 371 new X509Certificate[] {FakeKeys.CLIENT_SUITE_B_RSA3072_CERT}); 372 373 enterpriseConfig.setDomainSuffixMatch(TEST_DOMAIN_SUFFIX_MATCH); 374 375 NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() 376 .setSsid(TEST_SSID) 377 .setWpa3Enterprise192BitModeConfig(enterpriseConfig) 378 .build(); 379 380 assertTrue(specifier instanceof WifiNetworkSpecifier); 381 WifiNetworkSpecifier wifiNetworkSpecifier = (WifiNetworkSpecifier) specifier; 382 383 assertEquals("\"" + TEST_SSID + "\"", wifiNetworkSpecifier.wifiConfiguration.SSID); 384 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 385 .get(WifiConfiguration.KeyMgmt.SUITE_B_192)); 386 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupCiphers 387 .get(WifiConfiguration.GroupCipher.GCMP_256)); 388 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupManagementCiphers 389 .get(WifiConfiguration.GroupMgmtCipher.BIP_GMAC_256)); 390 assertTrue(wifiNetworkSpecifier.wifiConfiguration.requirePmf); 391 assertNull(wifiNetworkSpecifier.wifiConfiguration.preSharedKey); 392 assertNotNull(wifiNetworkSpecifier.wifiConfiguration.enterpriseConfig); 393 } 394 395 /** 396 * Validate correctness of WifiNetworkSpecifier object created by 397 * {@link WifiNetworkSpecifier.Builder#build()} for WPA3-Enterprise 192-bit ECC SuiteB network. 398 */ 399 @Test testWifiNetworkSpecifierBuilderForWpa3SuiteBEccEapNetworkWith192BitApi()400 public void testWifiNetworkSpecifierBuilderForWpa3SuiteBEccEapNetworkWith192BitApi() { 401 assumeTrue(SdkLevel.isAtLeastS()); 402 WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig(); 403 enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 404 enterpriseConfig.setCaCertificate(FakeKeys.CA_SUITE_B_ECDSA_CERT); 405 enterpriseConfig.setClientKeyEntryWithCertificateChain(FakeKeys.CLIENT_SUITE_B_ECC_KEY, 406 new X509Certificate[] {FakeKeys.CLIENT_SUITE_B_ECDSA_CERT}); 407 408 enterpriseConfig.setDomainSuffixMatch(TEST_DOMAIN_SUFFIX_MATCH); 409 410 NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() 411 .setSsid(TEST_SSID) 412 .setWpa3Enterprise192BitModeConfig(enterpriseConfig) 413 .build(); 414 415 assertTrue(specifier instanceof WifiNetworkSpecifier); 416 WifiNetworkSpecifier wifiNetworkSpecifier = (WifiNetworkSpecifier) specifier; 417 418 assertEquals("\"" + TEST_SSID + "\"", wifiNetworkSpecifier.wifiConfiguration.SSID); 419 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedKeyManagement 420 .get(WifiConfiguration.KeyMgmt.SUITE_B_192)); 421 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupCiphers 422 .get(WifiConfiguration.GroupCipher.GCMP_256)); 423 assertTrue(wifiNetworkSpecifier.wifiConfiguration.allowedGroupManagementCiphers 424 .get(WifiConfiguration.GroupMgmtCipher.BIP_GMAC_256)); 425 assertTrue(wifiNetworkSpecifier.wifiConfiguration.requirePmf); 426 assertNull(wifiNetworkSpecifier.wifiConfiguration.preSharedKey); 427 assertNotNull(wifiNetworkSpecifier.wifiConfiguration.enterpriseConfig); 428 } 429 430 /** 431 * Ensure {@link WifiNetworkSpecifier.Builder#setSsid(String)} throws an exception 432 * when the string is not Unicode. 433 */ 434 @Test(expected = IllegalArgumentException.class) testWifiNetworkSpecifierBuilderSetSsidWithNonUnicodeString()435 public void testWifiNetworkSpecifierBuilderSetSsidWithNonUnicodeString() { 436 new WifiNetworkSpecifier.Builder() 437 .setSsid("\ud800") 438 .build(); 439 } 440 441 /** 442 * Ensure {@link WifiNetworkSpecifier.Builder#setWpa2Passphrase(String)} throws an exception 443 * when the string is not ASCII encodable. 444 */ 445 @Test(expected = IllegalArgumentException.class) testWifiNetworkSpecifierSetWpa2PasphraseWithNonAsciiString()446 public void testWifiNetworkSpecifierSetWpa2PasphraseWithNonAsciiString() { 447 new WifiNetworkSpecifier.Builder() 448 .setSsid(TEST_SSID) 449 .setWpa2Passphrase("salvē") 450 .build(); 451 } 452 453 /** 454 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 455 * when neither SSID nor BSSID patterns were set. 456 */ 457 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithNoSsidAndBssidPattern()458 public void testWifiNetworkSpecifierBuilderWithNoSsidAndBssidPattern() { 459 new WifiNetworkSpecifier.Builder().build(); 460 } 461 462 /** 463 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 464 * when match-all SSID pattern is set. 465 */ 466 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithMatchAllSsidPattern1()467 public void testWifiNetworkSpecifierBuilderWithMatchAllSsidPattern1() { 468 new WifiNetworkSpecifier.Builder() 469 .setSsidPattern(new PatternMatcher(".*", PATTERN_SIMPLE_GLOB)) 470 .build(); 471 } 472 473 /** 474 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 475 * when match-all SSID pattern is set. 476 */ 477 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithMatchAllSsidPattern2()478 public void testWifiNetworkSpecifierBuilderWithMatchAllSsidPattern2() { 479 new WifiNetworkSpecifier.Builder() 480 .setSsidPattern(new PatternMatcher(".*", PatternMatcher.PATTERN_ADVANCED_GLOB)) 481 .build(); 482 } 483 484 /** 485 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 486 * when match-all SSID pattern is set. 487 */ 488 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithMatchAllSsidPattern3()489 public void testWifiNetworkSpecifierBuilderWithMatchAllSsidPattern3() { 490 new WifiNetworkSpecifier.Builder() 491 .setSsidPattern(new PatternMatcher("", PATTERN_PREFIX)) 492 .build(); 493 } 494 495 /** 496 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 497 * when match-all BSSID pattern is set. 498 */ 499 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithMatchAllBssidPattern()500 public void testWifiNetworkSpecifierBuilderWithMatchAllBssidPattern() { 501 new WifiNetworkSpecifier.Builder() 502 .setBssidPattern(WifiManager.ALL_ZEROS_MAC_ADDRESS, 503 WifiManager.ALL_ZEROS_MAC_ADDRESS) 504 .build(); 505 } 506 507 /** 508 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 509 * when match-none SSID pattern is set. 510 */ 511 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithMatchNoneSsidPattern1()512 public void testWifiNetworkSpecifierBuilderWithMatchNoneSsidPattern1() { 513 new WifiNetworkSpecifier.Builder() 514 .setSsidPattern(new PatternMatcher("", PatternMatcher.PATTERN_LITERAL)) 515 .build(); 516 } 517 518 /** 519 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 520 * when match-none SSID pattern is set. 521 */ 522 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithMatchNoneSsidPattern2()523 public void testWifiNetworkSpecifierBuilderWithMatchNoneSsidPattern2() { 524 new WifiNetworkSpecifier.Builder() 525 .setSsid("") 526 .build(); 527 } 528 529 /** 530 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 531 * when match-none BSSID pattern is set. 532 */ 533 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithMatchNoneBssidPattern1()534 public void testWifiNetworkSpecifierBuilderWithMatchNoneBssidPattern1() { 535 new WifiNetworkSpecifier.Builder() 536 .setBssidPattern(MacAddress.BROADCAST_ADDRESS, MacAddress.BROADCAST_ADDRESS) 537 .build(); 538 } 539 540 /** 541 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 542 * when match-none BSSID pattern is set. 543 */ 544 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithMatchNoneBssidPattern2()545 public void testWifiNetworkSpecifierBuilderWithMatchNoneBssidPattern2() { 546 new WifiNetworkSpecifier.Builder() 547 .setBssid(MacAddress.BROADCAST_ADDRESS) 548 .build(); 549 } 550 551 /** 552 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 553 * when match-none BSSID pattern is set. 554 */ 555 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithMatchNoneBssidPattern3()556 public void testWifiNetworkSpecifierBuilderWithMatchNoneBssidPattern3() { 557 new WifiNetworkSpecifier.Builder() 558 .setBssid(WifiManager.ALL_ZEROS_MAC_ADDRESS) 559 .build(); 560 } 561 562 /** 563 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 564 * when SSID pattern is set for hidden network. 565 */ 566 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithBssidMatchPatternForHiddenNetwork()567 public void testWifiNetworkSpecifierBuilderWithBssidMatchPatternForHiddenNetwork() { 568 new WifiNetworkSpecifier.Builder() 569 .setBssidPattern(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS), 570 MacAddress.fromString(TEST_BSSID_OUI_MASK)) 571 .setIsHiddenSsid(true) 572 .build(); 573 } 574 575 /** 576 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 577 * when both {@link WifiNetworkSpecifier.Builder#setWpa2Passphrase(String)} and 578 * {@link WifiNetworkSpecifier.Builder#setWpa2EnterpriseConfig(WifiEnterpriseConfig)} are 579 * invoked. 580 */ 581 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithBothWpa2PasphraseAndEnterpriseConfig()582 public void testWifiNetworkSpecifierBuilderWithBothWpa2PasphraseAndEnterpriseConfig() { 583 new WifiNetworkSpecifier.Builder() 584 .setSsidPattern(new PatternMatcher(TEST_SSID, PATTERN_LITERAL)) 585 .setWpa2Passphrase(TEST_PRESHARED_KEY) 586 .setWpa2EnterpriseConfig(new WifiEnterpriseConfig()) 587 .build(); 588 } 589 590 /** 591 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 592 * when SSID pattern is set for hidden network. 593 */ 594 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithSsidMatchPatternForHiddenNetwork()595 public void testWifiNetworkSpecifierBuilderWithSsidMatchPatternForHiddenNetwork() { 596 new WifiNetworkSpecifier.Builder() 597 .setSsidPattern(new PatternMatcher(TEST_SSID, PATTERN_PREFIX)) 598 .setIsHiddenSsid(true) 599 .build(); 600 } 601 602 /** 603 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 604 * when both {@link WifiNetworkSpecifier.Builder#setWpa2Passphrase(String)} and 605 * {@link WifiNetworkSpecifier.Builder#setWpa3Passphrase(String)} are invoked. 606 */ 607 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithBothWpa2PasphraseAndWpa3Passphrase()608 public void testWifiNetworkSpecifierBuilderWithBothWpa2PasphraseAndWpa3Passphrase() { 609 new WifiNetworkSpecifier.Builder() 610 .setSsidPattern(new PatternMatcher(TEST_SSID, PATTERN_LITERAL)) 611 .setWpa2Passphrase(TEST_PRESHARED_KEY) 612 .setWpa3Passphrase(TEST_PRESHARED_KEY) 613 .build(); 614 } 615 616 /** 617 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 618 * when both {@link WifiNetworkSpecifier.Builder#setWpa3Passphrase(String)} and 619 * {@link WifiNetworkSpecifier.Builder 620 * #setWpa3EnterpriseStandardModeConfig(WifiEnterpriseConfig)} 621 * are invoked. 622 */ 623 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithBothWpa3PasphraseAndEnterprise()624 public void testWifiNetworkSpecifierBuilderWithBothWpa3PasphraseAndEnterprise() { 625 assumeTrue(SdkLevel.isAtLeastS()); 626 new WifiNetworkSpecifier.Builder() 627 .setSsidPattern(new PatternMatcher(TEST_SSID, PATTERN_LITERAL)) 628 .setWpa3Passphrase(TEST_PRESHARED_KEY) 629 .setWpa3EnterpriseStandardModeConfig(new WifiEnterpriseConfig()) 630 .build(); 631 } 632 633 /** 634 * Ensure {@link WifiNetworkSpecifier.Builder#build()} throws an exception 635 * when both {@link WifiNetworkSpecifier.Builder#setWpa3Passphrase(String)} and 636 * {@link WifiNetworkSpecifier.Builder#setIsEnhancedOpen(boolean)} are invoked. 637 */ 638 @Test(expected = IllegalStateException.class) testWifiNetworkSpecifierBuilderWithBothWpa3PasphraseAndEnhancedOpen()639 public void testWifiNetworkSpecifierBuilderWithBothWpa3PasphraseAndEnhancedOpen() { 640 new WifiNetworkSpecifier.Builder() 641 .setSsidPattern(new PatternMatcher(TEST_SSID, PATTERN_LITERAL)) 642 .setWpa3Passphrase(TEST_PRESHARED_KEY) 643 .setIsEnhancedOpen(true) 644 .build(); 645 } 646 647 /** 648 * Validate that parcel marshalling/unmarshalling works 649 */ 650 @Test testWifiNetworkSpecifierParcel()651 public void testWifiNetworkSpecifierParcel() { 652 WifiConfiguration wifiConfiguration = new WifiConfiguration(); 653 wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 654 wifiConfiguration.preSharedKey = TEST_PRESHARED_KEY; 655 WifiNetworkSpecifier specifier = 656 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL), 657 Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS), 658 MacAddress.fromString(TEST_BSSID_OUI_MASK)), 659 WIFI_BAND_5_GHZ, 660 wifiConfiguration, new int[0]); 661 662 Parcel parcelW = Parcel.obtain(); 663 specifier.writeToParcel(parcelW, 0); 664 byte[] bytes = parcelW.marshall(); 665 parcelW.recycle(); 666 667 Parcel parcelR = Parcel.obtain(); 668 parcelR.unmarshall(bytes, 0, bytes.length); 669 parcelR.setDataPosition(0); 670 WifiNetworkSpecifier parcelSpecifier = 671 WifiNetworkSpecifier.CREATOR.createFromParcel(parcelR); 672 673 assertEquals(specifier, parcelSpecifier); 674 } 675 676 /** 677 * Validate NetworkSpecifier matching. 678 * a) Create a network specifier for WPA_PSK network 679 * b) Ensure that the specifier does not match {@code null} and {@link MatchAllNetworkSpecifier} 680 * specifiers. 681 */ 682 @Test testWifiNetworkSpecifierDoesNotSatisfyNullAndAllMatch()683 public void testWifiNetworkSpecifierDoesNotSatisfyNullAndAllMatch() { 684 WifiConfiguration wifiConfiguration = new WifiConfiguration(); 685 wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 686 wifiConfiguration.preSharedKey = TEST_PRESHARED_KEY; 687 WifiNetworkSpecifier specifier = 688 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL), 689 Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS), 690 MacAddress.fromString(TEST_BSSID_OUI_MASK)), 691 ScanResult.UNSPECIFIED, /* band */ 692 wifiConfiguration, new int[0]); 693 694 assertFalse(specifier.canBeSatisfiedBy(null)); 695 assertFalse(specifier.canBeSatisfiedBy(new MatchAllNetworkSpecifier())); 696 } 697 698 /** 699 * Validate NetworkSpecifier matching. 700 * a) Create network specifier 1 for WPA_PSK network 701 * b) Create network specifier 2 with the same params as specifier 1. 702 * c) Ensure that the specifier 2 is satisfied by specifier 1. 703 */ 704 @Test testWifiNetworkSpecifierSatisfiesSame()705 public void testWifiNetworkSpecifierSatisfiesSame() { 706 WifiConfiguration wifiConfiguration = new WifiConfiguration(); 707 wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 708 wifiConfiguration.preSharedKey = TEST_PRESHARED_KEY; 709 710 WifiNetworkSpecifier specifier1 = 711 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL), 712 Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS), 713 MacAddress.fromString(TEST_BSSID_OUI_MASK)), 714 WIFI_BAND_5_GHZ, 715 wifiConfiguration, new int[0]); 716 717 WifiNetworkSpecifier specifier2 = 718 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL), 719 Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS), 720 MacAddress.fromString(TEST_BSSID_OUI_MASK)), 721 WIFI_BAND_5_GHZ, 722 wifiConfiguration, new int[0]); 723 724 assertTrue(specifier2.canBeSatisfiedBy(specifier1)); 725 } 726 727 /** 728 * Validate NetworkSpecifier matching. 729 * a) Create network specifier 1 for WPA_PSK network 730 * b) Create network specifier 2 with different key mgmt params. 731 * c) Ensure that the specifier 2 is not satisfied by specifier 1. 732 */ 733 @Test testWifiNetworkSpecifierDoesNotSatisfyWhenKeyMgmtDifferent()734 public void testWifiNetworkSpecifierDoesNotSatisfyWhenKeyMgmtDifferent() { 735 WifiConfiguration wifiConfiguration1 = new WifiConfiguration(); 736 wifiConfiguration1.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 737 wifiConfiguration1.preSharedKey = TEST_PRESHARED_KEY; 738 739 WifiNetworkSpecifier specifier1 = 740 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL), 741 Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS), 742 MacAddress.fromString(TEST_BSSID_OUI_MASK)), 743 ScanResult.WIFI_BAND_24_GHZ, 744 wifiConfiguration1, new int[0]); 745 746 WifiConfiguration wifiConfiguration2 = new WifiConfiguration(); 747 wifiConfiguration2.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 748 WifiNetworkSpecifier specifier2 = 749 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL), 750 Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS), 751 MacAddress.fromString(TEST_BSSID_OUI_MASK)), 752 ScanResult.WIFI_BAND_24_GHZ, 753 wifiConfiguration2, new int[0]); 754 755 assertFalse(specifier2.canBeSatisfiedBy(specifier1)); 756 } 757 758 /** 759 * Validate NetworkSpecifier matching. 760 * a) Create network specifier 1 for WPA_PSK network 761 * b) Create network specifier 2 with different SSID pattern. 762 * c) Ensure that the specifier 2 is not satisfied by specifier 1. 763 */ 764 @Test testWifiNetworkSpecifierDoesNotSatisfyWhenSsidDifferent()765 public void testWifiNetworkSpecifierDoesNotSatisfyWhenSsidDifferent() { 766 WifiConfiguration wifiConfiguration = new WifiConfiguration(); 767 wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 768 wifiConfiguration.preSharedKey = TEST_PRESHARED_KEY; 769 770 WifiNetworkSpecifier specifier1 = 771 new WifiNetworkSpecifier(new PatternMatcher("", PATTERN_LITERAL), 772 Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS), 773 MacAddress.fromString(TEST_BSSID_OUI_MASK)), 774 WIFI_BAND_5_GHZ, 775 wifiConfiguration, new int[0]); 776 777 WifiNetworkSpecifier specifier2 = 778 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL), 779 Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS), 780 MacAddress.fromString(TEST_BSSID_OUI_MASK)), 781 WIFI_BAND_5_GHZ, 782 wifiConfiguration, new int[0]); 783 784 assertFalse(specifier2.canBeSatisfiedBy(specifier1)); 785 } 786 787 /** 788 * Validate NetworkSpecifier matching. 789 * a) Create network specifier 1 for WPA_PSK network 790 * b) Create network specifier 2 with different BSSID pattern. 791 * c) Ensure that the specifier 2 is not satisfied by specifier 1. 792 */ 793 @Test testWifiNetworkSpecifierDoesNotSatisfyWhenBssidDifferent()794 public void testWifiNetworkSpecifierDoesNotSatisfyWhenBssidDifferent() { 795 WifiConfiguration wifiConfiguration = new WifiConfiguration(); 796 wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 797 wifiConfiguration.preSharedKey = TEST_PRESHARED_KEY; 798 799 WifiNetworkSpecifier specifier1 = 800 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL), 801 Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS), 802 MacAddress.fromString(TEST_BSSID_OUI_MASK)), 803 ScanResult.WIFI_BAND_24_GHZ, 804 wifiConfiguration, new int[0]); 805 806 WifiNetworkSpecifier specifier2 = 807 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL), 808 Pair.create(WifiManager.ALL_ZEROS_MAC_ADDRESS, 809 WifiManager.ALL_ZEROS_MAC_ADDRESS), 810 ScanResult.WIFI_BAND_24_GHZ, 811 wifiConfiguration, new int[0]); 812 813 assertFalse(specifier2.canBeSatisfiedBy(specifier1)); 814 } 815 816 /** 817 * Validate NetworkSpecifier band matching. 818 */ 819 @Test testWifiNetworkSpecifierBandMatching()820 public void testWifiNetworkSpecifierBandMatching() { 821 WifiConfiguration wifiConfiguration = new WifiConfiguration(); 822 wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 823 wifiConfiguration.preSharedKey = TEST_PRESHARED_KEY; 824 825 WifiNetworkSpecifier specifier1 = 826 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL), 827 Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS), 828 MacAddress.fromString(TEST_BSSID_OUI_MASK)), 829 ScanResult.WIFI_BAND_24_GHZ, 830 wifiConfiguration, new int[0]); 831 832 WifiNetworkSpecifier specifier2 = 833 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL), 834 Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS), 835 MacAddress.fromString(TEST_BSSID_OUI_MASK)), 836 ScanResult.WIFI_BAND_24_GHZ, 837 wifiConfiguration, new int[0]); 838 839 // Same band matches. 840 assertTrue(specifier2.canBeSatisfiedBy(specifier1)); 841 assertTrue(specifier1.canBeSatisfiedBy(specifier2)); 842 843 specifier2 = 844 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL), 845 Pair.create(WifiManager.ALL_ZEROS_MAC_ADDRESS, 846 WifiManager.ALL_ZEROS_MAC_ADDRESS), 847 WIFI_BAND_5_GHZ, 848 wifiConfiguration, new int[0]); 849 850 // Different band does not match. 851 assertFalse(specifier2.canBeSatisfiedBy(specifier1)); 852 assertFalse(specifier1.canBeSatisfiedBy(specifier2)); 853 854 specifier1 = 855 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL), 856 Pair.create(WifiManager.ALL_ZEROS_MAC_ADDRESS, 857 WifiManager.ALL_ZEROS_MAC_ADDRESS), 858 ScanResult.UNSPECIFIED, 859 wifiConfiguration, new int[0]); 860 861 // An UNSPECIFIED band does not match a specified band, because a WifiNetworkSpecifier 862 // satisfies another only if they are equal. 863 assertFalse(specifier2.canBeSatisfiedBy(specifier1)); 864 assertFalse(specifier1.canBeSatisfiedBy(specifier2)); 865 } 866 867 /** 868 * Test WifiNetworkSpecifier redaction. 869 */ 870 @Test testRedact()871 public void testRedact() { 872 WifiConfiguration wifiConfiguration = new WifiConfiguration(); 873 wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 874 wifiConfiguration.preSharedKey = TEST_PRESHARED_KEY; 875 876 WifiNetworkSpecifier specifier = 877 new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL), 878 Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS), 879 MacAddress.fromString(TEST_BSSID_OUI_MASK)), 880 WIFI_BAND_5_GHZ, 881 wifiConfiguration, new int[0]); 882 883 final NetworkSpecifier redacted = specifier.redact(); 884 if (SdkLevel.isAtLeastS()) { 885 assertEquals( 886 new WifiNetworkSpecifier.Builder().setBand(WIFI_BAND_5_GHZ).build(), 887 redacted); 888 } else { 889 assertTrue(redacted == specifier); 890 } 891 } 892 893 @Test testSetPreferredChannel()894 public void testSetPreferredChannel() { 895 WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder() 896 .setSsidPattern(new PatternMatcher(TEST_SSID, PATTERN_PREFIX)); 897 assertThrows(IllegalArgumentException.class, () -> builder 898 .setPreferredChannelsFrequenciesMhz(new int[]{0})); 899 WifiNetworkSpecifier networkSpecifier = builder 900 .setPreferredChannelsFrequenciesMhz(new int[]{5180}).build(); 901 assertArrayEquals(new int[]{5180}, networkSpecifier.getPreferredChannelFrequenciesMhz()); 902 builder.setBand(WIFI_BAND_5_GHZ); 903 assertThrows(IllegalStateException.class, builder::build); 904 } 905 } 906