1f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh/* 2f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * Copyright (C) 2016 The Android Open Source Project 3f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * 4f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * Licensed under the Apache License, Version 2.0 (the "License"); 5f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * you may not use this file except in compliance with the License. 6f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * You may obtain a copy of the License at 7f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * 8f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * http://www.apache.org/licenses/LICENSE-2.0 9f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * 10f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * Unless required by applicable law or agreed to in writing, software 11f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * distributed under the License is distributed on an "AS IS" BASIS, 12f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * See the License for the specific language governing permissions and 14f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * limitations under the License. 15f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh */ 16f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 17f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhpackage com.android.server.wifi; 18f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 19f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 20f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport static com.android.server.wifi.WifiConfigurationTestUtil.SECURITY_NONE; 21f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport static com.android.server.wifi.WifiConfigurationTestUtil.SECURITY_PSK; 22f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 23f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport static org.junit.Assert.*; 24f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport static org.mockito.Mockito.*; 25f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 26f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport android.content.Context; 27f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport android.database.ContentObserver; 28f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport android.net.NetworkKey; 29f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport android.net.NetworkScoreManager; 30f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport android.net.Uri; 31f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport android.net.wifi.ScanResult; 32f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport android.net.wifi.WifiConfiguration; 33f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport android.net.wifi.WifiNetworkScoreCache; 34f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport android.os.Looper; 35f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport android.os.SystemClock; 36f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport android.provider.Settings; 37f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport android.test.suitebuilder.annotation.SmallTest; 38f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport android.util.LocalLog; 39f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 40f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport com.android.server.wifi.WifiNetworkSelectorTestUtil.ScanDetailsAndWifiConfigs; 41f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 42f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport org.junit.After; 43f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport org.junit.Before; 44f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport org.junit.Test; 45f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport org.mockito.ArgumentCaptor; 46f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport org.mockito.Captor; 47f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport org.mockito.Mock; 48f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport org.mockito.MockitoAnnotations; 49f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 50f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport java.util.ArrayList; 51f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhimport java.util.List; 52f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 53f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh/** 54f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * Unit tests for {@link ScoredNetworkEvaluator}. 55f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh */ 56f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh@SmallTest 57f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikhpublic class ScoredNetworkEvaluatorTest { 58f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh private ContentObserver mContentObserver; 59f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh private int mThresholdQualifiedRssi2G; 60f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh private int mThresholdQualifiedRssi5G; 61f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 62f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Mock private Context mContext; 63f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Mock private Clock mClock; 64f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Mock private FrameworkFacade mFrameworkFacade; 65f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Mock private NetworkScoreManager mNetworkScoreManager; 66f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Mock private WifiConfigManager mWifiConfigManager; 67f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 68f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Captor private ArgumentCaptor<NetworkKey[]> mNetworkKeyArrayCaptor; 69f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 70f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh private WifiNetworkScoreCache mScoreCache; 71f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh private ScoredNetworkEvaluator mScoredNetworkEvaluator; 72f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 73f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Before 74f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void setUp() throws Exception { 75f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mThresholdQualifiedRssi2G = -73; 76f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mThresholdQualifiedRssi5G = -70; 77f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 78f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh MockitoAnnotations.initMocks(this); 79f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 80f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh when(mFrameworkFacade.getIntegerSetting(mContext, 81f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED, 0)) 82f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh .thenReturn(1); 83f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 84f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ArgumentCaptor<ContentObserver> observerCaptor = 85f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ArgumentCaptor.forClass(ContentObserver.class); 86f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mScoreCache = new WifiNetworkScoreCache(mContext); 87f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mScoredNetworkEvaluator = new ScoredNetworkEvaluator(mContext, 88f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh Looper.getMainLooper(), mFrameworkFacade, mNetworkScoreManager, 89f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mWifiConfigManager, new LocalLog(0), mScoreCache); 90f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh verify(mFrameworkFacade).registerContentObserver(eq(mContext), any(Uri.class), eq(false), 91f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh observerCaptor.capture()); 92f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mContentObserver = observerCaptor.getValue(); 93f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 94f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh reset(mNetworkScoreManager); 95f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 96f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh when(mClock.getElapsedSinceBootMillis()).thenReturn(SystemClock.elapsedRealtime()); 97f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 98f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 99f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @After 100f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void tearDown() { 101f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh validateMockitoUsage(); 102f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 103f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 104f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Test 105f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void testUpdate_recommendationsDisabled() { 106f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ssids = {"\"test1\""}; 107f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] bssids = {"6c:f3:7f:ae:8c:f3"}; 108f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] freqs = {2470}; 109f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] caps = {"[WPA2-EAP-CCMP][ESS]"}; 110f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] levels = {mThresholdQualifiedRssi2G + 8}; 111f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] securities = {SECURITY_PSK}; 112f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 113f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ScanDetailsAndWifiConfigs scanDetailsAndConfigs = WifiNetworkSelectorTestUtil 114f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh .setupScanDetailsAndConfigStore( 115f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ssids, bssids, freqs, caps, levels, securities, mWifiConfigManager, mClock); 116f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 117f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh when(mFrameworkFacade.getIntegerSetting(mContext, 118f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED, 0)) 119f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh .thenReturn(0); 120f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 121f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mContentObserver.onChange(false /* unused */); 122f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 123f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mScoredNetworkEvaluator.update(scanDetailsAndConfigs.getScanDetails()); 124f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 125f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh verifyZeroInteractions(mNetworkScoreManager); 126f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 127f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 128f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Test 129f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void testUpdate_emptyScanList() { 130f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ssids = {"\"test1\""}; 131f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] bssids = {"6c:f3:7f:ae:8c:f3"}; 132f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] freqs = {2470}; 133f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] caps = {"[WPA2-EAP-CCMP][ESS]"}; 134f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] levels = {mThresholdQualifiedRssi2G + 8}; 135f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] securities = {SECURITY_PSK}; 136f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 137f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ScanDetailsAndWifiConfigs scanDetailsAndConfigs = WifiNetworkSelectorTestUtil 138f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh .setupScanDetailsAndConfigStore( 139f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ssids, bssids, freqs, caps, levels, securities, mWifiConfigManager, mClock); 140f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 141f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mScoredNetworkEvaluator.update(new ArrayList<ScanDetail>()); 142f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 143f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh verifyZeroInteractions(mNetworkScoreManager); 144f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 145f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 146f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Test 147f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void testUpdate_allNetworksUnscored() { 148f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ssids = {"\"test1\"", "\"test2\""}; 149f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"}; 150f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] freqs = {2470, 2437}; 151f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] caps = {"[WPA2-EAP-CCMP][ESS]", "[ESS]"}; 152f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] securities = {SECURITY_PSK, SECURITY_NONE}; 153f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] levels = {mThresholdQualifiedRssi2G + 8, mThresholdQualifiedRssi2G + 10}; 154f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 155f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ScanDetailsAndWifiConfigs scanDetailsAndConfigs = WifiNetworkSelectorTestUtil 156f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh .setupScanDetailsAndConfigStore( 157f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ssids, bssids, freqs, caps, levels, securities, mWifiConfigManager, mClock); 158f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 159f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mScoredNetworkEvaluator.update(scanDetailsAndConfigs.getScanDetails()); 160f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 161f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh verify(mNetworkScoreManager).requestScores(mNetworkKeyArrayCaptor.capture()); 162f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh assertEquals(2, mNetworkKeyArrayCaptor.getValue().length); 163f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh NetworkKey expectedNetworkKey = NetworkKey.createFromScanResult( 164f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetailsAndConfigs.getScanDetails().get(0).getScanResult()); 165f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh assertEquals(expectedNetworkKey, mNetworkKeyArrayCaptor.getValue()[0]); 166f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh expectedNetworkKey = NetworkKey.createFromScanResult( 167f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetailsAndConfigs.getScanDetails().get(1).getScanResult()); 168f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh assertEquals(expectedNetworkKey, mNetworkKeyArrayCaptor.getValue()[1]); 169f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 170f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 171f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Test 172f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void testUpdate_oneScored_oneUnscored() { 173f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ssids = {"\"test1\"", "\"test2\""}; 174f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"}; 175f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] freqs = {2470, 2437}; 176f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] caps = {"[WPA2-EAP-CCMP][ESS]", "[ESS]"}; 177f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] securities = {SECURITY_PSK, SECURITY_NONE}; 178f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] levels = {mThresholdQualifiedRssi2G + 8, mThresholdQualifiedRssi2G + 10}; 179f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 180f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ScanDetailsAndWifiConfigs scanDetailsAndConfigs = WifiNetworkSelectorTestUtil 181f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh .setupScanDetailsAndConfigStore( 182f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ssids, bssids, freqs, caps, levels, securities, mWifiConfigManager, mClock); 183f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 184f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh List<ScanDetail> scoredScanDetails = scanDetailsAndConfigs.getScanDetails().subList(0, 1); 185f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh Integer[] scores = {120}; 186f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh boolean[] meteredHints = {true}; 187f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.configureScoreCache( 188f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mScoreCache, scoredScanDetails, scores, meteredHints); 189f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 190f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mScoredNetworkEvaluator.update(scanDetailsAndConfigs.getScanDetails()); 191f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 192f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh verify(mNetworkScoreManager).requestScores(mNetworkKeyArrayCaptor.capture()); 193f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 194f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh NetworkKey[] requestedScores = mNetworkKeyArrayCaptor.getValue(); 195f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh assertEquals(1, requestedScores.length); 196f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh NetworkKey expectedNetworkKey = NetworkKey.createFromScanResult( 197f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetailsAndConfigs.getScanDetails().get(1).getScanResult()); 198f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh assertEquals(expectedNetworkKey, requestedScores[0]); 199f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 200f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 201f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Test 202f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void testEvaluateNetworks_recommendationsDisabled() { 203f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh when(mFrameworkFacade.getIntegerSetting(mContext, 204f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh Settings.Global.NETWORK_RECOMMENDATIONS_ENABLED, 0)) 205f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh .thenReturn(0); 206f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 207f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mContentObserver.onChange(false /* unused */); 208f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 209f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mScoredNetworkEvaluator.evaluateNetworks(null, null, null, false, false, null); 210f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 211f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh verifyZeroInteractions(mWifiConfigManager, mNetworkScoreManager); 212f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 213f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 214f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh /** 215f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * When no saved networks available, choose the available ephemeral networks 216f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * if untrusted networks are allowed. 217f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh */ 218f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Test 219f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void testEvaluateNetworks_chooseEphemeralNetworkBecauseOfNoSavedNetwork() { 220f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ssids = {"\"test1\"", "\"test2\""}; 221f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"}; 222f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] freqs = {2470, 2437}; 223f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] caps = {"[WPA2-EAP-CCMP][ESS]", "[ESS]"}; 224f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] levels = {mThresholdQualifiedRssi2G + 8, mThresholdQualifiedRssi2G + 10}; 225f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh Integer[] scores = {null, 120}; 226f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh boolean[] meteredHints = {false, true}; 227f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 228f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh List<ScanDetail> scanDetails = WifiNetworkSelectorTestUtil.buildScanDetails( 229f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ssids, bssids, freqs, caps, levels, mClock); 230f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.configureScoreCache(mScoreCache, 231f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetails, scores, meteredHints); 232f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 233f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh // No saved networks. 23403c23584f072aef576736044c1fa12ddcb2d882bRoshan Pius when(mWifiConfigManager.getConfiguredNetworkForScanDetailAndCache(any(ScanDetail.class))) 235f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh .thenReturn(null); 236f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 237f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ScanResult scanResult = scanDetails.get(1).getScanResult(); 238f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration ephemeralNetworkConfig = WifiNetworkSelectorTestUtil 239f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh .setupEphemeralNetwork(mWifiConfigManager, 1, scanDetails.get(1), meteredHints[1]); 240f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 241f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh // Untrusted networks allowed. 242f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration candidate = mScoredNetworkEvaluator.evaluateNetworks(scanDetails, 243f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh null, null, false, true, null); 244f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 245f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfigurationTestUtil.assertConfigurationEqual(ephemeralNetworkConfig, candidate); 246f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.verifySelectedScanResult(mWifiConfigManager, 247f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanResult, candidate); 248f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh assertEquals(meteredHints[1], candidate.meteredHint); 249f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 250f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 251f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh /** 252f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * When no saved networks available, choose the highest scored ephemeral networks 253f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * if untrusted networks are allowed. 254f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh */ 255f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Test 256f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void testEvaluateNetworks_chooseHigherScoredEphemeralNetwork() { 257f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ssids = {"\"test1\"", "\"test2\""}; 258f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"}; 259f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] freqs = {2470, 2437}; 260f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] caps = {"[ESS]", "[ESS]"}; 261f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] levels = {mThresholdQualifiedRssi2G + 8, mThresholdQualifiedRssi2G + 8}; 262f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh Integer[] scores = {100, 120}; 263f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh boolean[] meteredHints = {true, true}; 264f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ScanResult[] scanResults = new ScanResult[2]; 265f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration[] ephemeralNetworkConfigs = new WifiConfiguration[2]; 266f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 267f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh List<ScanDetail> scanDetails = WifiNetworkSelectorTestUtil.buildScanDetails( 268f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ssids, bssids, freqs, caps, levels, mClock); 269f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.configureScoreCache(mScoreCache, 270f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetails, scores, meteredHints); 271f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 272f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh // No saved networks. 27303c23584f072aef576736044c1fa12ddcb2d882bRoshan Pius when(mWifiConfigManager.getConfiguredNetworkForScanDetailAndCache(any(ScanDetail.class))) 274f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh .thenReturn(null); 275f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 276f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh for (int i = 0; i < 2; i++) { 277f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanResults[i] = scanDetails.get(i).getScanResult(); 278f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ephemeralNetworkConfigs[i] = WifiNetworkSelectorTestUtil.setupEphemeralNetwork( 279f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mWifiConfigManager, i, scanDetails.get(i), meteredHints[i]); 280f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 281f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 282f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration candidate = mScoredNetworkEvaluator.evaluateNetworks(scanDetails, 283f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh null, null, false, true, null); 284f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 285f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfigurationTestUtil.assertConfigurationEqual(ephemeralNetworkConfigs[1], candidate); 286f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.verifySelectedScanResult(mWifiConfigManager, 287f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanResults[1], candidate); 288f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh assertEquals(meteredHints[1], candidate.meteredHint); 289f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 290f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 291f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh /** 292f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * Don't choose available ephemeral networks if no saved networks and untrusted networks 293f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * are not allowed. 294f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh */ 295f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Test 296f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void testEvaluateNetworks_noEphemeralNetworkWhenUntrustedNetworksNotAllowed() { 297f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ssids = {"\"test1\"", "\"test2\""}; 298f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"}; 299f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] freqs = {2470, 2437}; 300f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] caps = {"[WPA2-EAP-CCMP][ESS]", "[ESS]"}; 301f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] levels = {mThresholdQualifiedRssi2G + 8, mThresholdQualifiedRssi2G + 10}; 302f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh Integer[] scores = {null, 120}; 303f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh boolean[] meteredHints = {false, true}; 304f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 305f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh List<ScanDetail> scanDetails = WifiNetworkSelectorTestUtil.buildScanDetails( 306f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ssids, bssids, freqs, caps, levels, mClock); 307f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.configureScoreCache(mScoreCache, 308f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetails, scores, meteredHints); 309f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 310f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh // No saved networks. 31103c23584f072aef576736044c1fa12ddcb2d882bRoshan Pius when(mWifiConfigManager.getConfiguredNetworkForScanDetailAndCache(any(ScanDetail.class))) 312f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh .thenReturn(null); 313f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 314f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.setupEphemeralNetwork( 315f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mWifiConfigManager, 1, scanDetails.get(1), meteredHints[1]); 316f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 317f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh // Untrusted networks not allowed. 318f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration candidate = mScoredNetworkEvaluator.evaluateNetworks(scanDetails, 319f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh null, null, false, false, null); 320f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 321f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh assertEquals("Expect null configuration", null, candidate); 322f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 323f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 324f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh /** 325f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * Choose externally scored saved network. 326f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh */ 327f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Test 328f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void testEvaluateNetworks_chooseSavedNetworkWithExternalScore() { 329f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ssids = {"\"test1\""}; 330f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] bssids = {"6c:f3:7f:ae:8c:f3"}; 331f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] freqs = {5200}; 332f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] caps = {"[WPA2-EAP-CCMP][ESS]"}; 333f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] securities = {SECURITY_PSK}; 334f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] levels = {mThresholdQualifiedRssi5G + 8}; 335f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh Integer[] scores = {120}; 336f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh boolean[] meteredHints = {false}; 337f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 338f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.ScanDetailsAndWifiConfigs scanDetailsAndConfigs = 339f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.setupScanDetailsAndConfigStore(ssids, bssids, 340f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh freqs, caps, levels, securities, mWifiConfigManager, mClock); 341f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh List<ScanDetail> scanDetails = scanDetailsAndConfigs.getScanDetails(); 342f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration[] savedConfigs = scanDetailsAndConfigs.getWifiConfigs(); 343f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh savedConfigs[0].useExternalScores = true; 344f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 345f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.configureScoreCache(mScoreCache, 346f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetails, scores, meteredHints); 347f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 348f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration candidate = mScoredNetworkEvaluator.evaluateNetworks(scanDetails, 349f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh null, null, false, true, null); 350f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 351f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfigurationTestUtil.assertConfigurationEqual(savedConfigs[0], candidate); 352f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.verifySelectedScanResult(mWifiConfigManager, 353f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetails.get(0).getScanResult(), candidate); 354f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 355f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 356f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh /** 357f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * Choose externally scored saved network with higher score. 358f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh */ 359f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Test 360f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void testEvaluateNetworks_chooseSavedNetworkWithHigherExternalScore() { 361f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ssids = {"\"test1\"", "\"test2\""}; 362f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"}; 363f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] freqs = {2470, 2437}; 364f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] caps = {"[WPA2-EAP-CCMP][ESS]", "[WPA2-EAP-CCMP][ESS]"}; 365f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] securities = {SECURITY_PSK, SECURITY_PSK}; 366f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] levels = {mThresholdQualifiedRssi2G + 8, mThresholdQualifiedRssi2G + 8}; 367f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh Integer[] scores = {100, 120}; 368f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh boolean[] meteredHints = {false, false}; 369f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 370f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.ScanDetailsAndWifiConfigs scanDetailsAndConfigs = 371f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.setupScanDetailsAndConfigStore(ssids, bssids, 372f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh freqs, caps, levels, securities, mWifiConfigManager, mClock); 373f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh List<ScanDetail> scanDetails = scanDetailsAndConfigs.getScanDetails(); 374f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration[] savedConfigs = scanDetailsAndConfigs.getWifiConfigs(); 375f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh savedConfigs[0].useExternalScores = savedConfigs[1].useExternalScores = true; 376f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 377f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.configureScoreCache(mScoreCache, 378f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetails, scores, meteredHints); 379f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 380f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration candidate = mScoredNetworkEvaluator.evaluateNetworks(scanDetails, 381f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh null, null, false, true, null); 382f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 383f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfigurationTestUtil.assertConfigurationEqual(savedConfigs[1], candidate); 384f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.verifySelectedScanResult(mWifiConfigManager, 385f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetails.get(1).getScanResult(), candidate); 386f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 387f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 388f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh /** 389f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * Prefer externally scored saved network over untrusted network when they have 390f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * the same score. 391f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh */ 392f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Test 393f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void testEvaluateNetworks_chooseExternallyScoredOverUntrustedNetworksWithSameScore() { 394f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ssids = {"\"test1\"", "\"test2\""}; 395f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"}; 396f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] freqs = {2470, 2437}; 397f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] caps = {"[WPA2-EAP-CCMP][ESS]", "[ESS]"}; 398f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] securities = {SECURITY_PSK, SECURITY_NONE}; 399f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] levels = {mThresholdQualifiedRssi2G + 8, mThresholdQualifiedRssi2G + 8}; 400f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh Integer[] scores = {120, 120}; 401f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh boolean[] meteredHints = {false, true}; 402f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 403f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.ScanDetailsAndWifiConfigs scanDetailsAndConfigs = 404f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.setupScanDetailsAndConfigStore(ssids, bssids, 405f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh freqs, caps, levels, securities, mWifiConfigManager, mClock); 406f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh List<ScanDetail> scanDetails = scanDetailsAndConfigs.getScanDetails(); 407f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration[] savedConfigs = scanDetailsAndConfigs.getWifiConfigs(); 408f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh savedConfigs[0].useExternalScores = true; 409f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 410f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.configureScoreCache(mScoreCache, 411f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetails, scores, meteredHints); 412f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 413f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration candidate = mScoredNetworkEvaluator.evaluateNetworks(scanDetails, 414f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh null, null, false, true, null); 415f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 416f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfigurationTestUtil.assertConfigurationEqual(savedConfigs[0], candidate); 417f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.verifySelectedScanResult(mWifiConfigManager, 418f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetails.get(0).getScanResult(), candidate); 419f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 420f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 421f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh /** 422f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * Choose untrusted network when it has higher score than the externally scored 423f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * saved network. 424f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh */ 425f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Test 426f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void testEvaluateNetworks_chooseUntrustedWithHigherScoreThanExternallyScoredNetwork() { 427f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh // Saved network. 428f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] savedSsids = {"\"test1\""}; 429f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] savedBssids = {"6c:f3:7f:ae:8c:f3"}; 430f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] savedFreqs = {2470}; 431f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] savedCaps = {"[WPA2-EAP-CCMP][ESS]"}; 432f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] savedSecurities = {SECURITY_PSK}; 433f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] savedLevels = {mThresholdQualifiedRssi2G + 8}; 434f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh // Ephemeral network. 435f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ephemeralSsids = {"\"test2\""}; 436f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ephemeralBssids = {"6c:f3:7f:ae:8c:f4"}; 437f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] ephemeralFreqs = {2437}; 438f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ephemeralCaps = {"[ESS]"}; 439f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] ephemeralLevels = {mThresholdQualifiedRssi2G + 8}; 440f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh // Ephemeral network has higher score than the saved network. 441f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh Integer[] scores = {100, 120}; 442f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh boolean[] meteredHints = {false, true}; 443f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 444f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh // Set up the saved network. 445f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.ScanDetailsAndWifiConfigs scanDetailsAndConfigs = 446f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.setupScanDetailsAndConfigStore(savedSsids, 447f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh savedBssids, savedFreqs, savedCaps, savedLevels, savedSecurities, 448f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mWifiConfigManager, mClock); 449f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh List<ScanDetail> scanDetails = scanDetailsAndConfigs.getScanDetails(); 450f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration[] savedConfigs = scanDetailsAndConfigs.getWifiConfigs(); 451f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh savedConfigs[0].useExternalScores = true; 452f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 453f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh // Set up the ephemeral network. 454f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetails.addAll(WifiNetworkSelectorTestUtil.buildScanDetails( 455f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ephemeralSsids, ephemeralBssids, ephemeralFreqs, 456f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ephemeralCaps, ephemeralLevels, mClock)); 457f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ScanResult ephemeralScanResult = scanDetails.get(1).getScanResult(); 458f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration ephemeralNetworkConfig = WifiNetworkSelectorTestUtil 459f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh .setupEphemeralNetwork(mWifiConfigManager, 1, scanDetails.get(1), 460f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh meteredHints[1]); 461f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 462f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh // Set up score cache for both the saved network and the ephemeral network. 463f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.configureScoreCache(mScoreCache, 464f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetails, scores, meteredHints); 465f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 466f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration candidate = mScoredNetworkEvaluator.evaluateNetworks(scanDetails, 467f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh null, null, false, true, null); 468f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 469f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfigurationTestUtil.assertConfigurationEqual(ephemeralNetworkConfig, candidate); 470f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.verifySelectedScanResult(mWifiConfigManager, 471f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ephemeralScanResult, candidate); 472f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 473f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 474f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh /** 475f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * Prefer externally scored saved network over untrusted network when they have 476f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * the same score. 477f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh */ 478f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Test 479f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void testEvaluateNetworks_nullScoredNetworks() { 480f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ssids = {"\"test1\"", "\"test2\""}; 481f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"}; 482f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] freqs = {2470, 2437}; 483f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] caps = {"[WPA2-EAP-CCMP][ESS]", "[ESS]"}; 484f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] securities = {SECURITY_PSK, SECURITY_NONE}; 485f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] levels = {mThresholdQualifiedRssi2G + 8, mThresholdQualifiedRssi2G + 8}; 486f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh Integer[] scores = {null, null}; 487f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh boolean[] meteredHints = {false, true}; 488f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 489f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.ScanDetailsAndWifiConfigs scanDetailsAndConfigs = 490f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.setupScanDetailsAndConfigStore(ssids, bssids, 491f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh freqs, caps, levels, securities, mWifiConfigManager, mClock); 492f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh List<ScanDetail> scanDetails = scanDetailsAndConfigs.getScanDetails(); 493f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration[] savedConfigs = scanDetailsAndConfigs.getWifiConfigs(); 494f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh savedConfigs[0].useExternalScores = true; 495f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 496f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.configureScoreCache(mScoreCache, 497f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetails, scores, meteredHints); 498f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 499f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration candidate = mScoredNetworkEvaluator.evaluateNetworks(scanDetails, 500f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh null, null, false, true, null); 501f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 502f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh assertEquals("Expect null configuration", null, candidate); 503f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 504f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 505f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh /** 506f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * Between two ephemeral networks with the same RSSI, choose 507f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * the currently connected one. 508f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh */ 509f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Test 510f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void testEvaluateNetworks_chooseActiveEphemeralNetwork() { 511f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ssids = {"\"test1\"", "\"test2\""}; 512f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"}; 513f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] freqs = {2470, 2437}; 514f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] caps = {"[ESS]", "[ESS]"}; 515f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] levels = {mThresholdQualifiedRssi2G + 28, mThresholdQualifiedRssi2G + 28}; 516f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh boolean[] meteredHints = {true, true}; 517f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ScanResult[] scanResults = new ScanResult[2]; 518f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration[] ephemeralNetworkConfigs = new WifiConfiguration[2]; 519f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 520f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh List<ScanDetail> scanDetails = WifiNetworkSelectorTestUtil 521f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh .buildScanDetails(ssids, bssids, freqs, caps, levels, mClock); 522f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 523f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.configureScoreCache( 524f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mScoreCache, scanDetails, null, meteredHints); 525f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 526f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh // No saved networks. 52703c23584f072aef576736044c1fa12ddcb2d882bRoshan Pius when(mWifiConfigManager.getConfiguredNetworkForScanDetailAndCache(any(ScanDetail.class))) 528f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh .thenReturn(null); 529f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 530f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh for (int i = 0; i < 2; i++) { 531f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanResults[i] = scanDetails.get(i).getScanResult(); 532f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh ephemeralNetworkConfigs[i] = WifiNetworkSelectorTestUtil.setupEphemeralNetwork( 533f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh mWifiConfigManager, i, scanDetails.get(i), meteredHints[i]); 534f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 535f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 536f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration candidate = mScoredNetworkEvaluator.evaluateNetworks( 537f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetails, ephemeralNetworkConfigs[1], 538f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh bssids[1], true, true, null); 539f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 540f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfigurationTestUtil.assertConfigurationEqual(ephemeralNetworkConfigs[1], candidate); 541f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.verifySelectedScanResult(mWifiConfigManager, 542f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanResults[1], candidate); 543f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh assertEquals(meteredHints[1], candidate.meteredHint); 544f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 545f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 546f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh /** 547f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * Between two externally scored saved networks with the same RSSI, choose 548f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh * the currently connected one. 549f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh */ 550f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh @Test 551f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh public void testEvaluateNetworks_chooseActiveSavedNetwork() { 552f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] ssids = {"\"test1\"", "\"test2\""}; 553f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] bssids = {"6c:f3:7f:ae:8c:f3", "6c:f3:7f:ae:8c:f4"}; 554f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] freqs = {2470, 2437}; 555f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh String[] caps = {"[WPA2-EAP-CCMP][ESS]", "[WPA2-EAP-CCMP][ESS]"}; 556f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] securities = {SECURITY_PSK, SECURITY_PSK}; 557f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh int[] levels = {mThresholdQualifiedRssi2G + 28, mThresholdQualifiedRssi2G + 28}; 558f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh boolean[] meteredHints = {false, false}; 559f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 560f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.ScanDetailsAndWifiConfigs scanDetailsAndConfigs = 561f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.setupScanDetailsAndConfigStore(ssids, bssids, 562f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh freqs, caps, levels, securities, mWifiConfigManager, mClock); 563f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh List<ScanDetail> scanDetails = scanDetailsAndConfigs.getScanDetails(); 564f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration[] savedConfigs = scanDetailsAndConfigs.getWifiConfigs(); 565f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh savedConfigs[0].useExternalScores = savedConfigs[1].useExternalScores = true; 566f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 567f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.configureScoreCache(mScoreCache, 568f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetails, null, meteredHints); 569f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 570f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfiguration candidate = mScoredNetworkEvaluator.evaluateNetworks(scanDetails, 571f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh savedConfigs[1], bssids[1], true, true, null); 572f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh 573f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiConfigurationTestUtil.assertConfigurationEqual(savedConfigs[1], candidate); 574f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh WifiNetworkSelectorTestUtil.verifySelectedScanResult(mWifiConfigManager, 575f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh scanDetails.get(1).getScanResult(), candidate); 576f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh } 577f14e4b8fdd949b4ba0feb63dded4d9b233859300Amin Shaikh} 578