diff options
7 files changed, 165 insertions, 39 deletions
diff --git a/service/java/com/android/server/wifi/NetworkSuggestionEvaluator.java b/service/java/com/android/server/wifi/NetworkSuggestionEvaluator.java index f248e08be..2c231a0c4 100644 --- a/service/java/com/android/server/wifi/NetworkSuggestionEvaluator.java +++ b/service/java/com/android/server/wifi/NetworkSuggestionEvaluator.java @@ -20,7 +20,6 @@ import android.annotation.NonNull; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiNetworkSuggestion; -import android.os.Process; import android.util.LocalLog; import java.util.Comparator; @@ -124,18 +123,22 @@ public class NetworkSuggestionEvaluator implements WifiNetworkSelector.NetworkEv existingSavedNetwork.networkId)); return existingSavedNetwork; } - return addCandidateToWifiConfigManager(candidateNetworkSuggestion.wifiConfiguration); + return addCandidateToWifiConfigManager( + candidateNetworkSuggestion.wifiConfiguration, + candidateNetworkSuggestion.suggestorUid, + candidateNetworkSuggestion.suggestorPackageName); } // Add and enable this network to the central database (i.e WifiConfigManager). // Returns the copy of WifiConfiguration with the allocated network ID filled in. private WifiConfiguration addCandidateToWifiConfigManager( - @NonNull WifiConfiguration wifiConfiguration) { + @NonNull WifiConfiguration wifiConfiguration, int uid, @NonNull String packageName) { // Mark the network ephemeral because we don't want these persisted by WifiConfigManager. wifiConfiguration.ephemeral = true; + wifiConfiguration.fromWifiNetworkSuggestion = true; NetworkUpdateResult result = - mWifiConfigManager.addOrUpdateNetwork(wifiConfiguration, Process.WIFI_UID); + mWifiConfigManager.addOrUpdateNetwork(wifiConfiguration, uid, packageName); if (!result.isSuccess()) { mLocalLog.log("Failed to add network suggestion"); return null; diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java index bd5ffe905..9ad1f44e4 100644 --- a/service/java/com/android/server/wifi/WifiConfigManager.java +++ b/service/java/com/android/server/wifi/WifiConfigManager.java @@ -16,6 +16,7 @@ package com.android.server.wifi; +import android.annotation.Nullable; import android.app.ActivityManager; import android.app.admin.DeviceAdminInfo; import android.app.admin.DevicePolicyManagerInternal; @@ -1008,7 +1009,7 @@ public class WifiConfigManager { * configuration. */ private WifiConfiguration createNewInternalWifiConfigurationFromExternal( - WifiConfiguration externalConfig, int uid) { + WifiConfiguration externalConfig, int uid, @Nullable String packageName) { WifiConfiguration newInternalConfig = new WifiConfiguration(); // First allocate a new network ID for the configuration. @@ -1028,6 +1029,8 @@ public class WifiConfigManager { newInternalConfig.ephemeral = externalConfig.ephemeral; newInternalConfig.osu = externalConfig.osu; newInternalConfig.trusted = externalConfig.trusted; + newInternalConfig.fromWifiNetworkSuggestion = externalConfig.fromWifiNetworkSuggestion; + newInternalConfig.fromWifiNetworkSpecifier = externalConfig.fromWifiNetworkSpecifier; newInternalConfig.useExternalScores = externalConfig.useExternalScores; newInternalConfig.shared = externalConfig.shared; newInternalConfig.updateIdentifier = externalConfig.updateIdentifier; @@ -1035,7 +1038,7 @@ public class WifiConfigManager { // Add debug information for network addition. newInternalConfig.creatorUid = newInternalConfig.lastUpdateUid = uid; newInternalConfig.creatorName = newInternalConfig.lastUpdateName = - mContext.getPackageManager().getNameForUid(uid); + packageName != null ? packageName : mContext.getPackageManager().getNameForUid(uid); newInternalConfig.creationTime = newInternalConfig.updateTime = createDebugTimeStampString(mClock.getWallClockMillis()); updateRandomizedMacAddress(newInternalConfig); @@ -1078,7 +1081,8 @@ public class WifiConfigManager { * configuration. */ private WifiConfiguration updateExistingInternalWifiConfigurationFromExternal( - WifiConfiguration internalConfig, WifiConfiguration externalConfig, int uid) { + WifiConfiguration internalConfig, WifiConfiguration externalConfig, int uid, + @Nullable String packageName) { WifiConfiguration newInternalConfig = new WifiConfiguration(internalConfig); // Copy over all the public elements from the provided configuration. @@ -1086,7 +1090,8 @@ public class WifiConfigManager { // Add debug information for network update. newInternalConfig.lastUpdateUid = uid; - newInternalConfig.lastUpdateName = mContext.getPackageManager().getNameForUid(uid); + newInternalConfig.lastUpdateName = + packageName != null ? packageName : mContext.getPackageManager().getNameForUid(uid); newInternalConfig.updateTime = createDebugTimeStampString(mClock.getWallClockMillis()); return newInternalConfig; @@ -1098,10 +1103,12 @@ public class WifiConfigManager { * network configuration. Otherwise, the networkId should refer to an existing configuration. * * @param config provided WifiConfiguration object. - * @param uid UID of the app requesting the network addition/deletion. + * @param uid UID of the app requesting the network addition/modification. + * @param packageName Package name of the app requesting the network addition/modification. * @return NetworkUpdateResult object representing status of the update. */ - private NetworkUpdateResult addOrUpdateNetworkInternal(WifiConfiguration config, int uid) { + private NetworkUpdateResult addOrUpdateNetworkInternal(WifiConfiguration config, int uid, + @Nullable String packageName) { if (mVerboseLoggingEnabled) { Log.v(TAG, "Adding/Updating network " + config.getPrintableSsid()); } @@ -1115,7 +1122,8 @@ public class WifiConfigManager { Log.e(TAG, "Cannot add network with invalid config"); return new NetworkUpdateResult(WifiConfiguration.INVALID_NETWORK_ID); } - newInternalConfig = createNewInternalWifiConfigurationFromExternal(config, uid); + newInternalConfig = + createNewInternalWifiConfigurationFromExternal(config, uid, packageName); // Since the original config provided may have had an empty // {@link WifiConfiguration#allowedKeyMgmt} field, check again if we already have a // network with the the same configkey. @@ -1136,7 +1144,7 @@ public class WifiConfigManager { } newInternalConfig = updateExistingInternalWifiConfigurationFromExternal( - existingInternalConfig, config, uid); + existingInternalConfig, config, uid, packageName); } // Only add networks with proxy settings if the user has permission to @@ -1220,10 +1228,12 @@ public class WifiConfigManager { * network configuration. Otherwise, the networkId should refer to an existing configuration. * * @param config provided WifiConfiguration object. - * @param uid UID of the app requesting the network addition/modification. + * @param uid UID of the app requesting the network addition/modification. + * @param packageName Package name of the app requesting the network addition/modification. * @return NetworkUpdateResult object representing status of the update. */ - public NetworkUpdateResult addOrUpdateNetwork(WifiConfiguration config, int uid) { + public NetworkUpdateResult addOrUpdateNetwork(WifiConfiguration config, int uid, + @Nullable String packageName) { if (!doesUidBelongToCurrentUser(uid)) { Log.e(TAG, "UID " + uid + " not visible to the current user"); return new NetworkUpdateResult(WifiConfiguration.INVALID_NETWORK_ID); @@ -1236,7 +1246,7 @@ public class WifiConfigManager { Log.e(TAG, "Cannot add/update network before store is read!"); return new NetworkUpdateResult(WifiConfiguration.INVALID_NETWORK_ID); } - NetworkUpdateResult result = addOrUpdateNetworkInternal(config, uid); + NetworkUpdateResult result = addOrUpdateNetworkInternal(config, uid, packageName); if (!result.isSuccess()) { Log.e(TAG, "Failed to add/update network " + config.getPrintableSsid()); return result; @@ -1259,6 +1269,20 @@ public class WifiConfigManager { } } return result; + + } + + /** + * Add a network or update a network configuration to our database. + * If the supplied networkId is INVALID_NETWORK_ID, we create a new empty + * network configuration. Otherwise, the networkId should refer to an existing configuration. + * + * @param config provided WifiConfiguration object. + * @param uid UID of the app requesting the network addition/modification. + * @return NetworkUpdateResult object representing status of the update. + */ + public NetworkUpdateResult addOrUpdateNetwork(WifiConfiguration config, int uid) { + return addOrUpdateNetwork(config, uid, null); } /** diff --git a/service/java/com/android/server/wifi/WifiNetworkFactory.java b/service/java/com/android/server/wifi/WifiNetworkFactory.java index 42e7aa98f..1bd93c635 100644 --- a/service/java/com/android/server/wifi/WifiNetworkFactory.java +++ b/service/java/com/android/server/wifi/WifiNetworkFactory.java @@ -662,7 +662,9 @@ public class WifiNetworkFactory extends NetworkFactory { return existingSavedNetwork.networkId; } NetworkUpdateResult networkUpdateResult = - mWifiConfigManager.addOrUpdateNetwork(network, Process.WIFI_UID); + mWifiConfigManager.addOrUpdateNetwork( + network, mActiveSpecificNetworkRequestSpecifier.requestorUid, + mActiveSpecificNetworkRequestSpecifier.requestorPackageName); if (mVerboseLoggingEnabled) { Log.v(TAG, "Added network to config manager " + networkUpdateResult.netId); } @@ -706,6 +708,8 @@ public class WifiNetworkFactory extends NetworkFactory { // Mark the network ephemeral so that it's automatically removed at the end of connection. network.ephemeral = true; + network.fromWifiNetworkSpecifier = true; + // Store the user selected network. mUserSelectedNetwork = network; diff --git a/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java b/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java index 08f09642a..4d403162c 100644 --- a/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java +++ b/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java @@ -50,6 +50,8 @@ public class NetworkSuggestionEvaluatorTest { private static final int TEST_UID = 3555; private static final int TEST_UID_OTHER = 3545; private static final int TEST_NETWORK_ID = 55; + private static final String TEST_PACKAGE = "com.test"; + private static final String TEST_PACKAGE_OTHER = "com.test.other"; private @Mock WifiConfigManager mWifiConfigManager; private @Mock WifiNetworkSuggestionsManager mWifiNetworkSuggestionsManager; @@ -83,11 +85,12 @@ public class NetworkSuggestionEvaluatorTest { boolean[] meteredness = {}; int[] priorities = {}; int[] uids = {}; + String[] packageNames = {}; ScanDetail[] scanDetails = buildScanDetails(scanSsids, bssids, freqs, caps, levels, mClock); WifiNetworkSuggestion[] suggestions = buildNetworkSuggestions(suggestionSsids, securities, - appInteractions, meteredness, priorities, uids); + appInteractions, meteredness, priorities, uids, packageNames); // Link the scan result with suggestions. linkScanDetailsWithNetworkSuggestions(scanDetails, suggestions); @@ -120,11 +123,12 @@ public class NetworkSuggestionEvaluatorTest { boolean[] meteredness = {true}; int[] priorities = {0}; int[] uids = {TEST_UID}; + String[] packageNames = {TEST_PACKAGE}; ScanDetail[] scanDetails = buildScanDetails(scanSsids, bssids, freqs, caps, levels, mClock); WifiNetworkSuggestion[] suggestions = buildNetworkSuggestions(suggestionSsids, securities, - appInteractions, meteredness, priorities, uids); + appInteractions, meteredness, priorities, uids, packageNames); // Link the scan result with suggestions. linkScanDetailsWithNetworkSuggestions(scanDetails, suggestions); // setup config manager interactions. @@ -167,11 +171,12 @@ public class NetworkSuggestionEvaluatorTest { boolean[] meteredness = {true, true}; int[] priorities = {0, 1}; int[] uids = {TEST_UID, TEST_UID}; + String[] packageNames = {TEST_PACKAGE, TEST_PACKAGE}; ScanDetail[] scanDetails = buildScanDetails(scanSsids, bssids, freqs, caps, levels, mClock); WifiNetworkSuggestion[] suggestions = buildNetworkSuggestions(suggestionSsids, securities, - appInteractions, meteredness, priorities, uids); + appInteractions, meteredness, priorities, uids, packageNames); // Link the scan result with suggestions. linkScanDetailsWithNetworkSuggestions(scanDetails, suggestions); // setup config manager interactions. @@ -220,11 +225,12 @@ public class NetworkSuggestionEvaluatorTest { boolean[] meteredness = {true, true, false}; int[] priorities = {0, 1, 0}; int[] uids = {TEST_UID, TEST_UID, TEST_UID_OTHER}; + String[] packageNames = {TEST_PACKAGE, TEST_PACKAGE, TEST_PACKAGE_OTHER}; ScanDetail[] scanDetails = buildScanDetails(scanSsids, bssids, freqs, caps, levels, mClock); WifiNetworkSuggestion[] suggestions = buildNetworkSuggestions(suggestionSsids, securities, - appInteractions, meteredness, priorities, uids); + appInteractions, meteredness, priorities, uids, packageNames); // Link the scan result with suggestions. linkScanDetailsWithNetworkSuggestions(scanDetails, suggestions); // setup config manager interactions. @@ -270,15 +276,16 @@ public class NetworkSuggestionEvaluatorTest { boolean[] meteredness = {true}; int[] priorities = {0}; int[] uids = {TEST_UID}; + String[] packageNames = {TEST_PACKAGE}; ScanDetail[] scanDetails = buildScanDetails(scanSsids, bssids, freqs, caps, levels, mClock); WifiNetworkSuggestion[] suggestions = buildNetworkSuggestions(suggestionSsids, securities, - appInteractions, meteredness, priorities, uids); + appInteractions, meteredness, priorities, uids, packageNames); // Link the scan result with suggestions. linkScanDetailsWithNetworkSuggestions(scanDetails, suggestions); // Fail add to WifiConfigManager - when(mWifiConfigManager.addOrUpdateNetwork(any(), anyInt())) + when(mWifiConfigManager.addOrUpdateNetwork(any(), anyInt(), anyString())) .thenReturn(new NetworkUpdateResult(WifiConfiguration.INVALID_NETWORK_ID)); List<Pair<ScanDetail, WifiConfiguration>> connectableNetworks = new ArrayList<>(); @@ -295,7 +302,7 @@ public class NetworkSuggestionEvaluatorTest { assertEquals(suggestionSsids[0], connectableNetworks.get(0).second.SSID); assertEquals(scanSsids[0], connectableNetworks.get(0).first.getScanResult().SSID); - verify(mWifiConfigManager).addOrUpdateNetwork(any(), anyInt()); + verify(mWifiConfigManager).addOrUpdateNetwork(any(), anyInt(), anyString()); } /** @@ -317,11 +324,12 @@ public class NetworkSuggestionEvaluatorTest { boolean[] meteredness = {true}; int[] priorities = {0}; int[] uids = {TEST_UID}; + String[] packageNames = {TEST_PACKAGE}; ScanDetail[] scanDetails = buildScanDetails(scanSsids, bssids, freqs, caps, levels, mClock); WifiNetworkSuggestion[] suggestions = buildNetworkSuggestions(suggestionSsids, securities, - appInteractions, meteredness, priorities, uids); + appInteractions, meteredness, priorities, uids, packageNames); // Link the scan result with suggestions. linkScanDetailsWithNetworkSuggestions(scanDetails, suggestions); // Existing saved network matching the credentials. @@ -351,7 +359,7 @@ public class NetworkSuggestionEvaluatorTest { private void setupAddToWifiConfigManager(WifiConfiguration candidate) { // setup & verify the WifiConfigmanager interactions for adding/enabling the network. - when(mWifiConfigManager.addOrUpdateNetwork(any(), anyInt())) + when(mWifiConfigManager.addOrUpdateNetwork(any(), anyInt(), anyString())) .thenReturn(new NetworkUpdateResult(TEST_NETWORK_ID)); when(mWifiConfigManager.updateNetworkSelectionStatus(eq(TEST_NETWORK_ID), anyInt())) .thenReturn(true); @@ -367,10 +375,12 @@ public class NetworkSuggestionEvaluatorTest { ArgumentCaptor<WifiConfiguration> wifiConfigurationCaptor = ArgumentCaptor.forClass(WifiConfiguration.class); - verify(mWifiConfigManager).addOrUpdateNetwork(wifiConfigurationCaptor.capture(), anyInt()); + verify(mWifiConfigManager).addOrUpdateNetwork(wifiConfigurationCaptor.capture(), anyInt(), + anyString()); WifiConfiguration addedWifiConfiguration = wifiConfigurationCaptor.getValue(); assertNotNull(addedWifiConfiguration); assertTrue(addedWifiConfiguration.ephemeral); + assertTrue(addedWifiConfiguration.fromWifiNetworkSuggestion); assertEquals(candidate.SSID, addedWifiConfiguration.SSID); verify(mWifiConfigManager).updateNetworkSelectionStatus(eq(TEST_NETWORK_ID), anyInt()); @@ -420,7 +430,7 @@ public class NetworkSuggestionEvaluatorTest { private WifiNetworkSuggestion[] buildNetworkSuggestions( String[] ssids, int[] securities, boolean[] appInteractions, boolean[] meteredness, - int[] priorities, int[] uids) { + int[] priorities, int[] uids, String[] packageNames) { WifiConfiguration[] configs = buildWifiConfigurations(ssids, securities); WifiNetworkSuggestion[] suggestions = new WifiNetworkSuggestion[configs.length]; for (int i = 0; i < configs.length; i++) { @@ -429,7 +439,7 @@ public class NetworkSuggestionEvaluatorTest { ? WifiConfiguration.METERED_OVERRIDE_METERED : WifiConfiguration.METERED_OVERRIDE_NONE; suggestions[i] = new WifiNetworkSuggestion(configs[i], appInteractions[i], - false, uids[i], ""); + false, uids[i], packageNames[i]); } return suggestions; } diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java index 752ef09cd..c330a14fc 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java @@ -19,6 +19,7 @@ package com.android.server.wifi; import static org.junit.Assert.*; import static org.mockito.Mockito.*; +import android.annotation.Nullable; import android.app.admin.DeviceAdminInfo; import android.app.admin.DevicePolicyManagerInternal; import android.app.test.MockAnswerUtil.AnswerWithArguments; @@ -495,6 +496,56 @@ public class WifiConfigManagerTest { } /** + * Verifies the addition of a single suggestion network using + * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int, String)} and verifies + * that the {@link WifiConfigManager#getSavedNetworks()} does not return this network. + */ + @Test + public void testAddSingleSuggestionNetwork() throws Exception { + WifiConfiguration suggestionNetwork = WifiConfigurationTestUtil.createOpenNetwork(); + suggestionNetwork.ephemeral = true; + suggestionNetwork.fromWifiNetworkSuggestion = true; + List<WifiConfiguration> networks = new ArrayList<>(); + networks.add(suggestionNetwork); + + verifyAddSuggestionOrRequestNetworkToWifiConfigManager(suggestionNetwork); + + List<WifiConfiguration> retrievedNetworks = + mWifiConfigManager.getConfiguredNetworksWithPasswords(); + WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( + networks, retrievedNetworks); + + // Ensure that this is not returned in the saved network list. + assertTrue(mWifiConfigManager.getSavedNetworks(Process.WIFI_UID).isEmpty()); + verify(mWcmListener, never()).onSavedNetworkAdded(suggestionNetwork.networkId); + } + + /** + * Verifies the addition of a single specifier network using + * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int, String)} and verifies + * that the {@link WifiConfigManager#getSavedNetworks()} does not return this network. + */ + @Test + public void testAddSingleSpecifierNetwork() throws Exception { + WifiConfiguration suggestionNetwork = WifiConfigurationTestUtil.createOpenNetwork(); + suggestionNetwork.ephemeral = true; + suggestionNetwork.fromWifiNetworkSpecifier = true; + List<WifiConfiguration> networks = new ArrayList<>(); + networks.add(suggestionNetwork); + + verifyAddSuggestionOrRequestNetworkToWifiConfigManager(suggestionNetwork); + + List<WifiConfiguration> retrievedNetworks = + mWifiConfigManager.getConfiguredNetworksWithPasswords(); + WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate( + networks, retrievedNetworks); + + // Ensure that this is not returned in the saved network list. + assertTrue(mWifiConfigManager.getSavedNetworks(Process.WIFI_UID).isEmpty()); + verify(mWcmListener, never()).onSavedNetworkAdded(suggestionNetwork.networkId); + } + + /** * Verifies that the modification of a single open network using * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} with a UID which * has no permission to modify the network fails. @@ -4339,9 +4390,10 @@ public class WifiConfigManagerTest { * Modifies the provided configuration with creator uid, package name * and time. */ - private void setCreationDebugParams(WifiConfiguration configuration) { - configuration.creatorUid = configuration.lastUpdateUid = TEST_CREATOR_UID; - configuration.creatorName = configuration.lastUpdateName = TEST_CREATOR_NAME; + private void setCreationDebugParams(WifiConfiguration configuration, int uid, + String packageName) { + configuration.creatorUid = configuration.lastUpdateUid = uid; + configuration.creatorName = configuration.lastUpdateName = packageName; configuration.creationTime = configuration.updateTime = WifiConfigManager.createDebugTimeStampString( TEST_WALLCLOCK_CREATION_TIME_MILLIS); @@ -4600,7 +4652,15 @@ public class WifiConfigManagerTest { * Adds the provided configuration to WifiConfigManager with uid = TEST_CREATOR_UID. */ private NetworkUpdateResult addNetworkToWifiConfigManager(WifiConfiguration configuration) { - return addNetworkToWifiConfigManager(configuration, TEST_CREATOR_UID); + return addNetworkToWifiConfigManager(configuration, TEST_CREATOR_UID, null); + } + + /** + * Adds the provided configuration to WifiConfigManager with uid specified. + */ + private NetworkUpdateResult addNetworkToWifiConfigManager(WifiConfiguration configuration, + int uid) { + return addNetworkToWifiConfigManager(configuration, uid, null); } /** @@ -4612,15 +4672,17 @@ public class WifiConfigManagerTest { * This method also triggers a store read if not already done. */ private NetworkUpdateResult addNetworkToWifiConfigManager(WifiConfiguration configuration, - int uid) { + int uid, + @Nullable String packageName) { clearInvocations(mContext, mWifiConfigStore, mNetworkListSharedStoreData, mNetworkListUserStoreData); triggerStoreReadIfNeeded(); when(mClock.getWallClockMillis()).thenReturn(TEST_WALLCLOCK_CREATION_TIME_MILLIS); NetworkUpdateResult result = - mWifiConfigManager.addOrUpdateNetwork(configuration, uid); + mWifiConfigManager.addOrUpdateNetwork(configuration, uid, packageName); setDefaults(configuration); - setCreationDebugParams(configuration); + setCreationDebugParams( + configuration, uid, packageName != null ? packageName : TEST_CREATOR_NAME); configuration.networkId = result.getNetworkId(); return result; } @@ -4660,6 +4722,24 @@ public class WifiConfigManagerTest { } /** + * Add ephemeral network to WifiConfigManager and ensure that it was successful. + */ + private NetworkUpdateResult verifyAddSuggestionOrRequestNetworkToWifiConfigManager( + WifiConfiguration configuration) throws Exception { + NetworkUpdateResult result = + addNetworkToWifiConfigManager(configuration, TEST_CREATOR_UID, TEST_CREATOR_NAME); + assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID); + assertTrue(result.isNewNetwork()); + assertTrue(result.hasIpChanged()); + assertTrue(result.hasProxyChanged()); + + verifyNetworkAddBroadcast(configuration); + // Ensure that the write was not invoked for ephemeral network addition. + mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).write(anyBoolean()); + return result; + } + + /** * Add Passpoint network to WifiConfigManager and ensure that it was successful. */ private NetworkUpdateResult verifyAddPasspointNetworkToWifiConfigManager( diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigurationTestUtil.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigurationTestUtil.java index 40cfd7457..00749ac7d 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConfigurationTestUtil.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigurationTestUtil.java @@ -595,7 +595,10 @@ public class WifiConfigurationTestUtil { assertEquals(expected.meteredOverride, actual.meteredOverride); assertEquals(expected.useExternalScores, actual.useExternalScores); assertEquals(expected.ephemeral, actual.ephemeral); + assertEquals(expected.osu, actual.osu); assertEquals(expected.trusted, actual.trusted); + assertEquals(expected.fromWifiNetworkSuggestion, actual.fromWifiNetworkSuggestion); + assertEquals(expected.fromWifiNetworkSpecifier, actual.fromWifiNetworkSpecifier); assertEquals(expected.creatorUid, actual.creatorUid); assertEquals(expected.creatorName, actual.creatorName); assertEquals(expected.creationTime, actual.creationTime); diff --git a/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java b/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java index ec3e9bb98..151f09469 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java @@ -162,7 +162,7 @@ public class WifiNetworkFactoryTest { .thenReturn(IMPORTANCE_FOREGROUND_SERVICE); when(mWifiInjector.getWifiScanner()).thenReturn(mWifiScanner); when(mWifiInjector.getClientModeImpl()).thenReturn(mClientModeImpl); - when(mWifiConfigManager.addOrUpdateNetwork(any(), anyInt())) + when(mWifiConfigManager.addOrUpdateNetwork(any(), anyInt(), anyString())) .thenReturn(new NetworkUpdateResult(TEST_NETWORK_ID_1)); mWifiNetworkFactory = new WifiNetworkFactory(mLooper.getLooper(), mContext, @@ -983,11 +983,12 @@ public class WifiNetworkFactoryTest { ArgumentCaptor<WifiConfiguration> wifiConfigurationCaptor = ArgumentCaptor.forClass(WifiConfiguration.class); verify(mWifiConfigManager).addOrUpdateNetwork( - wifiConfigurationCaptor.capture(), eq(Process.WIFI_UID)); + wifiConfigurationCaptor.capture(), eq(TEST_UID_1), eq(TEST_PACKAGE_NAME_1)); WifiConfiguration network = wifiConfigurationCaptor.getValue(); assertNotNull(network); WifiConfigurationTestUtil.assertConfigurationEqual(selectedNetwork, network); assertTrue(network.ephemeral); + assertTrue(network.fromWifiNetworkSpecifier); ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class); verify(mClientModeImpl).sendMessage(messageCaptor.capture()); @@ -1029,7 +1030,7 @@ public class WifiNetworkFactoryTest { verify(mWifiConnectivityManager).setSpecificNetworkRequestInProgress(true); // verify we don't try to add the network to WifiConfigManager. - verify(mWifiConfigManager, never()).addOrUpdateNetwork(any(), anyInt()); + verify(mWifiConfigManager, never()).addOrUpdateNetwork(any(), anyInt(), anyString()); ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class); verify(mClientModeImpl).sendMessage(messageCaptor.capture()); @@ -1084,13 +1085,14 @@ public class WifiNetworkFactoryTest { ArgumentCaptor<WifiConfiguration> wifiConfigurationCaptor = ArgumentCaptor.forClass(WifiConfiguration.class); verify(mWifiConfigManager).addOrUpdateNetwork( - wifiConfigurationCaptor.capture(), eq(Process.WIFI_UID)); + wifiConfigurationCaptor.capture(), eq(TEST_UID_1), eq(TEST_PACKAGE_NAME_1)); WifiConfiguration network = wifiConfigurationCaptor.getValue(); assertNotNull(network); WifiConfiguration expectedWifiConfiguration = new WifiConfiguration(mSelectedNetwork); expectedWifiConfiguration.BSSID = matchingScanResult.BSSID; WifiConfigurationTestUtil.assertConfigurationEqual(expectedWifiConfiguration, network); assertTrue(network.ephemeral); + assertTrue(network.fromWifiNetworkSpecifier); // Verify connection message. ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class); |