diff options
author | Nate Jiang <qiangjiang@google.com> | 2019-09-19 15:59:07 -0700 |
---|---|---|
committer | Nate(Qiang) Jiang <qiangjiang@google.com> | 2019-10-16 12:10:21 -0700 |
commit | 4921f24cce83719fd9f5d9bdec913545a57ad7fd (patch) | |
tree | cf1431c8914eb84735c39dd52edcc0f9fa9c48c0 /tests | |
parent | 3674b62a25b3853eb897ae5e4385c9d8debe1fa0 (diff) |
merge passpoint into network suggestion
Add API for apps to suggested network with PassPoint config
Bug: 141378137
Test: atest android.net.wifi
Test: atest com.android.server.wifi
Change-Id: Id6a436e7eadbcf2acc186a5bfa2d13f5508c61c0
Diffstat (limited to 'tests')
8 files changed, 629 insertions, 172 deletions
diff --git a/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java b/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java index dbca79c8d..d301d6b95 100644 --- a/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java +++ b/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java @@ -744,7 +744,7 @@ public class NetworkSuggestionEvaluatorTest extends WifiBaseTest { configs[i].meteredOverride = meteredness[i] ? WifiConfiguration.METERED_OVERRIDE_METERED : WifiConfiguration.METERED_OVERRIDE_NONE; - suggestions[i] = new WifiNetworkSuggestion(configs[i], appInteractions[i], + suggestions[i] = new WifiNetworkSuggestion(configs[i], null, appInteractions[i], false, uids[i], packageNames[i]); } return suggestions; diff --git a/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionStoreDataTest.java b/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionStoreDataTest.java index 7abcfa619..97e20fc95 100644 --- a/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionStoreDataTest.java +++ b/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionStoreDataTest.java @@ -156,7 +156,7 @@ public class NetworkSuggestionStoreDataTest extends WifiBaseTest { configuration.enterpriseConfig = WifiConfigurationTestUtil.createPEAPWifiEnterpriseConfigWithGTCPhase2(); WifiNetworkSuggestion networkSuggestion = - new WifiNetworkSuggestion(configuration, false, false, TEST_UID_1, + new WifiNetworkSuggestion(configuration, null, false, false, TEST_UID_1, TEST_PACKAGE_NAME_1); appInfo.hasUserApproved = false; appInfo.extNetworkSuggestions.add( @@ -186,7 +186,7 @@ public class NetworkSuggestionStoreDataTest extends WifiBaseTest { PerAppInfo appInfo1 = new PerAppInfo(TEST_PACKAGE_NAME_1); WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_NAME_1); appInfo1.hasUserApproved = false; appInfo1.extNetworkSuggestions.add( @@ -195,7 +195,7 @@ public class NetworkSuggestionStoreDataTest extends WifiBaseTest { PerAppInfo appInfo2 = new PerAppInfo(TEST_PACKAGE_NAME_2); WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), true, false, TEST_UID_2, + WifiConfigurationTestUtil.createOpenNetwork(), null, true, false, TEST_UID_2, TEST_PACKAGE_NAME_2); appInfo2.hasUserApproved = true; appInfo2.extNetworkSuggestions.add( @@ -214,10 +214,10 @@ public class NetworkSuggestionStoreDataTest extends WifiBaseTest { PerAppInfo appInfo1 = new PerAppInfo(TEST_PACKAGE_NAME_1); WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, true, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, true, TEST_UID_1, TEST_PACKAGE_NAME_1); WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), true, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, true, false, TEST_UID_1, TEST_PACKAGE_NAME_1); appInfo1.hasUserApproved = true; appInfo1.extNetworkSuggestions.add( @@ -228,10 +228,10 @@ public class NetworkSuggestionStoreDataTest extends WifiBaseTest { PerAppInfo appInfo2 = new PerAppInfo(TEST_PACKAGE_NAME_2); WifiNetworkSuggestion networkSuggestion3 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), true, false, TEST_UID_2, + WifiConfigurationTestUtil.createOpenNetwork(), null, true, false, TEST_UID_2, TEST_PACKAGE_NAME_2); WifiNetworkSuggestion networkSuggestion4 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, true, TEST_UID_2, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, true, TEST_UID_2, TEST_PACKAGE_NAME_2); appInfo2.hasUserApproved = true; appInfo2.extNetworkSuggestions.add( diff --git a/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java b/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java index 5e13706f3..112d2fb74 100644 --- a/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java @@ -364,10 +364,10 @@ public class WakeupControllerTest extends WifiBaseTest { // suggestions WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(quotedSsid); WifiNetworkSuggestion openNetworkSuggestion = - new WifiNetworkSuggestion(openNetwork, false, false, -1, ""); + new WifiNetworkSuggestion(openNetwork, null, false, false, -1, ""); WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); WifiNetworkSuggestion wepNetworkSuggestion = - new WifiNetworkSuggestion(wepNetwork, false, false, -1, ""); + new WifiNetworkSuggestion(wepNetwork, null, false, false, -1, ""); when(mWifiNetworkSuggestionsManager.getAllNetworkSuggestions()) .thenReturn(new HashSet<>(Arrays.asList( openNetworkSuggestion, wepNetworkSuggestion))); @@ -409,7 +409,7 @@ public class WakeupControllerTest extends WifiBaseTest { WifiConfiguration oweNetwork = WifiConfigurationTestUtil.createOweNetwork(quotedSsid2); WifiNetworkSuggestion oweNetworkSuggestion = - new WifiNetworkSuggestion(oweNetwork, false, false, -1, ""); + new WifiNetworkSuggestion(oweNetwork, null, false, false, -1, ""); when(mWifiNetworkSuggestionsManager.getAllNetworkSuggestions()) .thenReturn(new HashSet<>(Arrays.asList(oweNetworkSuggestion))); @@ -507,7 +507,7 @@ public class WakeupControllerTest extends WifiBaseTest { WifiConfiguration openNetwork = WifiConfigurationTestUtil .createOpenNetwork(ScanResultUtil.createQuotedSSID(SAVED_SSID)); WifiNetworkSuggestion openNetworkSuggestion = - new WifiNetworkSuggestion(openNetwork, false, false, -1, ""); + new WifiNetworkSuggestion(openNetwork, null, false, false, -1, ""); when(mWifiNetworkSuggestionsManager.getAllNetworkSuggestions()) .thenReturn(new HashSet<>(Collections.singletonList(openNetworkSuggestion))); diff --git a/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java index 6e9df30b3..3c9b0bc12 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java @@ -48,6 +48,8 @@ import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; import android.net.wifi.WifiNetworkSuggestion; import android.net.wifi.WifiScanner; +import android.net.wifi.hotspot2.PasspointConfiguration; +import android.net.wifi.hotspot2.pps.HomeSp; import android.os.Handler; import android.os.UserHandle; import android.os.test.TestLooper; @@ -57,6 +59,7 @@ import com.android.internal.R; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.server.wifi.WifiNetworkSuggestionsManager.ExtendedWifiNetworkSuggestion; import com.android.server.wifi.WifiNetworkSuggestionsManager.PerAppInfo; +import com.android.server.wifi.hotspot2.PasspointManager; import com.android.server.wifi.util.WifiPermissionsUtil; import org.junit.Before; @@ -85,6 +88,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { private static final String TEST_APP_NAME_1 = "test12345"; private static final String TEST_APP_NAME_2 = "test54321"; private static final String TEST_BSSID = "00:11:22:33:44:55"; + private static final String TEST_FQDN = "FQDN"; private static final int TEST_UID_1 = 5667; private static final int TEST_UID_2 = 4537; @@ -100,6 +104,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { private @Mock WifiConfigManager mWifiConfigManager; private @Mock NetworkSuggestionStoreData mNetworkSuggestionStoreData; private @Mock WifiMetrics mWifiMetrics; + private @Mock PasspointManager mPasspointManager; private TestLooper mLooper; private ArgumentCaptor<AppOpsManager.OnOpChangedListener> mAppOpChangedListenerCaptor = ArgumentCaptor.forClass(AppOpsManager.OnOpChangedListener.class); @@ -124,6 +129,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { when(mWifiInjector.makeNetworkSuggestionStoreData(any())) .thenReturn(mNetworkSuggestionStoreData); when(mWifiInjector.getFrameworkFacade()).thenReturn(mFrameworkFacade); + when(mWifiInjector.getPasspointManager()).thenReturn(mPasspointManager); when(mFrameworkFacade.getBroadcast(any(), anyInt(), any(), anyInt())) .thenReturn(mock(PendingIntent.class)); when(mContext.getResources()).thenReturn(mResources); @@ -180,11 +186,17 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { */ @Test public void testAddNetworkSuggestionsSuccess() { + PasspointConfiguration passpointConfiguration = new PasspointConfiguration(); + HomeSp homeSp = new HomeSp(); + homeSp.setFqdn(TEST_FQDN); + passpointConfiguration.setHomeSp(homeSp); + WifiConfiguration dummyConfiguration = new WifiConfiguration(); + dummyConfiguration.FQDN = TEST_FQDN; WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_2, + dummyConfiguration, passpointConfiguration, false, false, TEST_UID_2, TEST_PACKAGE_2); List<WifiNetworkSuggestion> networkSuggestionList1 = @@ -195,13 +207,16 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { new ArrayList<WifiNetworkSuggestion>() {{ add(networkSuggestion2); }}; - + when(mPasspointManager.addOrUpdateProvider(any(PasspointConfiguration.class), + anyInt(), anyString(), eq(true))).thenReturn(true); assertEquals(WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS, mWifiNetworkSuggestionsManager.add(networkSuggestionList1, TEST_UID_1, TEST_PACKAGE_1)); assertEquals(WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS, mWifiNetworkSuggestionsManager.add(networkSuggestionList2, TEST_UID_2, TEST_PACKAGE_2)); + verify(mPasspointManager).addOrUpdateProvider( + passpointConfiguration, TEST_UID_2, TEST_PACKAGE_2, true); Set<WifiNetworkSuggestion> allNetworkSuggestions = mWifiNetworkSuggestionsManager.getAllNetworkSuggestions(); @@ -225,11 +240,17 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { */ @Test public void testRemoveNetworkSuggestionsSuccess() { + PasspointConfiguration passpointConfiguration = new PasspointConfiguration(); + HomeSp homeSp = new HomeSp(); + homeSp.setFqdn(TEST_FQDN); + passpointConfiguration.setHomeSp(homeSp); + WifiConfiguration dummyConfiguration = new WifiConfiguration(); + dummyConfiguration.FQDN = TEST_FQDN; WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_2, + dummyConfiguration, passpointConfiguration, false, false, TEST_UID_2, TEST_PACKAGE_2); List<WifiNetworkSuggestion> networkSuggestionList1 = @@ -240,7 +261,8 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { new ArrayList<WifiNetworkSuggestion>() {{ add(networkSuggestion2); }}; - + when(mPasspointManager.addOrUpdateProvider(any(PasspointConfiguration.class), + anyInt(), anyString(), eq(true))).thenReturn(true); assertEquals(WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS, mWifiNetworkSuggestionsManager.add(networkSuggestionList1, TEST_UID_1, TEST_PACKAGE_1)); @@ -255,6 +277,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { assertEquals(WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS, mWifiNetworkSuggestionsManager.remove(networkSuggestionList2, TEST_UID_1, TEST_PACKAGE_2)); + verify(mPasspointManager).removeProvider(TEST_UID_2, false, TEST_FQDN); assertTrue(mWifiNetworkSuggestionsManager.getAllNetworkSuggestions().isEmpty()); @@ -271,13 +294,20 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { */ @Test public void testRemoveAllNetworkSuggestionsSuccess() { + PasspointConfiguration passpointConfiguration = new PasspointConfiguration(); + HomeSp homeSp = new HomeSp(); + homeSp.setFqdn(TEST_FQDN); + passpointConfiguration.setHomeSp(homeSp); + WifiConfiguration dummyConfiguration = new WifiConfiguration(); + dummyConfiguration.FQDN = TEST_FQDN; WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_2, + dummyConfiguration, passpointConfiguration, false, false, TEST_UID_2, TEST_PACKAGE_2); + List<WifiNetworkSuggestion> networkSuggestionList1 = new ArrayList<WifiNetworkSuggestion>() {{ add(networkSuggestion1); @@ -287,6 +317,8 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { add(networkSuggestion2); }}; + when(mPasspointManager.addOrUpdateProvider(any(PasspointConfiguration.class), + anyInt(), anyString(), eq(true))).thenReturn(true); assertEquals(WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS, mWifiNetworkSuggestionsManager.add(networkSuggestionList1, TEST_UID_1, TEST_PACKAGE_1)); @@ -301,6 +333,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { assertEquals(WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS, mWifiNetworkSuggestionsManager.remove(new ArrayList<>(), TEST_UID_2, TEST_PACKAGE_2)); + verify(mPasspointManager).removeProvider(TEST_UID_2, false, TEST_FQDN); assertTrue(mWifiNetworkSuggestionsManager.getAllNetworkSuggestions().isEmpty()); } @@ -311,7 +344,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testReplaceNetworkSuggestionsSuccess() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList1 = @@ -342,9 +375,9 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { * Verify that modify networks that are already active is allowed. */ @Test - public void testAddNetworkSuggestionsFailureOnInPlaceModification() { + public void testAddNetworkSuggestionsSuccessOnInPlaceModification() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList1 = new ArrayList<WifiNetworkSuggestion>() {{ @@ -377,7 +410,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<>(); for (int i = 0; i < WifiManager.NETWORK_SUGGESTIONS_MAX_PER_APP; i++) { networkSuggestionList.add(new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1)); } // The first add should succeed. @@ -390,7 +423,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { networkSuggestionList = new ArrayList<>(); for (int i = 0; i < 3; i++) { networkSuggestionList.add(new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1)); } // The second add should fail. @@ -412,7 +445,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { networkSuggestionList = new ArrayList<>(); for (int i = 0; i < 2; i++) { networkSuggestionList.add(new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1)); } // This add should now succeed. @@ -427,10 +460,10 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testRemoveNetworkSuggestionsFailureOnInvalid() { WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList1 = @@ -457,7 +490,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { public void testGetNetworkSuggestionsForScanDetailSuccessWithOneMatchForCarrierProvisioningApp() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList1 = new ArrayList<WifiNetworkSuggestion>() {{ @@ -488,7 +521,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testGetNetworkSuggestionsForScanDetailSuccessWithOneMatch() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList1 = new ArrayList<WifiNetworkSuggestion>() {{ @@ -517,11 +550,11 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { public void testGetNetworkSuggestionsForScanDetailSuccessWithMultipleMatch() { WifiConfiguration wifiConfiguration = WifiConfigurationTestUtil.createOpenNetwork(); WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - wifiConfiguration, false, false, TEST_UID_1, + wifiConfiguration, null, false, false, TEST_UID_1, TEST_PACKAGE_1); // Reuse the same network credentials to ensure they both match. WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - wifiConfiguration, false, false, TEST_UID_2, + wifiConfiguration, null, false, false, TEST_UID_2, TEST_PACKAGE_2); List<WifiNetworkSuggestion> networkSuggestionList1 = @@ -564,7 +597,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { wifiConfiguration.BSSID = scanDetail.getBSSIDString(); WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - wifiConfiguration, false, false, TEST_UID_1, + wifiConfiguration, null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList1 = new ArrayList<WifiNetworkSuggestion>() {{ @@ -594,11 +627,11 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { wifiConfiguration.BSSID = scanDetail.getBSSIDString(); WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - wifiConfiguration, false, false, TEST_UID_1, + wifiConfiguration, null, false, false, TEST_UID_1, TEST_PACKAGE_1); // Reuse the same network credentials to ensure they both match. WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - wifiConfiguration, false, false, TEST_UID_2, + wifiConfiguration, null, false, false, TEST_UID_2, TEST_PACKAGE_2); List<WifiNetworkSuggestion> networkSuggestionList1 = @@ -641,11 +674,11 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { wifiConfiguration.BSSID = scanDetail.getBSSIDString(); WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - wifiConfiguration, false, false, TEST_UID_1, + wifiConfiguration, null, false, false, TEST_UID_1, TEST_PACKAGE_1); // Reuse the same network credentials to ensure they both match. WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - wifiConfiguration, false, false, TEST_UID_1, + wifiConfiguration, null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = @@ -681,11 +714,11 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { wifiConfiguration2.BSSID = scanDetail.getBSSIDString(); WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - wifiConfiguration1, false, false, TEST_UID_1, + wifiConfiguration1, null, false, false, TEST_UID_1, TEST_PACKAGE_1); // Reuse the same network credentials to ensure they both match. WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - wifiConfiguration2, false, false, TEST_UID_2, + wifiConfiguration2, null, false, false, TEST_UID_2, TEST_PACKAGE_2); List<WifiNetworkSuggestion> networkSuggestionList1 = @@ -735,7 +768,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testGetNetworkSuggestionsForScanDetailFailureOnAppNotApproved() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList1 = new ArrayList<WifiNetworkSuggestion>() {{ @@ -758,7 +791,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { public void testGetNetworkSuggestionsForScanDetailFailureOnSuggestionRemoval() { WifiConfiguration wifiConfiguration = WifiConfigurationTestUtil.createOpenNetwork(); WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - wifiConfiguration, false, false, TEST_UID_1, + wifiConfiguration, null, false, false, TEST_UID_1, TEST_PACKAGE_1); ScanDetail scanDetail = createScanDetailForNetwork(wifiConfiguration); List<WifiNetworkSuggestion> networkSuggestionList1 = @@ -787,7 +820,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testGetNetworkSuggestionsForScanDetailFailureOnWrongNetwork() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList1 = new ArrayList<WifiNetworkSuggestion>() {{ @@ -815,7 +848,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testOnNetworkConnectionSuccessWithOneMatch() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), true, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, true, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -827,9 +860,13 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_1); // Simulate connecting to the network. + WifiConfiguration connectNetwork = + new WifiConfiguration(networkSuggestion.wifiConfiguration); + connectNetwork.fromWifiNetworkSuggestion = true; + connectNetwork.ephemeral = true; + connectNetwork.creatorName = TEST_APP_NAME_1; mWifiNetworkSuggestionsManager.handleConnectionAttemptEnded( - WifiMetrics.ConnectionEvent.FAILURE_NONE, networkSuggestion.wifiConfiguration, - TEST_BSSID); + WifiMetrics.ConnectionEvent.FAILURE_NONE, connectNetwork, TEST_BSSID); verify(mWifiMetrics).incrementNetworkSuggestionApiNumConnectSuccess(); @@ -849,7 +886,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testOnNetworkConnectionFailureWithOneMatch() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), true, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, true, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -859,11 +896,14 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { mWifiNetworkSuggestionsManager.add(networkSuggestionList, TEST_UID_1, TEST_PACKAGE_1)); mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_1); - + WifiConfiguration connectNetwork = + new WifiConfiguration(networkSuggestion.wifiConfiguration); + connectNetwork.fromWifiNetworkSuggestion = true; + connectNetwork.ephemeral = true; + connectNetwork.creatorName = TEST_APP_NAME_1; // Simulate connecting to the network. mWifiNetworkSuggestionsManager.handleConnectionAttemptEnded( - WifiMetrics.ConnectionEvent.FAILURE_DHCP, networkSuggestion.wifiConfiguration, - TEST_BSSID); + WifiMetrics.ConnectionEvent.FAILURE_DHCP, connectNetwork, TEST_BSSID); verify(mWifiMetrics).incrementNetworkSuggestionApiNumConnectFailure(); @@ -886,14 +926,14 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { public void testOnNetworkConnectionSuccessWithMultipleMatch() { WifiConfiguration wifiConfiguration = WifiConfigurationTestUtil.createOpenNetwork(); WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - wifiConfiguration, true, false, TEST_UID_1, + wifiConfiguration, null, true, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList1 = new ArrayList<WifiNetworkSuggestion>() {{ add(networkSuggestion1); }}; WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - wifiConfiguration, true, false, TEST_UID_2, + wifiConfiguration, null, true, false, TEST_UID_2, TEST_PACKAGE_2); List<WifiNetworkSuggestion> networkSuggestionList2 = new ArrayList<WifiNetworkSuggestion>() {{ @@ -909,9 +949,15 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_1); mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_2); + WifiConfiguration connectNetwork = + new WifiConfiguration(networkSuggestion1.wifiConfiguration); + connectNetwork.fromWifiNetworkSuggestion = true; + connectNetwork.ephemeral = true; + connectNetwork.creatorName = TEST_APP_NAME_1; + // Simulate connecting to the network. mWifiNetworkSuggestionsManager.handleConnectionAttemptEnded( - WifiMetrics.ConnectionEvent.FAILURE_NONE, wifiConfiguration, TEST_BSSID); + WifiMetrics.ConnectionEvent.FAILURE_NONE, connectNetwork, TEST_BSSID); verify(mWifiMetrics).incrementNetworkSuggestionApiNumConnectSuccess(); @@ -948,14 +994,14 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { WifiConfiguration wifiConfiguration = WifiConfigurationTestUtil.createOpenNetwork(); wifiConfiguration.BSSID = TEST_BSSID; WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - wifiConfiguration, true, false, TEST_UID_1, + wifiConfiguration, null, true, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList1 = new ArrayList<WifiNetworkSuggestion>() {{ add(networkSuggestion1); }}; WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - wifiConfiguration, true, false, TEST_UID_2, + wifiConfiguration, null, true, false, TEST_UID_2, TEST_PACKAGE_2); List<WifiNetworkSuggestion> networkSuggestionList2 = new ArrayList<WifiNetworkSuggestion>() {{ @@ -970,10 +1016,14 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { TEST_PACKAGE_2)); mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_1); mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_2); - + WifiConfiguration connectNetwork = + new WifiConfiguration(networkSuggestion1.wifiConfiguration); + connectNetwork.fromWifiNetworkSuggestion = true; + connectNetwork.ephemeral = true; + connectNetwork.creatorName = TEST_APP_NAME_1; // Simulate connecting to the network. mWifiNetworkSuggestionsManager.handleConnectionAttemptEnded( - WifiMetrics.ConnectionEvent.FAILURE_NONE, wifiConfiguration, TEST_BSSID); + WifiMetrics.ConnectionEvent.FAILURE_NONE, connectNetwork, TEST_BSSID); verify(mWifiMetrics).incrementNetworkSuggestionApiNumConnectSuccess(); @@ -1011,14 +1061,14 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { WifiConfiguration wifiConfiguration2 = new WifiConfiguration(wifiConfiguration1); wifiConfiguration2.BSSID = TEST_BSSID; WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - wifiConfiguration1, true, false, TEST_UID_1, + wifiConfiguration1, null, true, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList1 = new ArrayList<WifiNetworkSuggestion>() {{ add(networkSuggestion1); }}; WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - wifiConfiguration2, true, false, TEST_UID_2, + wifiConfiguration2, null, true, false, TEST_UID_2, TEST_PACKAGE_2); List<WifiNetworkSuggestion> networkSuggestionList2 = new ArrayList<WifiNetworkSuggestion>() {{ @@ -1034,9 +1084,15 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_1); mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_2); + WifiConfiguration connectNetwork = + new WifiConfiguration(networkSuggestion1.wifiConfiguration); + connectNetwork.fromWifiNetworkSuggestion = true; + connectNetwork.ephemeral = true; + connectNetwork.creatorName = TEST_APP_NAME_1; + // Simulate connecting to the network. mWifiNetworkSuggestionsManager.handleConnectionAttemptEnded( - WifiMetrics.ConnectionEvent.FAILURE_NONE, wifiConfiguration1, TEST_BSSID); + WifiMetrics.ConnectionEvent.FAILURE_NONE, connectNetwork, TEST_BSSID); verify(mWifiMetrics).incrementNetworkSuggestionApiNumConnectSuccess(); @@ -1072,7 +1128,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testOnNetworkConnectionWhenAppNotApproved() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), true, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, true, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -1084,10 +1140,15 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { verify(mWifiPermissionsUtil).checkNetworkCarrierProvisioningPermission(TEST_UID_1); assertFalse(mWifiNetworkSuggestionsManager.hasUserApprovedForApp(TEST_PACKAGE_1)); + WifiConfiguration connectNetwork = + new WifiConfiguration(networkSuggestion.wifiConfiguration); + connectNetwork.fromWifiNetworkSuggestion = true; + connectNetwork.ephemeral = true; + connectNetwork.creatorName = TEST_APP_NAME_1; + // Simulate connecting to the network. mWifiNetworkSuggestionsManager.handleConnectionAttemptEnded( - WifiMetrics.ConnectionEvent.FAILURE_NONE, networkSuggestion.wifiConfiguration, - TEST_BSSID); + WifiMetrics.ConnectionEvent.FAILURE_NONE, connectNetwork, TEST_BSSID); // Verify no broadcast was sent out. mInorder.verify(mWifiPermissionsUtil, never()).enforceCanAccessScanResults( @@ -1106,7 +1167,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testOnNetworkConnectionWhenIsAppInteractionRequiredNotSet() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -1118,10 +1179,15 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { verify(mWifiPermissionsUtil).checkNetworkCarrierProvisioningPermission(TEST_UID_1); mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_1); + WifiConfiguration connectNetwork = + new WifiConfiguration(networkSuggestion.wifiConfiguration); + connectNetwork.fromWifiNetworkSuggestion = true; + connectNetwork.ephemeral = true; + connectNetwork.creatorName = TEST_APP_NAME_1; + // Simulate connecting to the network. mWifiNetworkSuggestionsManager.handleConnectionAttemptEnded( - WifiMetrics.ConnectionEvent.FAILURE_NONE, networkSuggestion.wifiConfiguration, - TEST_BSSID); + WifiMetrics.ConnectionEvent.FAILURE_NONE, connectNetwork, TEST_BSSID); // Verify no broadcast was sent out. mInorder.verify(mWifiPermissionsUtil, never()).enforceCanAccessScanResults( @@ -1140,7 +1206,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testOnNetworkConnectionWhenAppDoesNotHoldLocationPermission() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), true, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, true, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -1155,10 +1221,15 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { doThrow(new SecurityException()) .when(mWifiPermissionsUtil).enforceCanAccessScanResults(TEST_PACKAGE_1, TEST_UID_1); + WifiConfiguration connectNetwork = + new WifiConfiguration(networkSuggestion.wifiConfiguration); + connectNetwork.fromWifiNetworkSuggestion = true; + connectNetwork.ephemeral = true; + connectNetwork.creatorName = TEST_APP_NAME_1; + // Simulate connecting to the network. mWifiNetworkSuggestionsManager.handleConnectionAttemptEnded( - WifiMetrics.ConnectionEvent.FAILURE_NONE, networkSuggestion.wifiConfiguration, - TEST_BSSID); + WifiMetrics.ConnectionEvent.FAILURE_NONE, connectNetwork, TEST_BSSID); mInorder.verify(mWifiPermissionsUtil) .enforceCanAccessScanResults(TEST_PACKAGE_1, TEST_UID_1); @@ -1173,7 +1244,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testAddNetworkSuggestionsConfigStoreWrite() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = @@ -1215,7 +1286,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testRemoveNetworkSuggestionsConfigStoreWrite() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = @@ -1250,13 +1321,24 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { */ @Test public void testNetworkSuggestionsConfigStoreLoad() { + PasspointConfiguration passpointConfiguration = new PasspointConfiguration(); + HomeSp homeSp = new HomeSp(); + homeSp.setFqdn(TEST_FQDN); + passpointConfiguration.setHomeSp(homeSp); + WifiConfiguration dummyConfiguration = new WifiConfiguration(); + dummyConfiguration.FQDN = TEST_FQDN; PerAppInfo appInfo = new PerAppInfo(TEST_PACKAGE_1); appInfo.hasUserApproved = true; WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, + TEST_PACKAGE_1); + WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( + dummyConfiguration, passpointConfiguration, false, false, TEST_UID_1, TEST_PACKAGE_1); appInfo.extNetworkSuggestions.add( ExtendedWifiNetworkSuggestion.fromWns(networkSuggestion, appInfo)); + appInfo.extNetworkSuggestions.add( + ExtendedWifiNetworkSuggestion.fromWns(networkSuggestion1, appInfo)); mDataSource.fromDeserialized(new HashMap<String, PerAppInfo>() {{ put(TEST_PACKAGE_1, appInfo); }}); @@ -1266,6 +1348,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { Set<WifiNetworkSuggestion> expectedAllNetworkSuggestions = new HashSet<WifiNetworkSuggestion>() {{ add(networkSuggestion); + add(networkSuggestion1); }}; assertEquals(expectedAllNetworkSuggestions, allNetworkSuggestions); @@ -1278,6 +1361,18 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { add(networkSuggestion); }}; assertEquals(expectedMatchingNetworkSuggestions, matchingNetworkSuggestions); + + // Ensure we can lookup the passpoint network. + WifiConfiguration connectNetwork = WifiConfigurationTestUtil.createPasspointNetwork(); + connectNetwork.FQDN = TEST_FQDN; + Set<ExtendedWifiNetworkSuggestion> matchingExtNetworkSuggestions = + mWifiNetworkSuggestionsManager + .getNetworkSuggestionsForWifiConfiguration(connectNetwork, null); + Set<ExtendedWifiNetworkSuggestion> expectedMatchingExtNetworkSuggestions = + new HashSet<ExtendedWifiNetworkSuggestion>() {{ + add(ExtendedWifiNetworkSuggestion.fromWns(networkSuggestion1, appInfo)); + }}; + assertEquals(expectedMatchingExtNetworkSuggestions, matchingExtNetworkSuggestions); } /** @@ -1289,7 +1384,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { PerAppInfo appInfo1 = new PerAppInfo(TEST_PACKAGE_1); appInfo1.hasUserApproved = true; WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); appInfo1.extNetworkSuggestions.add( ExtendedWifiNetworkSuggestion.fromWns(networkSuggestion1, appInfo1)); @@ -1303,7 +1398,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { PerAppInfo appInfo2 = new PerAppInfo(TEST_PACKAGE_2); appInfo2.hasUserApproved = true; WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); appInfo2.extNetworkSuggestions.add( ExtendedWifiNetworkSuggestion.fromWns(networkSuggestion2, appInfo2)); @@ -1342,7 +1437,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { public void testRemoveNetworkSuggestionsMatchingConnectionSuccessWithOneMatch() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -1352,11 +1447,14 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { mWifiNetworkSuggestionsManager.add(networkSuggestionList, TEST_UID_1, TEST_PACKAGE_1)); mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_1); - // Simulate connecting to the network. + WifiConfiguration connectNetwork = + new WifiConfiguration(networkSuggestion.wifiConfiguration); + connectNetwork.fromWifiNetworkSuggestion = true; + connectNetwork.ephemeral = true; + connectNetwork.creatorName = TEST_APP_NAME_1; mWifiNetworkSuggestionsManager.handleConnectionAttemptEnded( - WifiMetrics.ConnectionEvent.FAILURE_NONE, networkSuggestion.wifiConfiguration, - TEST_BSSID); + WifiMetrics.ConnectionEvent.FAILURE_NONE, connectNetwork, TEST_BSSID); // Now remove the network suggestion and ensure we did trigger a disconnect. assertEquals(WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS, @@ -1374,7 +1472,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { public void testRemoveAllNetworkSuggestionsMatchingConnectionSuccessWithOneMatch() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -1384,11 +1482,14 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { mWifiNetworkSuggestionsManager.add(networkSuggestionList, TEST_UID_1, TEST_PACKAGE_1)); mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_1); - // Simulate connecting to the network. + WifiConfiguration connectNetwork = + new WifiConfiguration(networkSuggestion.wifiConfiguration); + connectNetwork.fromWifiNetworkSuggestion = true; + connectNetwork.ephemeral = true; + connectNetwork.creatorName = TEST_APP_NAME_1; mWifiNetworkSuggestionsManager.handleConnectionAttemptEnded( - WifiMetrics.ConnectionEvent.FAILURE_NONE, networkSuggestion.wifiConfiguration, - TEST_BSSID); + WifiMetrics.ConnectionEvent.FAILURE_NONE, connectNetwork, TEST_BSSID); // Now remove all network suggestion and ensure we did trigger a disconnect. assertEquals(WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS, @@ -1407,14 +1508,14 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { public void testRemoveAppMatchingConnectionSuccessWithMultipleMatch() { WifiConfiguration wifiConfiguration = WifiConfigurationTestUtil.createOpenNetwork(); WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - wifiConfiguration, true, false, TEST_UID_1, + wifiConfiguration, null, true, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList1 = new ArrayList<WifiNetworkSuggestion>() {{ add(networkSuggestion1); }}; WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - wifiConfiguration, true, false, TEST_UID_2, + wifiConfiguration, null, true, false, TEST_UID_2, TEST_PACKAGE_2); List<WifiNetworkSuggestion> networkSuggestionList2 = new ArrayList<WifiNetworkSuggestion>() {{ @@ -1431,8 +1532,13 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_2); // Simulate connecting to the network. + WifiConfiguration connectNetwork = + new WifiConfiguration(wifiConfiguration); + connectNetwork.fromWifiNetworkSuggestion = true; + connectNetwork.ephemeral = true; + connectNetwork.creatorName = TEST_APP_NAME_1; mWifiNetworkSuggestionsManager.handleConnectionAttemptEnded( - WifiMetrics.ConnectionEvent.FAILURE_NONE, wifiConfiguration, TEST_BSSID); + WifiMetrics.ConnectionEvent.FAILURE_NONE, connectNetwork, TEST_BSSID); // Now remove one of the apps and ensure we did not trigger a disconnect. mWifiNetworkSuggestionsManager.removeApp(TEST_PACKAGE_1); @@ -1451,7 +1557,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testRemoveAppNotMatchingConnectionSuccess() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -1479,7 +1585,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testRemoveNetworkSuggestionsNotMatchingConnectionSuccessAfterConnectionFailure() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -1489,11 +1595,14 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { mWifiNetworkSuggestionsManager.add(networkSuggestionList, TEST_UID_1, TEST_PACKAGE_1)); mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_1); - + WifiConfiguration connectNetwork = + new WifiConfiguration(networkSuggestion.wifiConfiguration); + connectNetwork.fromWifiNetworkSuggestion = true; + connectNetwork.ephemeral = true; + connectNetwork.creatorName = TEST_APP_NAME_1; // Simulate failing connection to the network. mWifiNetworkSuggestionsManager.handleConnectionAttemptEnded( - WifiMetrics.ConnectionEvent.FAILURE_DHCP, networkSuggestion.wifiConfiguration, - TEST_BSSID); + WifiMetrics.ConnectionEvent.FAILURE_DHCP, connectNetwork, TEST_BSSID); // Simulate connecting to some other network. mWifiNetworkSuggestionsManager.handleConnectionAttemptEnded( @@ -1512,10 +1621,10 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testAddRemoveNetworkSuggestionsStartStopAppOpsWatch() { WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_2, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_2, TEST_PACKAGE_2); List<WifiNetworkSuggestion> networkSuggestionList1 = @@ -1561,7 +1670,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testAppOpsChangeAfterSuggestionsAdd() { WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -1613,7 +1722,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { public void testAppOpsChangeAfterConfigStoreLoad() { PerAppInfo appInfo = new PerAppInfo(TEST_PACKAGE_1); WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); appInfo.extNetworkSuggestions.add( ExtendedWifiNetworkSuggestion.fromWns(networkSuggestion, appInfo)); @@ -1660,7 +1769,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testAppOpsChangeWrongUid() { WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -1703,10 +1812,10 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testRemoveApp() { WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_2, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_2, TEST_PACKAGE_2); List<WifiNetworkSuggestion> networkSuggestionList1 = @@ -1769,10 +1878,10 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testClear() { WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_2, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_2, TEST_PACKAGE_2); List<WifiNetworkSuggestion> networkSuggestionList1 = @@ -1826,7 +1935,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testUserApprovalNotificationDismissalWhenGetScanResult() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), true, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, true, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -1867,7 +1976,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testUserApprovalNotificationClickOnAllowWhenGetScanResult() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), true, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, true, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -1913,7 +2022,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testUserApprovalNotificationClickOnDisallowWhenGetScanResult() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), true, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, true, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -1982,7 +2091,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testUserApprovalNotificationWhilePreviousNotificationActive() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), true, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, true, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -2021,16 +2130,16 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { // App add network suggestions then get stored suggestions. WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); WifiNetworkSuggestion networkSuggestion2 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOweNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createOweNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); WifiNetworkSuggestion networkSuggestion3 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createSaeNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createSaeNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); WifiNetworkSuggestion networkSuggestion4 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createPskNetwork(), false, false, TEST_UID_1, + WifiConfigurationTestUtil.createPskNetwork(), null, false, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<>(); networkSuggestionList.add(networkSuggestion1); @@ -2062,13 +2171,13 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { public void testGetHiddenNetworks() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), true, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, true, false, TEST_UID_1, TEST_PACKAGE_1); WifiNetworkSuggestion hiddenNetworkSuggestion1 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createPskHiddenNetwork(), true, false, TEST_UID_1, + WifiConfigurationTestUtil.createPskHiddenNetwork(), null, true, false, TEST_UID_1, TEST_PACKAGE_1); WifiNetworkSuggestion hiddenNetworkSuggestion2 = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createPskHiddenNetwork(), true, false, TEST_UID_2, + WifiConfigurationTestUtil.createPskHiddenNetwork(), null, true, false, TEST_UID_2, TEST_PACKAGE_2); List<WifiNetworkSuggestion> networkSuggestionList1 = new ArrayList<WifiNetworkSuggestion>() {{ @@ -2100,7 +2209,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testUserApprovalNotificationClickOnAllowDuringAddingSuggestions() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), true, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, true, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -2135,7 +2244,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { @Test public void testUserApprovalNotificationClickOnDisallowWhenAddSuggestions() { WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( - WifiConfigurationTestUtil.createOpenNetwork(), true, false, TEST_UID_1, + WifiConfigurationTestUtil.createOpenNetwork(), null, true, false, TEST_UID_1, TEST_PACKAGE_1); List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<WifiNetworkSuggestion>() {{ @@ -2183,6 +2292,57 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest { } /** + * Verify a successful lookup of a single passpoint network suggestion matching the + * connected network. + * a) The corresponding network suggestion has the + * {@link WifiNetworkSuggestion#isAppInteractionRequired} flag set. + * b) The app holds location permission. + * This should trigger a broadcast to the app. + */ + @Test + public void testOnPasspointNetworkConnectionSuccessWithOneMatch() { + PasspointConfiguration passpointConfiguration = new PasspointConfiguration(); + HomeSp homeSp = new HomeSp(); + homeSp.setFqdn(TEST_FQDN); + passpointConfiguration.setHomeSp(homeSp); + WifiConfiguration dummyConfiguration = new WifiConfiguration(); + dummyConfiguration.FQDN = TEST_FQDN; + WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion( + dummyConfiguration, passpointConfiguration, true, false, TEST_UID_1, + TEST_PACKAGE_1); + List<WifiNetworkSuggestion> networkSuggestionList = + new ArrayList<WifiNetworkSuggestion>() {{ + add(networkSuggestion); + }}; + when(mPasspointManager.addOrUpdateProvider(any(), anyInt(), anyString(), anyBoolean())) + .thenReturn(true); + assertEquals(WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS, + mWifiNetworkSuggestionsManager.add(networkSuggestionList, TEST_UID_1, + TEST_PACKAGE_1)); + + mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_1); + + // Simulate connecting to the network. + WifiConfiguration connectNetwork = WifiConfigurationTestUtil.createPasspointNetwork(); + connectNetwork.FQDN = TEST_FQDN; + connectNetwork.fromWifiNetworkSuggestion = true; + connectNetwork.ephemeral = true; + connectNetwork.creatorName = TEST_APP_NAME_1; + mWifiNetworkSuggestionsManager.handleConnectionAttemptEnded( + WifiMetrics.ConnectionEvent.FAILURE_NONE, connectNetwork, TEST_BSSID); + + verify(mWifiMetrics).incrementNetworkSuggestionApiNumConnectSuccess(); + + // Verify that the correct broadcast was sent out. + mInorder.verify(mWifiPermissionsUtil) + .enforceCanAccessScanResults(TEST_PACKAGE_1, TEST_UID_1); + validatePostConnectionBroadcastSent(TEST_PACKAGE_1, networkSuggestion); + + // Verify no more broadcast were sent out. + mInorder.verifyNoMoreInteractions(); + } + + /** * Creates a scan detail corresponding to the provided network values. */ private ScanDetail createScanDetailForNetwork(WifiConfiguration configuration) { diff --git a/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java b/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java index 955d890aa..e3b9f7103 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java @@ -2377,25 +2377,25 @@ public class WifiServiceImplTest extends WifiBaseTest { eq(Build.VERSION_CODES.Q), anyInt())).thenReturn(true); when(mPasspointManager.addOrUpdateProvider( - any(PasspointConfiguration.class), anyInt(), eq(TEST_PACKAGE_NAME))) + any(PasspointConfiguration.class), anyInt(), eq(TEST_PACKAGE_NAME), eq(false))) .thenReturn(true); mLooper.startAutoDispatch(); assertEquals(0, mWifiServiceImpl.addOrUpdateNetwork(config, TEST_PACKAGE_NAME)); mLooper.stopAutoDispatch(); verifyCheckChangePermission(TEST_PACKAGE_NAME); verify(mPasspointManager).addOrUpdateProvider( - any(PasspointConfiguration.class), anyInt(), eq(TEST_PACKAGE_NAME)); + any(PasspointConfiguration.class), anyInt(), eq(TEST_PACKAGE_NAME), eq(false)); reset(mPasspointManager); when(mPasspointManager.addOrUpdateProvider( - any(PasspointConfiguration.class), anyInt(), eq(TEST_PACKAGE_NAME))) + any(PasspointConfiguration.class), anyInt(), eq(TEST_PACKAGE_NAME), anyBoolean())) .thenReturn(false); mLooper.startAutoDispatch(); assertEquals(-1, mWifiServiceImpl.addOrUpdateNetwork(config, TEST_PACKAGE_NAME)); mLooper.stopAutoDispatch(); verifyCheckChangePermission(TEST_PACKAGE_NAME); verify(mPasspointManager).addOrUpdateProvider( - any(PasspointConfiguration.class), anyInt(), eq(TEST_PACKAGE_NAME)); + any(PasspointConfiguration.class), anyInt(), eq(TEST_PACKAGE_NAME), anyBoolean()); } /** @@ -3977,7 +3977,7 @@ public class WifiServiceImplTest extends WifiBaseTest { config.setHomeSp(homeSp); when(mPasspointManager.addOrUpdateProvider( - config, Binder.getCallingUid(), TEST_PACKAGE_NAME)) + config, Binder.getCallingUid(), TEST_PACKAGE_NAME, false)) .thenReturn(true); mLooper.startAutoDispatch(); assertTrue(mWifiServiceImpl.addOrUpdatePasspointConfiguration(config, TEST_PACKAGE_NAME)); @@ -3985,7 +3985,7 @@ public class WifiServiceImplTest extends WifiBaseTest { reset(mPasspointManager); when(mPasspointManager.addOrUpdateProvider( - config, Binder.getCallingUid(), TEST_PACKAGE_NAME)) + config, Binder.getCallingUid(), TEST_PACKAGE_NAME, false)) .thenReturn(false); mLooper.startAutoDispatch(); assertFalse(mWifiServiceImpl.addOrUpdatePasspointConfiguration(config, TEST_PACKAGE_NAME)); diff --git a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointConfigUserStoreDataTest.java b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointConfigUserStoreDataTest.java index 9943c4fb2..54a74978d 100644 --- a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointConfigUserStoreDataTest.java +++ b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointConfigUserStoreDataTest.java @@ -244,11 +244,11 @@ public class PasspointConfigUserStoreDataTest extends WifiBaseTest { List<PasspointProvider> providerList = new ArrayList<>(); providerList.add(new PasspointProvider(createFullPasspointConfiguration(), mKeyStore, mSimAccessor, TEST_PROVIDER_ID, TEST_CREATOR_UID, TEST_CREATOR_PACKAGE, - Arrays.asList(TEST_CA_CERTIFICATE_ALIAS), TEST_CLIENT_CERTIFICATE_ALIAS, + false, Arrays.asList(TEST_CA_CERTIFICATE_ALIAS), TEST_CLIENT_CERTIFICATE_ALIAS, TEST_CLIENT_PRIVATE_KEY_ALIAS, null, TEST_HAS_EVER_CONNECTED, TEST_SHARED)); providerList.add(new PasspointProvider(createFullPasspointConfiguration(), mKeyStore, mSimAccessor, TEST_PROVIDER_ID_2, TEST_CREATOR_UID, TEST_CREATOR_PACKAGE, - Arrays.asList(TEST_CA_CERTIFICATE_ALIAS, TEST_CA_CERTIFICATE_ALIAS_2), + true, Arrays.asList(TEST_CA_CERTIFICATE_ALIAS, TEST_CA_CERTIFICATE_ALIAS_2), TEST_CLIENT_CERTIFICATE_ALIAS, TEST_CLIENT_PRIVATE_KEY_ALIAS, TEST_REMEDIATION_CA_CERTIFICATE_ALIAS, TEST_HAS_EVER_CONNECTED, TEST_SHARED)); diff --git a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java index 34cd5021f..f24dc364a 100644 --- a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointManagerTest.java @@ -48,6 +48,7 @@ import static org.mockito.Mockito.lenient; 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.when; import static org.mockito.MockitoAnnotations.initMocks; @@ -94,6 +95,7 @@ import com.android.server.wifi.WifiInjector; import com.android.server.wifi.WifiKeyStore; import com.android.server.wifi.WifiMetrics; import com.android.server.wifi.WifiNative; +import com.android.server.wifi.WifiNetworkSuggestionsManager; import com.android.server.wifi.hotspot2.anqp.ANQPElement; import com.android.server.wifi.hotspot2.anqp.Constants.ANQPElementType; import com.android.server.wifi.hotspot2.anqp.DomainNameElement; @@ -132,6 +134,7 @@ import java.util.Set; public class PasspointManagerTest extends WifiBaseTest { private static final long BSSID = 0x112233445566L; private static final String TEST_PACKAGE = "com.android.test"; + private static final String TEST_PACKAGE1 = "com.android.test1"; private static final String ICON_FILENAME = "test"; private static final String TEST_FQDN = "test1.test.com"; private static final String TEST_FQDN2 = "test2.test.com"; @@ -160,6 +163,7 @@ public class PasspointManagerTest extends WifiBaseTest { private static final ANQPNetworkKey TEST_ANQP_KEY2 = ANQPNetworkKey.buildKey( TEST_SSID, TEST_BSSID, TEST_HESSID, TEST_ANQP_DOMAIN_ID2); private static final int TEST_CREATOR_UID = 1234; + private static final int TEST_CREATOR_UID1 = 1235; private static final int TEST_UID = 1500; @Mock Context mContext; @@ -189,6 +193,7 @@ public class PasspointManagerTest extends WifiBaseTest { @Mock TelephonyManager mTelephonyManager; @Mock TelephonyManager mDataTelephonyManager; @Mock SubscriptionManager mSubscriptionManager; + @Mock WifiNetworkSuggestionsManager mWifiNetworkSuggestionsManager; Handler mHandler; TestLooper mLooper; @@ -215,6 +220,8 @@ public class PasspointManagerTest extends WifiBaseTest { .thenReturn(mPasspointProvisioner); when(mContext.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(mAppOpsManager); when(mWifiInjector.getClientModeImpl()).thenReturn(mClientModeImpl); + when(mWifiInjector.getWifiNetworkSuggestionsManager()) + .thenReturn(mWifiNetworkSuggestionsManager); mLooper = new TestLooper(); mHandler = new Handler(mLooper.getLooper()); mManager = new PasspointManager(mContext, mWifiInjector, mHandler, mWifiNative, @@ -367,10 +374,10 @@ public class PasspointManagerTest extends WifiBaseTest { PasspointConfiguration config = createTestConfigWithUserCredential(fqdn, friendlyName); PasspointProvider provider = createMockProvider(config, wifiConfig); when(mObjectFactory.makePasspointProvider(eq(config), eq(mWifiKeyStore), - eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE))).thenReturn( - provider); + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE), + eq(false))).thenReturn(provider); when(provider.getPackageName()).thenReturn(packageName); - assertTrue(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE)); + assertTrue(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE, false)); return provider; } @@ -384,10 +391,10 @@ public class PasspointManagerTest extends WifiBaseTest { PasspointConfiguration config = createTestConfigWithSimCredential(fqdn, imsi, realm); PasspointProvider provider = createMockProvider(config); when(mObjectFactory.makePasspointProvider(eq(config), eq(mWifiKeyStore), - eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE))).thenReturn( - provider); + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE), + eq(false))).thenReturn(provider); - assertTrue(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE)); + assertTrue(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE, false)); return provider; } @@ -603,7 +610,7 @@ public class PasspointManagerTest extends WifiBaseTest { */ @Test public void addProviderWithNullConfig() throws Exception { - assertFalse(mManager.addOrUpdateProvider(null, TEST_CREATOR_UID, TEST_PACKAGE)); + assertFalse(mManager.addOrUpdateProvider(null, TEST_CREATOR_UID, TEST_PACKAGE, false)); verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); verify(mWifiMetrics, never()).incrementNumPasspointProviderInstallSuccess(); } @@ -616,7 +623,7 @@ public class PasspointManagerTest extends WifiBaseTest { @Test public void addProviderWithEmptyConfig() throws Exception { assertFalse(mManager.addOrUpdateProvider(new PasspointConfiguration(), TEST_CREATOR_UID, - TEST_PACKAGE)); + TEST_PACKAGE, false)); verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); verify(mWifiMetrics, never()).incrementNumPasspointProviderInstallSuccess(); } @@ -633,34 +640,32 @@ public class PasspointManagerTest extends WifiBaseTest { TEST_FRIENDLY_NAME); // EAP-TLS not allowed for user credential. config.getCredential().getUserCredential().setEapType(EAPConstants.EAP_TLS); - assertFalse(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE)); + assertFalse(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE, false)); verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); verify(mWifiMetrics, never()).incrementNumPasspointProviderInstallSuccess(); } /** - * Verify that adding a provider with a valid configuration and user credential will succeed. + * Verify that adding a user saved provider with a valid configuration and user credential will + * succeed. * * @throws Exception */ @Test - public void addRemoveProviderWithValidUserCredential() throws Exception { + public void addRemoveSavedProviderWithValidUserCredential() throws Exception { PasspointConfiguration config = createTestConfigWithUserCredential(TEST_FQDN, TEST_FRIENDLY_NAME); PasspointProvider provider = createMockProvider(config); when(provider.getPackageName()).thenReturn(TEST_PACKAGE); when(mObjectFactory.makePasspointProvider(eq(config), eq(mWifiKeyStore), - eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE))).thenReturn( - provider); - assertTrue(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE)); + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE), + eq(false))).thenReturn(provider); + assertTrue(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE, false)); verifyInstalledConfig(config); - verify(mWifiConfigManager).removePasspointConfiguredNetwork( - provider.getWifiConfig().configKey()); - verify(mWifiConfigManager).saveToStore(true); verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); verify(mWifiMetrics).incrementNumPasspointProviderInstallSuccess(); - verify(mAppOpsManager).startWatchingMode(eq(OPSTR_CHANGE_WIFI_STATE), eq(TEST_PACKAGE), any( - AppOpsManager.OnOpChangedListener.class)); + verify(mAppOpsManager).startWatchingMode(eq(OPSTR_CHANGE_WIFI_STATE), eq(TEST_PACKAGE), + any(AppOpsManager.OnOpChangedListener.class)); reset(mWifiMetrics); reset(mWifiConfigManager); @@ -689,22 +694,21 @@ public class PasspointManagerTest extends WifiBaseTest { } /** - * Verify that adding a provider with a valid configuration and SIM credential will succeed. + * Verify that adding a user saved provider with a valid configuration and SIM credential will + * succeed. * * @throws Exception */ @Test - public void addRemoveProviderWithValidSimCredential() throws Exception { + public void addRemoveSavedProviderWithValidSimCredential() throws Exception { PasspointConfiguration config = createTestConfigWithSimCredential(TEST_FQDN, TEST_IMSI, TEST_REALM); PasspointProvider provider = createMockProvider(config); when(mObjectFactory.makePasspointProvider(eq(config), eq(mWifiKeyStore), - eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE))).thenReturn( - provider); - assertTrue(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE)); + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE), + eq(false))).thenReturn(provider); + assertTrue(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE, false)); verifyInstalledConfig(config); - verify(mWifiConfigManager).removePasspointConfiguredNetwork( - provider.getWifiConfig().configKey()); verify(mWifiConfigManager).saveToStore(true); verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); verify(mWifiMetrics).incrementNumPasspointProviderInstallSuccess(); @@ -735,25 +739,23 @@ public class PasspointManagerTest extends WifiBaseTest { } /** - * Verify that adding a provider with the same base domain as the existing provider will - * succeed, and verify that the existing provider is replaced by the new provider with + * Verify that adding a user saved provider with the same base domain as the existing provider + * will succeed, and verify that the existing provider is replaced by the new provider with * the new configuration. * * @throws Exception */ @Test - public void addProviderWithExistingConfig() throws Exception { + public void addSavedProviderWithExistingConfig() throws Exception { // Add a provider with the original configuration. PasspointConfiguration origConfig = createTestConfigWithSimCredential(TEST_FQDN, TEST_IMSI, TEST_REALM); PasspointProvider origProvider = createMockProvider(origConfig); when(mObjectFactory.makePasspointProvider(eq(origConfig), eq(mWifiKeyStore), - eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE))).thenReturn( - origProvider); - assertTrue(mManager.addOrUpdateProvider(origConfig, TEST_CREATOR_UID, TEST_PACKAGE)); + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE), + eq(false))).thenReturn(origProvider); + assertTrue(mManager.addOrUpdateProvider(origConfig, TEST_CREATOR_UID, TEST_PACKAGE, false)); verifyInstalledConfig(origConfig); - verify(mWifiConfigManager).removePasspointConfiguredNetwork( - origProvider.getWifiConfig().configKey()); verify(mWifiConfigManager).saveToStore(true); verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); verify(mWifiMetrics).incrementNumPasspointProviderInstallSuccess(); @@ -772,9 +774,9 @@ public class PasspointManagerTest extends WifiBaseTest { TEST_FRIENDLY_NAME); PasspointProvider newProvider = createMockProvider(newConfig); when(mObjectFactory.makePasspointProvider(eq(newConfig), eq(mWifiKeyStore), - eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE))).thenReturn( - newProvider); - assertTrue(mManager.addOrUpdateProvider(newConfig, TEST_CREATOR_UID, TEST_PACKAGE)); + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE), + eq(false))).thenReturn(newProvider); + assertTrue(mManager.addOrUpdateProvider(newConfig, TEST_CREATOR_UID, TEST_PACKAGE, false)); verifyInstalledConfig(newConfig); verify(mWifiConfigManager).removePasspointConfiguredNetwork( newProvider.getWifiConfig().configKey()); @@ -802,9 +804,9 @@ public class PasspointManagerTest extends WifiBaseTest { PasspointProvider provider = mock(PasspointProvider.class); when(provider.installCertsAndKeys()).thenReturn(false); when(mObjectFactory.makePasspointProvider(eq(config), eq(mWifiKeyStore), - eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE))).thenReturn( - provider); - assertFalse(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE)); + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE), eq(false))) + .thenReturn(provider); + assertFalse(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE, false)); verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); verify(mWifiMetrics, never()).incrementNumPasspointProviderInstallSuccess(); } @@ -820,7 +822,7 @@ public class PasspointManagerTest extends WifiBaseTest { TEST_FRIENDLY_NAME); doThrow(new GeneralSecurityException()) .when(mCertVerifier).verifyCaCert(any(X509Certificate.class)); - assertFalse(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE)); + assertFalse(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE, false)); verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); verify(mWifiMetrics, never()).incrementNumPasspointProviderInstallSuccess(); } @@ -838,9 +840,9 @@ public class PasspointManagerTest extends WifiBaseTest { config.setUpdateIdentifier(1); PasspointProvider provider = createMockProvider(config); when(mObjectFactory.makePasspointProvider(eq(config), eq(mWifiKeyStore), - eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE))).thenReturn( - provider); - assertTrue(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE)); + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE), + eq(false))).thenReturn(provider); + assertTrue(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE, false)); verify(mCertVerifier, never()).verifyCaCert(any(X509Certificate.class)); verifyInstalledConfig(config); verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); @@ -1321,11 +1323,10 @@ public class PasspointManagerTest extends WifiBaseTest { // Verify the provider ID used to create the new provider. when(mObjectFactory.makePasspointProvider(eq(config), eq(mWifiKeyStore), eq(mSimAccessor), eq(providerIndex), eq(TEST_CREATOR_UID), - eq(TEST_PACKAGE))).thenReturn(provider); + eq(TEST_PACKAGE), eq(false))).thenReturn(provider); - assertTrue(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE)); + assertTrue(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE, false)); verifyInstalledConfig(config); - verify(mWifiConfigManager).saveToStore(true); reset(mWifiConfigManager); } @@ -1684,7 +1685,7 @@ public class PasspointManagerTest extends WifiBaseTest { PasspointConfiguration config = createTestConfigWithUserCredential("abc.com", "test"); PasspointProvider provider = createMockProvider(config); when(mObjectFactory.makePasspointProvider(eq(config), eq(mWifiKeyStore), - eq(mSimAccessor), anyLong(), anyInt(), isNull())).thenReturn(provider); + eq(mSimAccessor), anyLong(), anyInt(), isNull(), eq(false))).thenReturn(provider); assertFalse(mManager.installEphemeralPasspointConfigForCarrier(config)); } @@ -1700,7 +1701,7 @@ public class PasspointManagerTest extends WifiBaseTest { TEST_REALM); PasspointProvider provider = createMockProvider(config); when(mObjectFactory.makePasspointProvider(eq(config), eq(mWifiKeyStore), - eq(mSimAccessor), anyLong(), anyInt(), isNull())).thenReturn(provider); + eq(mSimAccessor), anyLong(), anyInt(), isNull(), eq(false))).thenReturn(provider); assertTrue(mManager.installEphemeralPasspointConfigForCarrier(config)); verify(mAppOpsManager, never()).startWatchingMode(eq(OPSTR_CHANGE_WIFI_STATE), @@ -1841,9 +1842,9 @@ public class PasspointManagerTest extends WifiBaseTest { TEST_REALM); PasspointProvider provider = createMockProvider(config); when(mObjectFactory.makePasspointProvider(eq(config), eq(mWifiKeyStore), - eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE))).thenReturn( - provider); - assertTrue(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE)); + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE), + eq(false))).thenReturn(provider); + assertTrue(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE, false)); verifyInstalledConfig(config); verify(mWifiConfigManager).saveToStore(true); verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); @@ -1868,4 +1869,300 @@ public class PasspointManagerTest extends WifiBaseTest { // 1 profile available for TEST_CREATOR_UID assertFalse(mManager.getProviderConfigs(TEST_CREATOR_UID, false).isEmpty()); } + + /** + * Verify that adding a suggestion provider with a valid configuration and user credential will + * succeed. + * + * @throws Exception + */ + @Test + public void addRemoveSuggestionProvider() throws Exception { + PasspointConfiguration config = createTestConfigWithUserCredential(TEST_FQDN, + TEST_FRIENDLY_NAME); + PasspointProvider provider = createMockProvider(config); + when(provider.getPackageName()).thenReturn(TEST_PACKAGE); + when(provider.isFromSuggestion()).thenReturn(true); + when(mObjectFactory.makePasspointProvider(eq(config), eq(mWifiKeyStore), + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE), + eq(true))).thenReturn(provider); + assertTrue(mManager.addOrUpdateProvider(config, TEST_CREATOR_UID, TEST_PACKAGE, true)); + verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); + verify(mWifiMetrics).incrementNumPasspointProviderInstallSuccess(); + verify(mAppOpsManager, never()).startWatchingMode(eq(OPSTR_CHANGE_WIFI_STATE), + eq(TEST_PACKAGE), any(AppOpsManager.OnOpChangedListener.class)); + assertTrue(mManager.getProviderConfigs(TEST_CREATOR_UID, false).isEmpty()); + reset(mWifiMetrics); + reset(mWifiConfigManager); + + // Verify content in the data source. + List<PasspointProvider> providers = mUserDataSource.getProviders(); + assertEquals(1, providers.size()); + assertEquals(config, providers.get(0).getConfig()); + // Provider index start with 0, should be 1 after adding a provider. + assertEquals(1, mSharedDataSource.getProviderIndex()); + + // Remove from another Suggestor app, should fail. + assertFalse(mManager.removeProvider(TEST_UID, false, TEST_FQDN)); + verify(provider, never()).uninstallCertsAndKeys(); + verify(mWifiConfigManager, never()).removePasspointConfiguredNetwork( + provider.getWifiConfig().configKey()); + verify(mWifiConfigManager, never()).saveToStore(true); + verify(mWifiMetrics).incrementNumPasspointProviderUninstallation(); + verify(mWifiMetrics, never()).incrementNumPasspointProviderUninstallSuccess(); + verify(mAppOpsManager, never()).stopWatchingMode( + any(AppOpsManager.OnOpChangedListener.class)); + // Verify content in the data source. + providers = mUserDataSource.getProviders(); + assertEquals(1, providers.size()); + assertEquals(config, providers.get(0).getConfig()); + // Provider index start with 0, should be 1 after adding a provider. + assertEquals(1, mSharedDataSource.getProviderIndex()); + reset(mWifiMetrics); + reset(mWifiConfigManager); + + // Remove the provider from same app. + assertTrue(mManager.removeProvider(TEST_CREATOR_UID, false, TEST_FQDN)); + verify(provider).uninstallCertsAndKeys(); + verify(mWifiConfigManager).removePasspointConfiguredNetwork( + provider.getWifiConfig().configKey()); + verify(mWifiConfigManager).saveToStore(true); + verify(mWifiMetrics).incrementNumPasspointProviderUninstallation(); + verify(mWifiMetrics).incrementNumPasspointProviderUninstallSuccess(); + verify(mAppOpsManager, never()).stopWatchingMode( + any(AppOpsManager.OnOpChangedListener.class)); + + // Verify content in the data source. + assertTrue(mUserDataSource.getProviders().isEmpty()); + // Removing a provider should not change the provider index. + assertEquals(1, mSharedDataSource.getProviderIndex()); + } + + /** + * Verify that adding a suggestion provider with the same base domain as the existing + * suggestion provider from same app will succeed, and verify that the existing provider is + * replaced by the new provider with the new configuration. + * + * @throws Exception + */ + @Test + public void addSuggestionProviderWithExistingConfig() throws Exception { + // Add a provider with the original configuration. + PasspointConfiguration origConfig = createTestConfigWithSimCredential(TEST_FQDN, TEST_IMSI, + TEST_REALM); + PasspointProvider origProvider = createMockProvider(origConfig); + when(origProvider.getPackageName()).thenReturn(TEST_PACKAGE); + when(mObjectFactory.makePasspointProvider(eq(origConfig), eq(mWifiKeyStore), + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE), + eq(true))).thenReturn(origProvider); + assertTrue(mManager.addOrUpdateProvider(origConfig, TEST_CREATOR_UID, TEST_PACKAGE, true)); + verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); + verify(mWifiMetrics).incrementNumPasspointProviderInstallSuccess(); + reset(mWifiMetrics); + reset(mWifiConfigManager); + + // Verify data source content. + List<PasspointProvider> origProviders = mUserDataSource.getProviders(); + assertEquals(1, origProviders.size()); + assertEquals(origConfig, origProviders.get(0).getConfig()); + assertEquals(1, mSharedDataSource.getProviderIndex()); + + // Add same provider as existing suggestion provider + // This should be no WifiConfig deletion + assertTrue(mManager.addOrUpdateProvider(origConfig, TEST_CREATOR_UID, TEST_PACKAGE, true)); + verify(mWifiConfigManager, never()).removePasspointConfiguredNetwork( + origProvider.getWifiConfig().configKey()); + verify(mWifiConfigManager).saveToStore(true); + verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); + verify(mWifiMetrics).incrementNumPasspointProviderInstallSuccess(); + assertEquals(2, mSharedDataSource.getProviderIndex()); + reset(mWifiMetrics); + reset(mWifiConfigManager); + + // Add another provider with the same base domain as the existing saved provider. + // This should replace the existing provider with the new configuration. + PasspointConfiguration newConfig = createTestConfigWithUserCredential(TEST_FQDN, + TEST_FRIENDLY_NAME); + PasspointProvider newProvider = createMockProvider(newConfig); + when(newProvider.isFromSuggestion()).thenReturn(true); + when(newProvider.getPackageName()).thenReturn(TEST_PACKAGE); + when(mObjectFactory.makePasspointProvider(eq(newConfig), eq(mWifiKeyStore), + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE), + eq(true))).thenReturn(newProvider); + assertTrue(mManager.addOrUpdateProvider(newConfig, TEST_CREATOR_UID, TEST_PACKAGE, true)); + verify(mWifiConfigManager).removePasspointConfiguredNetwork( + newProvider.getWifiConfig().configKey()); + verify(mWifiConfigManager).saveToStore(true); + verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); + verify(mWifiMetrics).incrementNumPasspointProviderInstallSuccess(); + + // Verify data source content. + List<PasspointProvider> newProviders = mUserDataSource.getProviders(); + assertEquals(1, newProviders.size()); + assertEquals(newConfig, newProviders.get(0).getConfig()); + assertEquals(3, mSharedDataSource.getProviderIndex()); + } + + /** + * Verify that adding a saved provider with the same base domain as the existing + * suggestion provider will succeed, and verify that the existing provider is + * replaced by the new provider with the new configuration. + * + * @throws Exception + */ + @Test + public void addSavedProviderWithExistingSuggestionConfig() throws Exception { + // Add a provider with the original configuration. + PasspointConfiguration origConfig = createTestConfigWithSimCredential(TEST_FQDN, TEST_IMSI, + TEST_REALM); + PasspointProvider origProvider = createMockProvider(origConfig); + when(origProvider.getPackageName()).thenReturn(TEST_PACKAGE); + when(mObjectFactory.makePasspointProvider(eq(origConfig), eq(mWifiKeyStore), + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE), + eq(true))).thenReturn(origProvider); + assertTrue(mManager.addOrUpdateProvider(origConfig, TEST_CREATOR_UID, TEST_PACKAGE, true)); + verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); + verify(mWifiMetrics).incrementNumPasspointProviderInstallSuccess(); + reset(mWifiMetrics); + reset(mWifiConfigManager); + + // Verify data source content. + List<PasspointProvider> origProviders = mUserDataSource.getProviders(); + assertEquals(1, origProviders.size()); + assertEquals(origConfig, origProviders.get(0).getConfig()); + assertEquals(1, mSharedDataSource.getProviderIndex()); + + // Add another provider with the same base domain as the existing saved provider. + // This should replace the existing provider with the new configuration. + PasspointConfiguration newConfig = createTestConfigWithUserCredential(TEST_FQDN, + TEST_FRIENDLY_NAME); + PasspointProvider newProvider = createMockProvider(newConfig); + when(mObjectFactory.makePasspointProvider(eq(newConfig), eq(mWifiKeyStore), + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE), + eq(false))).thenReturn(newProvider); + assertTrue(mManager.addOrUpdateProvider(newConfig, TEST_CREATOR_UID, TEST_PACKAGE, false)); + verify(mWifiConfigManager).removePasspointConfiguredNetwork( + newProvider.getWifiConfig().configKey()); + verify(mWifiConfigManager).saveToStore(true); + verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); + verify(mWifiMetrics).incrementNumPasspointProviderInstallSuccess(); + + // Verify data source content. + List<PasspointProvider> newProviders = mUserDataSource.getProviders(); + assertEquals(1, newProviders.size()); + assertEquals(newConfig, newProviders.get(0).getConfig()); + assertEquals(2, mSharedDataSource.getProviderIndex()); + } + + /** + * Verify that adding a suggestion provider with the same base domain as the existing provider + * from different apps will fail, and verify that the existing provider is not replaced by the + * new provider with the new configuration. + * + * @throws Exception + */ + @Test + public void addSuggestionProviderWithExistingConfigFromDifferentSource() throws Exception { + // Add a provider with the original configuration. + PasspointConfiguration origConfig = createTestConfigWithSimCredential(TEST_FQDN, TEST_IMSI, + TEST_REALM); + PasspointProvider origProvider = createMockProvider(origConfig); + when(origProvider.getPackageName()).thenReturn(TEST_PACKAGE); + when(mObjectFactory.makePasspointProvider(eq(origConfig), eq(mWifiKeyStore), + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE), + eq(false))).thenReturn(origProvider); + assertTrue(mManager.addOrUpdateProvider(origConfig, TEST_CREATOR_UID, TEST_PACKAGE, false)); + verifyInstalledConfig(origConfig); + verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); + verify(mWifiMetrics).incrementNumPasspointProviderInstallSuccess(); + reset(mWifiMetrics); + reset(mWifiConfigManager); + + // Verify data source content. + List<PasspointProvider> origProviders = mUserDataSource.getProviders(); + assertEquals(1, origProviders.size()); + assertEquals(origConfig, origProviders.get(0).getConfig()); + assertEquals(1, mSharedDataSource.getProviderIndex()); + + // Add another provider with the same base domain as the existing saved provider but from + // different app. This should not replace the existing provider with the new configuration. + PasspointConfiguration newConfig = createTestConfigWithUserCredential(TEST_FQDN, + TEST_FRIENDLY_NAME); + PasspointProvider newProvider = createMockProvider(newConfig); + when(newProvider.isFromSuggestion()).thenReturn(true); + when(newProvider.getPackageName()).thenReturn(TEST_PACKAGE1); + when(mObjectFactory.makePasspointProvider(eq(newConfig), eq(mWifiKeyStore), + eq(mSimAccessor), anyLong(), eq(TEST_CREATOR_UID), eq(TEST_PACKAGE1), + eq(true))).thenReturn(newProvider); + assertFalse(mManager.addOrUpdateProvider(newConfig, TEST_CREATOR_UID, TEST_PACKAGE1, true)); + verify(mWifiConfigManager, never()).removePasspointConfiguredNetwork( + newProvider.getWifiConfig().configKey()); + verify(mWifiConfigManager, never()).saveToStore(true); + verify(mWifiMetrics).incrementNumPasspointProviderInstallation(); + verify(mWifiMetrics, never()).incrementNumPasspointProviderInstallSuccess(); + + // Verify data source content. + List<PasspointProvider> newProviders = mUserDataSource.getProviders(); + assertEquals(1, newProviders.size()); + assertEquals(origConfig, newProviders.get(0).getConfig()); + assertEquals(2, mSharedDataSource.getProviderIndex()); + } + + /** + * Verify that an expected map of FQDN and a list of ScanResult will be returned when provided + * scanResults are matched to installed Passpoint profiles. If matched Passpoint profiles is + * from suggestion, will check if it is approved. If it is not approved, send the user approved + * notification, and not to add into the matched list. + */ + @Test + public void getAllMatchingFqdnsForScanResultsWithSuggestionProvider() { + // static mocking + MockitoSession session = + com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession().mockStatic( + InformationElementUtil.class).startMocking(); + try { + PasspointProvider providerApproved = addTestProvider(TEST_FQDN + 0, TEST_FRIENDLY_NAME, + TEST_PACKAGE); + providerApproved.getWifiConfig().isHomeProviderNetwork = true; + PasspointProvider providerNeedApprove = addTestProvider(TEST_FQDN + 1, + TEST_FRIENDLY_NAME, TEST_PACKAGE1); + providerNeedApprove.getWifiConfig().isHomeProviderNetwork = true; + + ANQPData entry = new ANQPData(mClock, null); + InformationElementUtil.Vsa vsa = new InformationElementUtil.Vsa(); + vsa.anqpDomainID = TEST_ANQP_DOMAIN_ID2; + + when(mAnqpCache.getEntry(TEST_ANQP_KEY2)).thenReturn(entry); + when(InformationElementUtil.getHS2VendorSpecificIE(isNull())).thenReturn(vsa); + when(providerApproved.match(anyMap(), isNull())) + .thenReturn(PasspointMatch.HomeProvider); + when(providerNeedApprove.match(anyMap(), isNull())) + .thenReturn(PasspointMatch.HomeProvider); + when(providerApproved.isFromSuggestion()).thenReturn(true); + when(providerNeedApprove.isFromSuggestion()).thenReturn(true); + when(mWifiNetworkSuggestionsManager + .sendUserApprovalNotificationIfNotApproved(eq(TEST_PACKAGE), anyInt())) + .thenReturn(false); + when(mWifiNetworkSuggestionsManager + .sendUserApprovalNotificationIfNotApproved(eq(TEST_PACKAGE1), anyInt())) + .thenReturn(true); + Map<String, Map<Integer, List<ScanResult>>> configs = + mManager.getAllMatchingFqdnsForScanResults( + createTestScanResults()); + verify(mWifiNetworkSuggestionsManager, times(2)) + .sendUserApprovalNotificationIfNotApproved(eq(TEST_PACKAGE), anyInt()); + verify(mWifiNetworkSuggestionsManager, times(2)) + .sendUserApprovalNotificationIfNotApproved(eq(TEST_PACKAGE1), anyInt()); + // Expects to be matched with home Provider for each AP (two APs). + assertEquals(2, configs.get(TEST_FQDN + 0).get( + WifiManager.PASSPOINT_HOME_NETWORK).size()); + assertFalse( + configs.get(TEST_FQDN + 0).containsKey(WifiManager.PASSPOINT_ROAMING_NETWORK)); + + // Expects there is no matched AP. + assertNull(configs.get(TEST_FQDN + 1)); + } finally { + session.finishMocking(); + } + } } diff --git a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointProviderTest.java b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointProviderTest.java index 4ee91fa8d..ec0533214 100644 --- a/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointProviderTest.java +++ b/tests/wifitests/src/com/android/server/wifi/hotspot2/PasspointProviderTest.java @@ -154,7 +154,7 @@ public class PasspointProviderTest extends WifiBaseTest { */ private PasspointProvider createProvider(PasspointConfiguration config) { return new PasspointProvider(config, mKeyStore, mSimAccessor, PROVIDER_ID, CREATOR_UID, - CREATOR_PACKAGE); + CREATOR_PACKAGE, false); } /** |