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