WakeupControllerTest.java revision 4f894bd0f4b378972d10f64390ab710da54d5cc6
1a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach/* 2a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Copyright 2017 The Android Open Source Project 3a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * 4a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Licensed under the Apache License, Version 2.0 (the "License"); 5a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * you may not use this file except in compliance with the License. 6a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * You may obtain a copy of the License at 7a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * 8a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * http://www.apache.org/licenses/LICENSE-2.0 9a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * 10a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Unless required by applicable law or agreed to in writing, software 11a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * distributed under the License is distributed on an "AS IS" BASIS, 12a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * See the License for the specific language governing permissions and 14a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * limitations under the License. 15a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach */ 16a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 17a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachpackage com.android.server.wifi; 18a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 19a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport static org.junit.Assert.assertFalse; 20a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport static org.junit.Assert.assertTrue; 21a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbachimport static org.mockito.ArgumentMatchers.any; 2212d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbachimport static org.mockito.ArgumentMatchers.anyBoolean; 2312d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbachimport static org.mockito.ArgumentMatchers.anyInt; 24115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport static org.mockito.ArgumentMatchers.eq; 25115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport static org.mockito.Mockito.never; 26a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbachimport static org.mockito.Mockito.verify; 27a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport static org.mockito.Mockito.when; 28a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 29a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport android.content.Context; 30115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport android.net.wifi.ScanResult; 31115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport android.net.wifi.WifiConfiguration; 32115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport android.net.wifi.WifiScanner; 33a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport android.os.test.TestLooper; 34a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport android.provider.Settings; 35a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 36115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport com.android.server.wifi.util.ScanResultUtil; 37115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 38a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport org.junit.Before; 39a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport org.junit.Test; 40b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbachimport org.mockito.ArgumentCaptor; 41115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport org.mockito.InOrder; 42a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport org.mockito.Mock; 43115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport org.mockito.Mockito; 44a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport org.mockito.MockitoAnnotations; 45aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbachimport org.xmlpull.v1.XmlPullParserException; 46a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 4704263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbachimport java.io.ByteArrayOutputStream; 48aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbachimport java.io.IOException; 4904263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbachimport java.io.PrintWriter; 50115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport java.util.Arrays; 51115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport java.util.Collections; 524f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbachimport java.util.Set; 5304263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach 54a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach/** 55a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Unit tests for {@link WakeupController}. 56a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach */ 57a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachpublic class WakeupControllerTest { 58a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 594f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach private static final int DFS_CHANNEL = 5540; 604f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 61a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach @Mock private Context mContext; 62a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach @Mock private WakeupLock mWakeupLock; 63b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach @Mock private WakeupEvaluator mWakeupEvaluator; 649d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach @Mock private WakeupOnboarding mWakeupOnboarding; 65a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach @Mock private WifiConfigStore mWifiConfigStore; 66115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Mock private WifiInjector mWifiInjector; 67115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Mock private WifiScanner mWifiScanner; 68115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Mock private WifiConfigManager mWifiConfigManager; 69a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach @Mock private FrameworkFacade mFrameworkFacade; 7032152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach @Mock private WifiSettingsStore mWifiSettingsStore; 7112d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach @Mock private WifiWakeMetrics mWifiWakeMetrics; 7212d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach @Mock private WifiController mWifiController; 734f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach @Mock private WifiNative mWifiNative; 74a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 75a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach private TestLooper mLooper; 76a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach private WakeupController mWakeupController; 77aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach private WakeupConfigStoreData mWakeupConfigStoreData; 78aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach private WifiScanner.ScanData[] mTestScanDatas; 79aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach private ScanResult mTestScanResult; 80a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 81a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach /** Initialize objects before each test run. */ 82a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach @Before 83a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach public void setUp() { 84a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach MockitoAnnotations.initMocks(this); 85115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 86115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach when(mWifiInjector.getWifiScanner()).thenReturn(mWifiScanner); 8732152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach when(mWifiInjector.getWifiSettingsStore()).thenReturn(mWifiSettingsStore); 8812d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach when(mWifiInjector.getWifiController()).thenReturn(mWifiController); 894f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach when(mWifiInjector.getWifiNative()).thenReturn(mWifiNative); 904f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach when(mWifiNative.getChannelsForBand(WifiScanner.WIFI_BAND_5_GHZ_DFS_ONLY)) 914f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach .thenReturn(new int[]{DFS_CHANNEL}); 924f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 9312d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach when(mWifiSettingsStore.handleWifiToggled(anyBoolean())).thenReturn(true); 9432152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 95a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach mLooper = new TestLooper(); 96aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 97aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // scanlistener input 98aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mTestScanResult = new ScanResult(); 99aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mTestScanResult.SSID = "open ssid 1"; 100aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mTestScanResult.capabilities = ""; 1014f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach mTestScanResult.frequency = 2412; 102aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ScanResult[] scanResults = new ScanResult[1]; 103aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanResults[0] = mTestScanResult; 104aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mTestScanDatas = new WifiScanner.ScanData[1]; 105aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mTestScanDatas[0] = new WifiScanner.ScanData(0 /* id */, 0 /* flags */, 106aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 0 /* bucketsScanned */, true /* allChannelsScanned */, scanResults); 107a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach } 108a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 109aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach /** Initializes the wakeupcontroller in the given {@code enabled} state. */ 110115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach private void initializeWakeupController(boolean enabled) { 111aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach initializeWakeupController(enabled, true /* isRead */); 112aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } 113aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 114aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach private void initializeWakeupController(boolean enabled, boolean isRead) { 115115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach int settingsValue = enabled ? 1 : 0; 116115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach when(mFrameworkFacade.getIntegerSetting(mContext, 117115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach Settings.Global.WIFI_WAKEUP_ENABLED, 0)).thenReturn(settingsValue); 1189d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach when(mWakeupOnboarding.isOnboarded()).thenReturn(true); 119115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController = new WakeupController(mContext, 120115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mLooper.getLooper(), 121115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupLock, 122b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach mWakeupEvaluator, 1239d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach mWakeupOnboarding, 124115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWifiConfigManager, 125115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWifiConfigStore, 12612d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach mWifiWakeMetrics, 127115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWifiInjector, 128115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mFrameworkFacade); 129aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 130aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ArgumentCaptor<WakeupConfigStoreData> captor = 131aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ArgumentCaptor.forClass(WakeupConfigStoreData.class); 132aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWifiConfigStore).registerStoreData(captor.capture()); 133aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mWakeupConfigStoreData = captor.getValue(); 134aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach if (isRead) { 135aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach readUserStore(); 136aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } 137aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } 138aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 139aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach private void readUserStore() { 140aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach try { 141aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mWakeupConfigStoreData.deserializeData(null, 0, false); 142aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } catch (XmlPullParserException | IOException e) { 143aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // unreachable 144aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } 145115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 146115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 147115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach private ScanResult createOpenScanResult(String ssid) { 148115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach ScanResult scanResult = new ScanResult(); 149115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach scanResult.SSID = ssid; 150115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach scanResult.capabilities = ""; 151115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach return scanResult; 152a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach } 153a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach 15432152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach private void verifyDoesNotEnableWifi() { 15532152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach verify(mWifiSettingsStore, never()).handleWifiToggled(true /* wifiEnabled */); 15632152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach } 15732152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 158a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach /** 159a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Verify WakeupController is enabled when the settings toggle is true. 160a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach */ 161a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach @Test 162a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach public void verifyEnabledWhenToggledOn() { 163115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 164a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 165a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach assertTrue(mWakeupController.isEnabled()); 166a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach } 167a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 168a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach /** 169a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Verify WakeupController is disabled when the settings toggle is false. 170a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach */ 171a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach @Test 172a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach public void verifyDisabledWhenToggledOff() { 173115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(false /* enabled */); 174a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 175a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach assertFalse(mWakeupController.isEnabled()); 176a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach } 177a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach 178a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach /** 179a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach * Verify WakeupController registers its store data with the WifiConfigStore on construction. 180a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach */ 181a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach @Test 182a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach public void registersWakeupConfigStoreData() { 183115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 184a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach verify(mWifiConfigStore).registerStoreData(any(WakeupConfigStoreData.class)); 185a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach } 18604263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach 18704263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach /** 18804263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach * Verify that dump calls also dump the state of the WakeupLock. 18904263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach */ 19004263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach @Test 19104263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach public void dumpIncludesWakeupLock() { 192115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 19304263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach ByteArrayOutputStream stream = new ByteArrayOutputStream(); 19404263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach PrintWriter writer = new PrintWriter(stream); 19504263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach mWakeupController.dump(null, writer, null); 19604263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach 19704263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach verify(mWakeupLock).dump(null, writer, null); 19804263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach } 199115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 200115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 2014f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach * Verify that start sets the wakeup lock. 202115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 203115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 2044f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach public void startSetsWakeupLock() { 205115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 206115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 2074f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWakeupLock).setLock(any()); 20812d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach verify(mWifiWakeMetrics).recordStartEvent(anyInt()); 209115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 210115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 211115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 2124f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach * Verify that start does not set the wakeup lock when feature is disabled. 213115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 214115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 2154f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach public void startDoesNotSetWakeupLockWhenDisabled() { 216115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(false /* enabled */); 217115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 2184f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWakeupLock, never()).setLock(any()); 21912d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach verify(mWifiWakeMetrics, never()).recordStartEvent(anyInt()); 220115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 221115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 222115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 2234f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach * Verify that start does not set the wakeup lock if the controller is already active. 224115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 225115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 2264f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach public void startDoesNotSetWakeupLockIfAlreadyActive() { 227115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 22812d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach InOrder lockInOrder = Mockito.inOrder(mWakeupLock); 22912d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach InOrder metricsInOrder = Mockito.inOrder(mWifiWakeMetrics); 230115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 231115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 2324f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach lockInOrder.verify(mWakeupLock).setLock(any()); 23312d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach metricsInOrder.verify(mWifiWakeMetrics).recordStartEvent(anyInt()); 234115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 235115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.stop(); 236115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 2374f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach lockInOrder.verify(mWakeupLock, never()).setLock(any()); 23812d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach metricsInOrder.verify(mWifiWakeMetrics, never()).recordStartEvent(anyInt()); 239115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 240115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 241115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 242115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * Verify that start registers the scan listener on the wifi scanner. 243115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 244115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 245115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach public void startRegistersScanListener() { 246115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 247115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 248115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach verify(mWifiScanner).registerScanListener(any()); 249115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 250115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 251115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 252115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * Verify that stop deregisters the scan listener from the wifi scanner. 253115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 254115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 255115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach public void stopDeresgistersScanListener() { 256115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 257115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 258115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.stop(); 259115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach verify(mWifiScanner).deregisterScanListener(any()); 260115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 261115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 262115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 263115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * Verify that reset sets active to false. 264115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * 265115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * <p>This is accomplished by initiating another call to start and verifying that the wakeup 2664f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach * lock is re-set. 267115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 268115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 269115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach public void resetSetsActiveToFalse() { 270115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 27112d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach InOrder lockInOrder = Mockito.inOrder(mWakeupLock); 27212d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach InOrder metricsInOrder = Mockito.inOrder(mWifiWakeMetrics); 273115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 274115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 2754f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach lockInOrder.verify(mWakeupLock).setLock(any()); 27612d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach metricsInOrder.verify(mWifiWakeMetrics).recordStartEvent(anyInt()); 277115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 278115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.stop(); 279115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.reset(); 28012d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach metricsInOrder.verify(mWifiWakeMetrics).recordResetEvent(0 /* numScans */); 28112d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach 282115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 2834f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach lockInOrder.verify(mWakeupLock).setLock(any()); 28412d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach metricsInOrder.verify(mWifiWakeMetrics).recordStartEvent(anyInt()); 285115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 286115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 287115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 288115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * Verify that the wakeup lock is initialized with the intersection of ScanResults and saved 289115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * networks. 290115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 291115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 292115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach public void startInitializesWakeupLockWithSavedScanResults() { 293115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach String ssid1 = "ssid 1"; 294115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach String ssid2 = "ssid 2"; 295115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach String quotedSsid = ScanResultUtil.createQuotedSSID(ssid1); 296115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 297115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach // saved configs 298115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(quotedSsid); 299115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach openNetwork.getNetworkSelectionStatus().setHasEverConnected(true); 300115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 301115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach wepNetwork.getNetworkSelectionStatus().setHasEverConnected(true); 302115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach when(mWifiConfigManager.getSavedNetworks()) 303115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach .thenReturn(Arrays.asList(openNetwork, wepNetwork)); 304115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 305115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach // scan results from most recent scan 306115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach ScanResult savedScanResult = createOpenScanResult(ssid1); 3074f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach savedScanResult.frequency = 2412; 308115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach ScanResult unsavedScanResult = createOpenScanResult(ssid2); 3094f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach savedScanResult.frequency = 2412; 3104f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 311115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach when(mWifiScanner.getSingleScanResults()) 312115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach .thenReturn(Arrays.asList(savedScanResult, unsavedScanResult)); 313115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 314115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach // intersection of most recent scan + saved configs 3154f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach Set<ScanResultMatchInfo> expectedMatchInfos = 316115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach Collections.singleton(ScanResultMatchInfo.fromScanResult(savedScanResult)); 317115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 318115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 319115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 3204f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWakeupLock).setLock(eq(expectedMatchInfos)); 3214f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWifiWakeMetrics).recordStartEvent(expectedMatchInfos.size()); 3224f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach } 3234f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 3244f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach /** 3254f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach * Verify that start filters out DFS channels. 3264f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach */ 3274f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach @Test 3284f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach public void startFiltersOutDfsScanResults() { 3294f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach String ssid = "test_ssid"; 3304f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach String quotedSsid = ScanResultUtil.createQuotedSSID(ssid); 3314f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 3324f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach // saved config 3334f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(quotedSsid); 3344f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach openNetwork.getNetworkSelectionStatus().setHasEverConnected(true); 3354f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach when(mWifiConfigManager.getSavedNetworks()) 3364f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach .thenReturn(Collections.singletonList(openNetwork)); 3374f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 3384f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach // scan result from most recent scan 3394f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach ScanResult scanResult = createOpenScanResult(ssid); 3404f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach scanResult.frequency = DFS_CHANNEL; 3414f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 3424f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach when(mWifiScanner.getSingleScanResults()).thenReturn(Collections.singletonList(scanResult)); 3434f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 3444f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach // intersection of most recent scan + saved configs 3454f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach Set<ScanResultMatchInfo> expectedMatchInfos = Collections.emptySet(); 3464f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 3474f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach initializeWakeupController(true /* enabled */); 3484f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach mWakeupController.start(); 3494f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWakeupLock).setLock(eq(expectedMatchInfos)); 35012d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach verify(mWifiWakeMetrics).recordStartEvent(expectedMatchInfos.size()); 351115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 352b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 353b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach /** 354b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach * Verify that onResults updates the WakeupLock. 355b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach */ 356b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach @Test 357b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach public void onResultsUpdatesWakeupLock() { 358b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach initializeWakeupController(true /* enabled */); 359b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach mWakeupController.start(); 360b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 361b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 362b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 363b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 364b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 365b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 366b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 367aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // incoming scan results 368aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 369b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 370aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ScanResultMatchInfo expectedMatchInfo = ScanResultMatchInfo.fromScanResult(mTestScanResult); 371b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach verify(mWakeupLock).update(eq(Collections.singleton(expectedMatchInfo))); 372b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach } 373b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 374b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach /** 3754f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach * Verify that onResults filters out DFS channels. 37612d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach */ 37712d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach @Test 3784f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach public void onResultsFiltersOutDfsScanResults() { 37912d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach initializeWakeupController(true /* enabled */); 38012d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach mWakeupController.start(); 38112d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach 38212d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 38312d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 38412d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach 38512d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 38612d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 38712d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach 38812d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach // incoming scan results 3894f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach mTestScanResult.frequency = DFS_CHANNEL; 39012d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 39112d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach 3924f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWakeupLock).update(eq(Collections.emptySet())); 39312d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach } 39412d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach 39512d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach /** 396b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach * Verify that the controller searches for viable networks during onResults when WakeupLock is 3974f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach * unlocked. 398b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach */ 399b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach @Test 4004f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach public void onResultsSearchesForViableNetworkWhenWakeupLockIsUnlocked() { 4014f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach // unlock wakeup lock 4024f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach when(mWakeupLock.isUnlocked()).thenReturn(true); 40332152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach // do not find viable network 40432152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach when(mWakeupEvaluator.findViableNetwork(any(), any())).thenReturn(null); 40532152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 406b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach initializeWakeupController(true /* enabled */); 407b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach mWakeupController.start(); 408b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 409b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 410b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 411b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 412b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 413b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 414b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 415aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // incoming scan results 416aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 41732152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 418aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupEvaluator).findViableNetwork(any(), any()); 41932152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach verifyDoesNotEnableWifi(); 420b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach } 4219d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach 4229d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach /** 4239d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach * Verify that the controller only updates the WakeupLock if the user is onboarded. 4249d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach */ 4259d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach @Test 4269d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach public void onResultsDoesNotUpdateIfNotOnboarded() { 4279d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 4289d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach when(mWakeupOnboarding.isOnboarded()).thenReturn(false); 4299d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach mWakeupController.start(); 4309d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach 4319d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 4329d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 4339d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach 4349d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 4359d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 4369d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach 437aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // incoming scan results 438aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 4399d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach 4404f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWakeupLock, never()).isUnlocked(); 4419d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach verify(mWakeupLock, never()).update(any()); 44232152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 44332152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach verifyDoesNotEnableWifi(); 44432152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach } 44532152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 44632152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach /** 44732152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach * Verify that the controller enables wifi and notifies user when all criteria are met. 44832152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach */ 44932152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach @Test 45032152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach public void onResultsEnablesWifi() { 4514f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach // unlock wakeup lock 4524f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach when(mWakeupLock.isUnlocked()).thenReturn(true); 45332152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach // find viable network 454aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach when(mWakeupEvaluator.findViableNetwork(any(), any())).thenReturn(mTestScanResult); 45532152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 45632152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach initializeWakeupController(true /* enabled */); 45732152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach mWakeupController.start(); 45832152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 45932152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 46032152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 46132152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 46232152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 46332152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 46432152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 465aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // incoming scan results 466aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 46732152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 468aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupEvaluator).findViableNetwork(any(), any()); 46932152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach verify(mWifiSettingsStore).handleWifiToggled(true /* wifiEnabled */); 47012d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach verify(mWifiWakeMetrics).recordWakeupEvent(1 /* numScans */); 4719d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach } 472aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 473aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach /** 474aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach * Verify that the controller will not do any work if the user store has not been read. 475aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach */ 476aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach @Test 477aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach public void controllerDoesNoWorkIfUserStoreIsNotRead() { 478aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach initializeWakeupController(true /* enabled */, false /* isRead */); 479aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mWakeupController.start(); 480aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 481aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 482aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 483aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 484aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 485aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 486aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 487aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // incoming scan results 488aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 489aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 4904f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWakeupLock, never()).setLock(any()); 491aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupLock, never()).update(any()); 4924f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWakeupLock, never()).isUnlocked(); 493aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupOnboarding, never()).maybeShowNotification(); 494aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupEvaluator, never()).findViableNetwork(any(), any()); 495aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } 496a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach} 497