diff options
author | Hai Shalom <haishalom@google.com> | 2018-10-25 11:20:44 -0700 |
---|---|---|
committer | Hai Shalom <haishalom@google.com> | 2018-11-06 11:09:23 -0800 |
commit | 7fa44346403d217fef581631f299758abe1e99d6 (patch) | |
tree | 71582cab5fc58b2a852d1fd78fb86b55073c7762 | |
parent | 4a1a1513fcd2846f914f3134eb8db81e59073a2c (diff) |
[WPA3] WiFi tests: Add unit tests for WPA3, SuiteB and OWE
Add unit tests for WPA3, SuiteB and OWE. Fix broken unittests
due to new flags and types.
Bug: 112195778
Test: All unit tests passed.
Change-Id: I6b037bfc80f32810e09d14cf927e969a3245ad02
7 files changed, 314 insertions, 26 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/NetworkListStoreDataTest.java b/tests/wifitests/src/com/android/server/wifi/NetworkListStoreDataTest.java index 5fa15e81b..868e3aef6 100644 --- a/tests/wifitests/src/com/android/server/wifi/NetworkListStoreDataTest.java +++ b/tests/wifitests/src/com/android/server/wifi/NetworkListStoreDataTest.java @@ -76,6 +76,8 @@ public class NetworkListStoreDataTest { + "<byte-array name=\"AllowedAuthAlgos\" num=\"0\"></byte-array>\n" + "<byte-array name=\"AllowedGroupCiphers\" num=\"0\"></byte-array>\n" + "<byte-array name=\"AllowedPairwiseCiphers\" num=\"0\"></byte-array>\n" + + "<byte-array name=\"AllowedGroupMgmtCiphers\" num=\"0\"></byte-array>\n" + + "<byte-array name=\"AllowedSuiteBCiphers\" num=\"0\"></byte-array>\n" + "<boolean name=\"Shared\" value=\"%s\" />\n" + "<int name=\"Status\" value=\"2\" />\n" + "<null name=\"FQDN\" />\n" @@ -128,6 +130,8 @@ public class NetworkListStoreDataTest { + "<byte-array name=\"AllowedAuthAlgos\" num=\"0\"></byte-array>\n" + "<byte-array name=\"AllowedGroupCiphers\" num=\"0\"></byte-array>\n" + "<byte-array name=\"AllowedPairwiseCiphers\" num=\"0\"></byte-array>\n" + + "<byte-array name=\"AllowedGroupMgmtCiphers\" num=\"0\"></byte-array>\n" + + "<byte-array name=\"AllowedSuiteBCiphers\" num=\"0\"></byte-array>\n" + "<boolean name=\"Shared\" value=\"%s\" />\n" + "<int name=\"Status\" value=\"2\" />\n" + "<null name=\"FQDN\" />\n" @@ -365,6 +369,8 @@ public class NetworkListStoreDataTest { + "<byte-array name=\"AllowedAuthAlgos\" num=\"0\"></byte-array>\n" + "<byte-array name=\"AllowedGroupCiphers\" num=\"0\"></byte-array>\n" + "<byte-array name=\"AllowedPairwiseCiphers\" num=\"0\"></byte-array>\n" + + "<byte-array name=\"AllowedGroupMgmtCiphers\" num=\"0\"></byte-array>\n" + + "<byte-array name=\"AllowedSuiteBCiphers\" num=\"0\"></byte-array>\n" + "<boolean name=\"Shared\" value=\"%s\" />\n" + "<null name=\"FQDN\" />\n" + "<null name=\"ProviderFriendlyName\" />\n" diff --git a/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalTest.java b/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalTest.java index 182b32626..c2bf0dcfa 100644 --- a/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalTest.java +++ b/tests/wifitests/src/com/android/server/wifi/SupplicantStaIfaceHalTest.java @@ -15,7 +15,11 @@ */ package com.android.server.wifi; -import static org.junit.Assert.*; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyInt; @@ -23,7 +27,16 @@ import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.anyShort; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.when; import android.annotation.NonNull; import android.app.test.MockAnswerUtil; @@ -33,11 +46,11 @@ import android.hardware.wifi.supplicant.V1_0.ISupplicantIface; import android.hardware.wifi.supplicant.V1_0.ISupplicantStaIface; import android.hardware.wifi.supplicant.V1_0.ISupplicantStaIfaceCallback; import android.hardware.wifi.supplicant.V1_0.ISupplicantStaIfaceCallback.BssidChangeReason; -import android.hardware.wifi.supplicant.V1_0.ISupplicantStaNetwork; import android.hardware.wifi.supplicant.V1_0.IfaceType; import android.hardware.wifi.supplicant.V1_0.SupplicantStatus; import android.hardware.wifi.supplicant.V1_0.SupplicantStatusCode; import android.hardware.wifi.supplicant.V1_0.WpsConfigMethods; +import android.hardware.wifi.supplicant.V1_2.ISupplicantStaNetwork; import android.hidl.manager.V1_0.IServiceManager; import android.hidl.manager.V1_0.IServiceNotification; import android.net.IpConfiguration; diff --git a/tests/wifitests/src/com/android/server/wifi/SupplicantStaNetworkHalTest.java b/tests/wifitests/src/com/android/server/wifi/SupplicantStaNetworkHalTest.java index a52cca87f..a4d799fcc 100644 --- a/tests/wifitests/src/com/android/server/wifi/SupplicantStaNetworkHalTest.java +++ b/tests/wifitests/src/com/android/server/wifi/SupplicantStaNetworkHalTest.java @@ -15,7 +15,12 @@ */ package com.android.server.wifi; -import static org.junit.Assert.*; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyString; @@ -27,7 +32,6 @@ import static org.mockito.Mockito.when; import android.app.test.MockAnswerUtil.AnswerWithArguments; import android.content.Context; import android.hardware.wifi.supplicant.V1_0.ISupplicantNetwork; -import android.hardware.wifi.supplicant.V1_0.ISupplicantStaNetwork; import android.hardware.wifi.supplicant.V1_0.ISupplicantStaNetworkCallback; import android.hardware.wifi.supplicant.V1_0.ISupplicantStaNetworkCallback .NetworkRequestEapSimGsmAuthParams; @@ -35,6 +39,7 @@ import android.hardware.wifi.supplicant.V1_0.ISupplicantStaNetworkCallback .NetworkRequestEapSimUmtsAuthParams; import android.hardware.wifi.supplicant.V1_0.SupplicantStatus; import android.hardware.wifi.supplicant.V1_0.SupplicantStatusCode; +import android.hardware.wifi.supplicant.V1_2.ISupplicantStaNetwork; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiEnterpriseConfig; import android.os.RemoteException; @@ -74,7 +79,7 @@ public class SupplicantStaNetworkHalTest { private SupplicantStatus mStatusFailure; @Mock private ISupplicantStaNetwork mISupplicantStaNetworkMock; @Mock - private android.hardware.wifi.supplicant.V1_1.ISupplicantStaNetwork mISupplicantStaNetworkV11; + private android.hardware.wifi.supplicant.V1_2.ISupplicantStaNetwork mISupplicantStaNetworkV12; @Mock private Context mContext; @Mock private WifiMonitor mWifiMonitor; @@ -83,19 +88,20 @@ public class SupplicantStaNetworkHalTest { private ISupplicantStaNetworkCallback mISupplicantStaNetworkCallback; /** - * Spy used to return the V1_1 ISupplicantStaNetwork mock object to simulate the 1.1 HAL running + * Spy used to return the V1_2 ISupplicantStaNetwork mock object to simulate the 1.2 HAL running * on the device. */ - private class SupplicantStaNetworkHalSpyV1_1 extends SupplicantStaNetworkHal { - SupplicantStaNetworkHalSpyV1_1(ISupplicantStaNetwork iSupplicantStaNetwork, + private class SupplicantStaNetworkHalSpyV1_2 extends SupplicantStaNetworkHal { + SupplicantStaNetworkHalSpyV1_2(ISupplicantStaNetwork iSupplicantStaNetwork, String ifaceName, Context context, WifiMonitor monitor) { super(iSupplicantStaNetwork, ifaceName, context, monitor); } + @Override - protected android.hardware.wifi.supplicant.V1_1.ISupplicantStaNetwork - getSupplicantStaNetworkForV1_1Mockable() { - return mISupplicantStaNetworkV11; + protected android.hardware.wifi.supplicant.V1_2.ISupplicantStaNetwork + getSupplicantStaNetworkForV1_2Mockable() { + return mISupplicantStaNetworkV12; } } @@ -116,6 +122,20 @@ public class SupplicantStaNetworkHalTest { * Tests the saving of WifiConfiguration to wpa_supplicant. */ @Test + public void testOweNetworkWifiConfigurationSaveLoad() throws Exception { + // Now expose the V1.2 ISupplicantStaNetwork + mSupplicantNetwork = new SupplicantStaNetworkHalSpyV1_2(mISupplicantStaNetworkMock, + IFACE_NAME, mContext, mWifiMonitor); + + WifiConfiguration config = WifiConfigurationTestUtil.createOweNetwork(); + config.updateIdentifier = "46"; + testWifiConfigurationSaveLoad(config); + } + + /** + * Tests the saving of WifiConfiguration to wpa_supplicant. + */ + @Test public void testOpenNetworkWifiConfigurationSaveLoad() throws Exception { WifiConfiguration config = WifiConfigurationTestUtil.createOpenHiddenNetwork(); config.updateIdentifier = "45"; @@ -123,6 +143,27 @@ public class SupplicantStaNetworkHalTest { } /** + * Tests the saving/loading of WifiConfiguration to wpa_supplicant with SAE password. + */ + @Test + public void testSaePasswordNetworkWifiConfigurationSaveLoad() throws Exception { + // Now expose the V1.2 ISupplicantStaNetwork + mSupplicantNetwork = new SupplicantStaNetworkHalSpyV1_2(mISupplicantStaNetworkMock, + IFACE_NAME, mContext, mWifiMonitor); + + WifiConfiguration config = WifiConfigurationTestUtil.createSaeNetwork(); + testWifiConfigurationSaveLoad(config); + verify(mISupplicantStaNetworkV12).setSaePassword(any(String.class)); + verify(mISupplicantStaNetworkV12, never()) + .getSaePassword(any(ISupplicantStaNetwork.getSaePasswordCallback.class)); + verify(mISupplicantStaNetworkV12, never()) + .getPskPassphrase(any(ISupplicantStaNetwork.getPskPassphraseCallback.class)); + verify(mISupplicantStaNetworkV12, never()).setPsk(any(byte[].class)); + verify(mISupplicantStaNetworkV12, never()) + .getPsk(any(ISupplicantStaNetwork.getPskCallback.class)); + } + + /** * Tests the saving/loading of WifiConfiguration to wpa_supplicant with psk passphrase. */ @Test @@ -223,6 +264,59 @@ public class SupplicantStaNetworkHalTest { } /** + * Tests the saving/loading of WifiConfiguration to wpa_supplicant with Suite-B-192 + */ + @Test + public void testEapSuiteBRsaNetworkWifiConfigurationSaveLoad() throws Exception { + // Now expose the V1.2 ISupplicantStaNetwork + mSupplicantNetwork = new SupplicantStaNetworkHalSpyV1_2(mISupplicantStaNetworkMock, + IFACE_NAME, mContext, mWifiMonitor); + + WifiConfiguration config = WifiConfigurationTestUtil.createEapSuiteBNetwork(); + config.allowedSuiteBCiphers.set(WifiConfiguration.SuiteBCipher.ECDHE_RSA); + + testWifiConfigurationSaveLoad(config); + verify(mISupplicantStaNetworkV12, never()).enableSuiteBEapOpenSslCiphers(); + verify(mISupplicantStaNetworkV12).enableTlsSuiteBEapPhase1Param(anyBoolean()); + + verify(mISupplicantStaNetworkV12, never()).setSaePassword(any(String.class)); + verify(mISupplicantStaNetworkV12, never()) + .getSaePassword(any(ISupplicantStaNetwork.getSaePasswordCallback.class)); + verify(mISupplicantStaNetworkV12, never()) + .getPskPassphrase(any(ISupplicantStaNetwork.getPskPassphraseCallback.class)); + verify(mISupplicantStaNetworkV12, never()).setPsk(any(byte[].class)); + verify(mISupplicantStaNetworkV12, never()) + .getPsk(any(ISupplicantStaNetwork.getPskCallback.class)); + } + + /** + * Tests the saving/loading of WifiConfiguration to wpa_supplicant with Suite-B-192 + */ + @Test + public void testEapSuiteBEcdsaNetworkWifiConfigurationSaveLoad() throws Exception { + // Now expose the V1.2 ISupplicantStaNetwork + mSupplicantNetwork = new SupplicantStaNetworkHalSpyV1_2(mISupplicantStaNetworkMock, + IFACE_NAME, mContext, mWifiMonitor); + + WifiConfiguration config = WifiConfigurationTestUtil.createEapSuiteBNetwork(); + config.allowedSuiteBCiphers.set(WifiConfiguration.SuiteBCipher.ECDHE_ECDSA); + + testWifiConfigurationSaveLoad(config); + verify(mISupplicantStaNetworkV12).enableSuiteBEapOpenSslCiphers(); + verify(mISupplicantStaNetworkV12, never()) + .enableTlsSuiteBEapPhase1Param(any(boolean.class)); + + verify(mISupplicantStaNetworkV12, never()).setSaePassword(any(String.class)); + verify(mISupplicantStaNetworkV12, never()) + .getSaePassword(any(ISupplicantStaNetwork.getSaePasswordCallback.class)); + verify(mISupplicantStaNetworkV12, never()) + .getPskPassphrase(any(ISupplicantStaNetwork.getPskPassphraseCallback.class)); + verify(mISupplicantStaNetworkV12, never()).setPsk(any(byte[].class)); + verify(mISupplicantStaNetworkV12, never()) + .getPsk(any(ISupplicantStaNetwork.getPskCallback.class)); + } + + /** * Tests the loading of network ID. */ @Test @@ -281,7 +375,7 @@ public class SupplicantStaNetworkHalTest { @Test public void testInvalidKeyMgmtSaveFailure() throws Exception { WifiConfiguration config = WifiConfigurationTestUtil.createWepHiddenNetwork(); - config.allowedKeyManagement.set(10); + config.allowedKeyManagement.set(20); try { assertFalse(mSupplicantNetwork.saveWifiConfiguration(config)); } catch (IllegalArgumentException e) { @@ -631,11 +725,11 @@ public class SupplicantStaNetworkHalTest { assertTrue(mSupplicantNetwork.sendNetworkEapIdentityResponse(identityStr, encryptedIdentityStr)); - verify(mISupplicantStaNetworkV11, never()).sendNetworkEapIdentityResponse_1_1( + verify(mISupplicantStaNetworkV12, never()).sendNetworkEapIdentityResponse_1_1( any(ArrayList.class), any(ArrayList.class)); - // Now expose the V1.1 ISupplicantStaNetwork - mSupplicantNetwork = new SupplicantStaNetworkHalSpyV1_1(mISupplicantStaNetworkMock, + // Now expose the V1.2 ISupplicantStaNetwork + mSupplicantNetwork = new SupplicantStaNetworkHalSpyV1_2(mISupplicantStaNetworkMock, IFACE_NAME, mContext, mWifiMonitor); doAnswer(new AnswerWithArguments() { public SupplicantStatus answer(ArrayList<Byte> identity, @@ -646,7 +740,7 @@ public class SupplicantStaNetworkHalTest { NativeUtil.stringFromByteArrayList(encryptedIdentity)); return mStatusSuccess; } - }).when(mISupplicantStaNetworkV11).sendNetworkEapIdentityResponse_1_1(any(ArrayList.class), + }).when(mISupplicantStaNetworkV12).sendNetworkEapIdentityResponse_1_1(any(ArrayList.class), any(ArrayList.class)); assertTrue(mSupplicantNetwork.sendNetworkEapIdentityResponse(identityStr, encryptedIdentityStr)); @@ -921,6 +1015,21 @@ public class SupplicantStaNetworkHalTest { }).when(mISupplicantStaNetworkMock) .getRequirePmf(any(ISupplicantStaNetwork.getRequirePmfCallback.class)); + /** SAE password */ + doAnswer(new AnswerWithArguments() { + public SupplicantStatus answer(String saePassword) throws RemoteException { + mSupplicantVariables.pskPassphrase = saePassword; + return mStatusSuccess; + } + }).when(mISupplicantStaNetworkV12).setSaePassword(any(String.class)); + doAnswer(new AnswerWithArguments() { + public void answer(ISupplicantStaNetwork.getPskPassphraseCallback cb) + throws RemoteException { + cb.onValues(mStatusSuccess, mSupplicantVariables.pskPassphrase); + } + }).when(mISupplicantStaNetworkV12) + .getSaePassword(any(ISupplicantStaNetwork.getSaePasswordCallback.class)); + /** PSK passphrase */ doAnswer(new AnswerWithArguments() { public SupplicantStatus answer(String pskPassphrase) throws RemoteException { @@ -994,6 +1103,20 @@ public class SupplicantStaNetworkHalTest { }).when(mISupplicantStaNetworkMock) .getKeyMgmt(any(ISupplicantStaNetwork.getKeyMgmtCallback.class)); + /** allowedKeyManagement v1.2 */ + doAnswer(new AnswerWithArguments() { + public SupplicantStatus answer(int mask) throws RemoteException { + mSupplicantVariables.keyMgmtMask = mask; + return mStatusSuccess; + } + }).when(mISupplicantStaNetworkV12).setKeyMgmt_1_2(any(int.class)); + doAnswer(new AnswerWithArguments() { + public void answer(ISupplicantStaNetwork.getKeyMgmtCallback cb) throws RemoteException { + cb.onValues(mStatusSuccess, mSupplicantVariables.keyMgmtMask); + } + }).when(mISupplicantStaNetworkV12) + .getKeyMgmt_1_2(any(ISupplicantStaNetwork.getKeyMgmt_1_2Callback.class)); + /** allowedProtocols */ doAnswer(new AnswerWithArguments() { public SupplicantStatus answer(int mask) throws RemoteException { @@ -1037,6 +1160,21 @@ public class SupplicantStaNetworkHalTest { }).when(mISupplicantStaNetworkMock) .getGroupCipher(any(ISupplicantStaNetwork.getGroupCipherCallback.class)); + /** allowedGroupCiphers v1.2*/ + doAnswer(new AnswerWithArguments() { + public SupplicantStatus answer(int mask) throws RemoteException { + mSupplicantVariables.groupCipherMask = mask; + return mStatusSuccess; + } + }).when(mISupplicantStaNetworkV12).setGroupCipher_1_2(any(int.class)); + doAnswer(new AnswerWithArguments() { + public void answer(ISupplicantStaNetwork.getGroupCipherCallback cb) + throws RemoteException { + cb.onValues(mStatusSuccess, mSupplicantVariables.groupCipherMask); + } + }).when(mISupplicantStaNetworkV12) + .getGroupCipher_1_2(any(ISupplicantStaNetwork.getGroupCipher_1_2Callback.class)); + /** allowedPairwiseCiphers */ doAnswer(new AnswerWithArguments() { public SupplicantStatus answer(int mask) throws RemoteException { @@ -1052,6 +1190,22 @@ public class SupplicantStaNetworkHalTest { }).when(mISupplicantStaNetworkMock) .getPairwiseCipher(any(ISupplicantStaNetwork.getPairwiseCipherCallback.class)); + /** allowedPairwiseCiphers v1.2 */ + doAnswer(new AnswerWithArguments() { + public SupplicantStatus answer(int mask) throws RemoteException { + mSupplicantVariables.pairwiseCipherMask = mask; + return mStatusSuccess; + } + }).when(mISupplicantStaNetworkV12).setPairwiseCipher_1_2(any(int.class)); + doAnswer(new AnswerWithArguments() { + public void answer(ISupplicantStaNetwork.getPairwiseCipherCallback cb) + throws RemoteException { + cb.onValues(mStatusSuccess, mSupplicantVariables.pairwiseCipherMask); + } + }).when(mISupplicantStaNetworkV12) + .getPairwiseCipher_1_2(any(ISupplicantStaNetwork + .getPairwiseCipher_1_2Callback.class)); + /** metadata: idstr */ doAnswer(new AnswerWithArguments() { public SupplicantStatus answer(String idStr) throws RemoteException { @@ -1314,6 +1468,19 @@ public class SupplicantStaNetworkHalTest { } }).when(mISupplicantStaNetworkMock) .registerCallback(any(ISupplicantStaNetworkCallback.class)); + + /** Suite-B*/ + doAnswer(new AnswerWithArguments() { + public SupplicantStatus answer(boolean enable) throws RemoteException { + return mStatusSuccess; + } + }).when(mISupplicantStaNetworkV12).enableTlsSuiteBEapPhase1Param(any(boolean.class)); + + doAnswer(new AnswerWithArguments() { + public SupplicantStatus answer() throws RemoteException { + return mStatusSuccess; + } + }).when(mISupplicantStaNetworkV12).enableSuiteBEapOpenSslCiphers(); } private SupplicantStatus createSupplicantStatus(int code) { diff --git a/tests/wifitests/src/com/android/server/wifi/WifiBackupRestoreTest.java b/tests/wifitests/src/com/android/server/wifi/WifiBackupRestoreTest.java index 53d014b2e..1c238f9de 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiBackupRestoreTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiBackupRestoreTest.java @@ -85,6 +85,7 @@ public class WifiBackupRestoreTest { // |AllowedKeyMgmt|, |AllowedProtocols|, |AllowedAuthAlgorithms|, |AllowedGroupCiphers| and // |AllowedPairwiseCiphers| fields have invalid values in them. + // NOTE: The byte values are encoded in little endian private static final String WIFI_BACKUP_DATA_WITH_UNSUPPORTED_VALUES_IN_BITSETS = "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>" + "<WifiBackupData>" @@ -101,15 +102,15 @@ public class WifiBackupRestoreTest { + "<boolean name=\"HiddenSSID\" value=\"false\" />" + "<boolean name=\"RequirePMF\" value=\"false\" />" // Valid Value: 01 - + "<byte-array name=\"AllowedKeyMgmt\" num=\"2\">0101</byte-array>" + + "<byte-array name=\"AllowedKeyMgmt\" num=\"2\">0180</byte-array>" // Valid Value: 03 + "<byte-array name=\"AllowedProtocols\" num=\"1\">0b</byte-array>" // Valid Value: 01 + "<byte-array name=\"AllowedAuthAlgos\" num=\"1\">09</byte-array>" // Valid Value: 0f - + "<byte-array name=\"AllowedGroupCiphers\" num=\"1\">2f</byte-array>" + + "<byte-array name=\"AllowedGroupCiphers\" num=\"1\">4f</byte-array>" // Valid Value: 06 - + "<byte-array name=\"AllowedPairwiseCiphers\" num=\"1\">0e</byte-array>" + + "<byte-array name=\"AllowedPairwiseCiphers\" num=\"1\">26</byte-array>" + "<boolean name=\"Shared\" value=\"true\" />" + "<null name=\"SimSlot\" />" + "</WifiConfiguration>" @@ -432,6 +433,7 @@ public class WifiBackupRestoreTest { public void testSingleEnterpriseNetworkNotBackupRestore() { List<WifiConfiguration> configurations = new ArrayList<>(); configurations.add(WifiConfigurationTestUtil.createEapNetwork()); + configurations.add(WifiConfigurationTestUtil.createEapSuiteBNetwork()); byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); List<WifiConfiguration> retrievedConfigurations = @@ -527,6 +529,8 @@ public class WifiBackupRestoreTest { configurations.add(WifiConfigurationTestUtil.createWepNetwork()); configurations.add(WifiConfigurationTestUtil.createPskNetwork()); configurations.add(WifiConfigurationTestUtil.createOpenNetwork()); + configurations.add(WifiConfigurationTestUtil.createOweNetwork()); + configurations.add(WifiConfigurationTestUtil.createSaeNetwork()); byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); List<WifiConfiguration> retrievedConfigurations = @@ -549,6 +553,7 @@ public class WifiBackupRestoreTest { expectedConfigurations.add(wepNetwork); configurations.add(WifiConfigurationTestUtil.createEapNetwork()); + configurations.add(WifiConfigurationTestUtil.createEapSuiteBNetwork()); WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); configurations.add(pskNetwork); @@ -558,6 +563,14 @@ public class WifiBackupRestoreTest { configurations.add(openNetwork); expectedConfigurations.add(openNetwork); + WifiConfiguration saeNetwork = WifiConfigurationTestUtil.createSaeNetwork(); + configurations.add(saeNetwork); + expectedConfigurations.add(saeNetwork); + + WifiConfiguration oweNetwork = WifiConfigurationTestUtil.createOweNetwork(); + configurations.add(oweNetwork); + expectedConfigurations.add(oweNetwork); + byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); List<WifiConfiguration> retrievedConfigurations = mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData); diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java index 79024c937..5198abf05 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java @@ -1130,6 +1130,12 @@ public class WifiConfigManagerTest { WifiConfigurationTestUtil.createPskNetwork()); verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( WifiConfigurationTestUtil.createEapNetwork()); + verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( + WifiConfigurationTestUtil.createSaeNetwork()); + verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( + WifiConfigurationTestUtil.createOweNetwork()); + verifyAddSingleNetworkAndMatchScanDetailToNetworkAndCache( + WifiConfigurationTestUtil.createEapSuiteBNetwork()); } /** @@ -1144,18 +1150,27 @@ public class WifiConfigManagerTest { WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); WifiConfiguration eapNetwork = WifiConfigurationTestUtil.createEapNetwork(); + WifiConfiguration saeNetwork = WifiConfigurationTestUtil.createSaeNetwork(); + WifiConfiguration oweNetwork = WifiConfigurationTestUtil.createOweNetwork(); + WifiConfiguration eapSuiteBNetwork = WifiConfigurationTestUtil.createEapSuiteBNetwork(); // Now add them to WifiConfigManager. verifyAddNetworkToWifiConfigManager(openNetwork); verifyAddNetworkToWifiConfigManager(wepNetwork); verifyAddNetworkToWifiConfigManager(pskNetwork); verifyAddNetworkToWifiConfigManager(eapNetwork); + verifyAddNetworkToWifiConfigManager(saeNetwork); + verifyAddNetworkToWifiConfigManager(oweNetwork); + verifyAddNetworkToWifiConfigManager(eapSuiteBNetwork); // Now create dummy scan detail corresponding to the networks. ScanDetail openNetworkScanDetail = createScanDetailForNetwork(openNetwork); ScanDetail wepNetworkScanDetail = createScanDetailForNetwork(wepNetwork); ScanDetail pskNetworkScanDetail = createScanDetailForNetwork(pskNetwork); ScanDetail eapNetworkScanDetail = createScanDetailForNetwork(eapNetwork); + ScanDetail saeNetworkScanDetail = createScanDetailForNetwork(saeNetwork); + ScanDetail oweNetworkScanDetail = createScanDetailForNetwork(oweNetwork); + ScanDetail eapSuiteBNetworkScanDetail = createScanDetailForNetwork(eapSuiteBNetwork); // Now mix and match parameters from different scan details. openNetworkScanDetail.getScanResult().SSID = @@ -1165,8 +1180,15 @@ public class WifiConfigManagerTest { pskNetworkScanDetail.getScanResult().capabilities = eapNetworkScanDetail.getScanResult().capabilities; eapNetworkScanDetail.getScanResult().capabilities = + saeNetworkScanDetail.getScanResult().capabilities; + saeNetworkScanDetail.getScanResult().capabilities = + oweNetworkScanDetail.getScanResult().capabilities; + oweNetworkScanDetail.getScanResult().capabilities = + eapSuiteBNetworkScanDetail.getScanResult().capabilities; + eapSuiteBNetworkScanDetail.getScanResult().capabilities = openNetworkScanDetail.getScanResult().capabilities; + // Try to lookup a saved network using the modified scan details. All of these should fail. assertNull(mWifiConfigManager.getConfiguredNetworkForScanDetailAndCache( openNetworkScanDetail)); @@ -1176,12 +1198,21 @@ public class WifiConfigManagerTest { pskNetworkScanDetail)); assertNull(mWifiConfigManager.getConfiguredNetworkForScanDetailAndCache( eapNetworkScanDetail)); + assertNull(mWifiConfigManager.getConfiguredNetworkForScanDetailAndCache( + saeNetworkScanDetail)); + assertNull(mWifiConfigManager.getConfiguredNetworkForScanDetailAndCache( + oweNetworkScanDetail)); + assertNull(mWifiConfigManager.getConfiguredNetworkForScanDetailAndCache( + eapSuiteBNetworkScanDetail)); // All the cache's should be empty as well. assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(openNetwork.networkId)); assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(wepNetwork.networkId)); assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(pskNetwork.networkId)); assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(eapNetwork.networkId)); + assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(saeNetwork.networkId)); + assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(oweNetwork.networkId)); + assertNull(mWifiConfigManager.getScanDetailCacheForNetwork(eapSuiteBNetwork.networkId)); } /** @@ -1420,11 +1451,11 @@ public class WifiConfigManagerTest { } /** - * Verifies that hasEverConnected is not cleared when a network config |requirePMF| is + * Verifies that hasEverConnected is cleared when a network config |requirePMF| is * updated. */ @Test - public void testUpdateRequirePMFDoesNotClearHasEverConnected() { + public void testUpdateRequirePMFClearsHasEverConnected() { WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork(); verifyAddNetworkHasEverConnectedFalse(pskNetwork); verifyUpdateNetworkAfterConnectHasEverConnectedTrue(pskNetwork.networkId); @@ -1436,9 +1467,9 @@ public class WifiConfigManagerTest { verifyUpdateNetworkToWifiConfigManagerWithoutIpChange(pskNetwork); WifiConfiguration retrievedNetwork = mWifiConfigManager.getConfiguredNetwork(result.getNetworkId()); - assertTrue("Updating network non-credentials config should not clear hasEverConnected.", + assertFalse("Updating network credentials config must clear hasEverConnected.", retrievedNetwork.getNetworkSelectionStatus().getHasEverConnected()); - assertFalse(result.hasCredentialChanged()); + assertTrue(result.hasCredentialChanged()); } /** diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigStoreTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigStoreTest.java index 0240a67ab..508cc2630 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConfigStoreTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigStoreTest.java @@ -81,6 +81,8 @@ public class WifiConfigStoreTest { + "<byte-array name=\"AllowedAuthAlgos\" num=\"0\"></byte-array>\n" + "<byte-array name=\"AllowedGroupCiphers\" num=\"0\"></byte-array>\n" + "<byte-array name=\"AllowedPairwiseCiphers\" num=\"0\"></byte-array>\n" + + "<byte-array name=\"AllowedGroupMgmtCiphers\" num=\"0\"></byte-array>\n" + + "<byte-array name=\"AllowedSuiteBCiphers\" num=\"0\"></byte-array>\n" + "<boolean name=\"Shared\" value=\"%s\" />\n" + "<int name=\"Status\" value=\"2\" />\n" + "<null name=\"FQDN\" />\n" diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigurationTestUtil.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigurationTestUtil.java index 97d7e4f22..6755e5476 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConfigurationTestUtil.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigurationTestUtil.java @@ -46,6 +46,9 @@ public class WifiConfigurationTestUtil { public static final int SECURITY_WEP = 1 << 0; public static final int SECURITY_PSK = 1 << 1; public static final int SECURITY_EAP = 1 << 2; + public static final int SECURITY_SAE = 1 << 3; + public static final int SECURITY_OWE = 1 << 4; + public static final int SECURITY_EAP_SUITE_B = 1 << 5; /** * These values are used to describe ip configuration parameters for a network. @@ -138,11 +141,27 @@ public class WifiConfigurationTestUtil { config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); } + if ((security & SECURITY_SAE) != 0) { + config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SAE); + config.requirePMF = true; + } + + if ((security & SECURITY_OWE) != 0) { + config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.OWE); + config.requirePMF = true; + } + if ((security & SECURITY_EAP) != 0) { config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X); config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TTLS); } + + if ((security & SECURITY_EAP_SUITE_B) != 0) { + config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SUITE_B_192); + config.requirePMF = true; + } + } return config; } @@ -224,6 +243,15 @@ public class WifiConfigurationTestUtil { * Helper methods to generate predefined WifiConfiguration objects of the required type. These * use a static index to avoid duplicate configurations. */ + public static WifiConfiguration createOweNetwork() { + return createOweNetwork(createNewSSID()); + } + + public static WifiConfiguration createOweNetwork(String ssid) { + return generateWifiConfig(TEST_NETWORK_ID, TEST_UID, ssid, true, true, null, + null, SECURITY_OWE); + } + public static WifiConfiguration createOpenNetwork() { return createOpenNetwork(createNewSSID()); } @@ -245,6 +273,17 @@ public class WifiConfigurationTestUtil { return configuration; } + public static WifiConfiguration createSaeNetwork() { + WifiConfiguration configuration = + generateWifiConfig(TEST_NETWORK_ID, TEST_UID, createNewSSID(), true, true, null, + null, SECURITY_SAE); + + // SAE password uses the same member. + configuration.preSharedKey = TEST_PSK; + configuration.requirePMF = true; + return configuration; + } + public static WifiConfiguration createPskNetwork() { WifiConfiguration configuration = generateWifiConfig(TEST_NETWORK_ID, TEST_UID, createNewSSID(), true, true, null, @@ -317,6 +356,17 @@ public class WifiConfigurationTestUtil { return configuration; } + public static WifiConfiguration createEapSuiteBNetwork() { + WifiConfiguration configuration = + generateWifiConfig(TEST_NETWORK_ID, TEST_UID, createNewSSID(), true, true, + null, null, SECURITY_EAP_SUITE_B); + + configuration.requirePMF = true; + configuration.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); + configuration.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.NONE); + return configuration; + } + public static WifiConfiguration createPasspointNetwork() { WifiConfiguration configuration = generateWifiConfig(TEST_NETWORK_ID, TEST_UID, createNewSSID(), true, true, @@ -430,13 +480,19 @@ public class WifiConfigurationTestUtil { public static String getScanResultCapsForNetwork(WifiConfiguration configuration) { String caps; if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_PSK)) { - caps = "[WPA2-PSK-CCMP]"; + caps = "[RSN-PSK-CCMP]"; } else if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_EAP) || configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.IEEE8021X)) { - caps = "[WPA2-EAP-CCMP]"; + caps = "[RSN-EAP-CCMP]"; } else if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE) && WifiConfigurationUtil.hasAnyValidWepKey(configuration.wepKeys)) { caps = "[WEP]"; + } else if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.SAE)) { + caps = "[RSN-SAE-CCMP]"; + } else if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.OWE)) { + caps = "[RSN-OWE-CCMP]"; + } else if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.SUITE_B_192)) { + caps = "[RSN-SUITE-B-192-CCMP]"; } else { caps = "[]"; } |