Create different KeyId for saved and suggestion network
Bug: 150500247
Test: atest android.net.wifi
Merged-In: Ia416b2e986c86fe0a29641f6a20236802d72a233
Change-Id: Ia416b2e986c86fe0a29641f6a20236802d72a233
(cherry picked from commit 96a9e48520fc2359a3cdd6b3513bf158d6844365)
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index ed41642..88f2bb2 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -2113,15 +2113,23 @@
throw new IllegalStateException("Not an EAP network");
}
- return trimStringForKeyId(SSID) + "_" + keyMgmt + "_" +
- trimStringForKeyId(enterpriseConfig.getKeyId(current != null ?
- current.enterpriseConfig : null));
+ String keyId = trimStringForKeyId(SSID) + "_" + keyMgmt + "_"
+ + trimStringForKeyId(enterpriseConfig.getKeyId(current != null
+ ? current.enterpriseConfig : null));
+
+ if (!fromWifiNetworkSuggestion) {
+ return keyId;
+ }
+ return keyId + "_" + trimStringForKeyId(BSSID) + "_" + trimStringForKeyId(creatorName);
} catch (NullPointerException e) {
throw new IllegalStateException("Invalid config details");
}
}
private String trimStringForKeyId(String string) {
+ if (string == null) {
+ return "";
+ }
// Remove quotes and spaces
return string.replace("\"", "").replace(" ", "");
}
diff --git a/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java b/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java
index ba9fc78..f56cdc3 100644
--- a/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java
+++ b/wifi/tests/src/android/net/wifi/WifiConfigurationTest.java
@@ -350,6 +350,67 @@
}
/**
+ * Verifies that getKeyIdForCredentials returns the expected string for Suggestion Enterprise
+ * networks
+ * @throws Exception
+ */
+ @Test
+ public void testGetKeyIdForCredentialsForSuggestion() throws Exception {
+ WifiConfiguration config = new WifiConfiguration();
+ final String mSsid = "TestAP";
+ final String packageName = "TestApp";
+ final String bSsid = MacAddress.createRandomUnicastAddress().toString();
+ String suggestionSuffix = "_" + bSsid + "_" + packageName;
+ config.SSID = mSsid;
+ config.fromWifiNetworkSuggestion = true;
+ config.creatorName = packageName;
+ config.BSSID = bSsid;
+
+ // Test various combinations
+ // EAP with TLS
+ config.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
+ config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS);
+ config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.NONE);
+ String keyId = config.getKeyIdForCredentials(config);
+ assertEquals(keyId, mSsid + "_WPA_EAP_TLS_NULL" + suggestionSuffix);
+
+ // EAP with TTLS & MSCHAPv2
+ config.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
+ config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TTLS);
+ config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.MSCHAPV2);
+ keyId = config.getKeyIdForCredentials(config);
+ assertEquals(keyId, mSsid + "_WPA_EAP_TTLS_MSCHAPV2" + suggestionSuffix);
+
+ // Suite-B 192 with PWD & GTC
+ config.allowedKeyManagement.clear();
+ config.allowedKeyManagement.set(KeyMgmt.SUITE_B_192);
+ config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.PWD);
+ config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.GTC);
+ keyId = config.getKeyIdForCredentials(config);
+ assertEquals(keyId, mSsid + "_SUITE_B_192_PWD_GTC" + suggestionSuffix);
+
+ // IEEE8021X with SIM
+ config.allowedKeyManagement.clear();
+ config.allowedKeyManagement.set(KeyMgmt.IEEE8021X);
+ config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.SIM);
+ config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.NONE);
+ keyId = config.getKeyIdForCredentials(config);
+ assertEquals(keyId, mSsid + "_IEEE8021X_SIM_NULL" + suggestionSuffix);
+
+ // Try calling this method with non-Enterprise network, expect an exception
+ boolean exceptionThrown = false;
+ try {
+ config.allowedKeyManagement.clear();
+ config.allowedKeyManagement.set(KeyMgmt.WPA2_PSK);
+ config.preSharedKey = "TestPsk";
+ keyId = config.getKeyIdForCredentials(config);
+ } catch (IllegalStateException e) {
+ exceptionThrown = true;
+ }
+ assertTrue(exceptionThrown);
+ }
+
+ /**
* Verifies that getSsidAndSecurityTypeString returns the correct String for networks of
* various different security types
*/