WakeupControllerTest.java revision 5aad8ece7e38a80db917d49b5245f6b8c6dca273
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; 305aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbachimport android.database.ContentObserver; 31115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport android.net.wifi.ScanResult; 32115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport android.net.wifi.WifiConfiguration; 33115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport android.net.wifi.WifiScanner; 34a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport android.os.test.TestLooper; 35a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport android.provider.Settings; 36a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 37115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport com.android.server.wifi.util.ScanResultUtil; 38115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 39a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport org.junit.Before; 40a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport org.junit.Test; 41b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbachimport org.mockito.ArgumentCaptor; 42115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport org.mockito.InOrder; 43a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport org.mockito.Mock; 44115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport org.mockito.Mockito; 45a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport org.mockito.MockitoAnnotations; 46aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbachimport org.xmlpull.v1.XmlPullParserException; 47a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 4804263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbachimport java.io.ByteArrayOutputStream; 49aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbachimport java.io.IOException; 5004263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbachimport java.io.PrintWriter; 51115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport java.util.Arrays; 52115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport java.util.Collections; 534f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbachimport java.util.Set; 5404263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach 55a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach/** 56a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Unit tests for {@link WakeupController}. 57a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach */ 58a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachpublic class WakeupControllerTest { 59a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 604f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach private static final int DFS_CHANNEL = 5540; 614f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 62a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach @Mock private Context mContext; 63a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach @Mock private WakeupLock mWakeupLock; 64b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach @Mock private WakeupEvaluator mWakeupEvaluator; 659d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach @Mock private WakeupOnboarding mWakeupOnboarding; 66a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach @Mock private WifiConfigStore mWifiConfigStore; 67115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Mock private WifiInjector mWifiInjector; 68115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Mock private WifiScanner mWifiScanner; 69115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Mock private WifiConfigManager mWifiConfigManager; 70a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach @Mock private FrameworkFacade mFrameworkFacade; 7132152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach @Mock private WifiSettingsStore mWifiSettingsStore; 7212d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach @Mock private WifiWakeMetrics mWifiWakeMetrics; 7312d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach @Mock private WifiController mWifiController; 744f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach @Mock private WifiNative mWifiNative; 75a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 76a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach private TestLooper mLooper; 77a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach private WakeupController mWakeupController; 78aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach private WakeupConfigStoreData mWakeupConfigStoreData; 79aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach private WifiScanner.ScanData[] mTestScanDatas; 80aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach private ScanResult mTestScanResult; 81a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 82a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach /** Initialize objects before each test run. */ 83a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach @Before 84a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach public void setUp() { 85a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach MockitoAnnotations.initMocks(this); 86115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 87115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach when(mWifiInjector.getWifiScanner()).thenReturn(mWifiScanner); 8832152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach when(mWifiInjector.getWifiSettingsStore()).thenReturn(mWifiSettingsStore); 8912d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach when(mWifiInjector.getWifiController()).thenReturn(mWifiController); 904f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach when(mWifiInjector.getWifiNative()).thenReturn(mWifiNative); 914f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach when(mWifiNative.getChannelsForBand(WifiScanner.WIFI_BAND_5_GHZ_DFS_ONLY)) 924f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach .thenReturn(new int[]{DFS_CHANNEL}); 934f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 9412d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach when(mWifiSettingsStore.handleWifiToggled(anyBoolean())).thenReturn(true); 9532152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 96a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach mLooper = new TestLooper(); 97aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 98aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // scanlistener input 99aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mTestScanResult = new ScanResult(); 100aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mTestScanResult.SSID = "open ssid 1"; 101aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mTestScanResult.capabilities = ""; 1024f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach mTestScanResult.frequency = 2412; 103aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ScanResult[] scanResults = new ScanResult[1]; 104aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanResults[0] = mTestScanResult; 105aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mTestScanDatas = new WifiScanner.ScanData[1]; 106aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mTestScanDatas[0] = new WifiScanner.ScanData(0 /* id */, 0 /* flags */, 107aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 0 /* bucketsScanned */, true /* allChannelsScanned */, scanResults); 108a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach } 109a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 110aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach /** Initializes the wakeupcontroller in the given {@code enabled} state. */ 111115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach private void initializeWakeupController(boolean enabled) { 112aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach initializeWakeupController(enabled, true /* isRead */); 113aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } 114aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 115aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach private void initializeWakeupController(boolean enabled, boolean isRead) { 116115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach int settingsValue = enabled ? 1 : 0; 117115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach when(mFrameworkFacade.getIntegerSetting(mContext, 118115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach Settings.Global.WIFI_WAKEUP_ENABLED, 0)).thenReturn(settingsValue); 1199d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach when(mWakeupOnboarding.isOnboarded()).thenReturn(true); 120115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController = new WakeupController(mContext, 121115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mLooper.getLooper(), 122115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupLock, 123b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach mWakeupEvaluator, 1249d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach mWakeupOnboarding, 125115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWifiConfigManager, 126115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWifiConfigStore, 12712d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach mWifiWakeMetrics, 128115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWifiInjector, 129115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mFrameworkFacade); 130aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 131aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ArgumentCaptor<WakeupConfigStoreData> captor = 132aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ArgumentCaptor.forClass(WakeupConfigStoreData.class); 133aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWifiConfigStore).registerStoreData(captor.capture()); 134aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mWakeupConfigStoreData = captor.getValue(); 135aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach if (isRead) { 136aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach readUserStore(); 137aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } 138aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } 139aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 140aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach private void readUserStore() { 141aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach try { 142aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mWakeupConfigStoreData.deserializeData(null, 0, false); 143aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } catch (XmlPullParserException | IOException e) { 144aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // unreachable 145aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } 146115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 147115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 148115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach private ScanResult createOpenScanResult(String ssid) { 149115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach ScanResult scanResult = new ScanResult(); 150115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach scanResult.SSID = ssid; 151115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach scanResult.capabilities = ""; 152115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach return scanResult; 153a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach } 154a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach 15532152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach private void verifyDoesNotEnableWifi() { 15632152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach verify(mWifiSettingsStore, never()).handleWifiToggled(true /* wifiEnabled */); 15732152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach } 15832152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 159a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach /** 160a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Verify WakeupController is enabled when the settings toggle is true. 161a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach */ 162a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach @Test 163a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach public void verifyEnabledWhenToggledOn() { 164115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 165a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 166a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach assertTrue(mWakeupController.isEnabled()); 167a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach } 168a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 169a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach /** 170a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Verify WakeupController is disabled when the settings toggle is false. 171a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach */ 172a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach @Test 173a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach public void verifyDisabledWhenToggledOff() { 174115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(false /* enabled */); 175a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 176a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach assertFalse(mWakeupController.isEnabled()); 177a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach } 178a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach 179a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach /** 180a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach * Verify WakeupController registers its store data with the WifiConfigStore on construction. 181a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach */ 182a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach @Test 183a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach public void registersWakeupConfigStoreData() { 184115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 185a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach verify(mWifiConfigStore).registerStoreData(any(WakeupConfigStoreData.class)); 186a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach } 18704263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach 18804263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach /** 18904263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach * Verify that dump calls also dump the state of the WakeupLock. 19004263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach */ 19104263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach @Test 19204263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach public void dumpIncludesWakeupLock() { 193115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 19404263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach ByteArrayOutputStream stream = new ByteArrayOutputStream(); 19504263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach PrintWriter writer = new PrintWriter(stream); 19604263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach mWakeupController.dump(null, writer, null); 19704263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach 19804263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach verify(mWakeupLock).dump(null, writer, null); 19904263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach } 200115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 201115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 2024f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach * Verify that start sets the wakeup lock. 203115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 204115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 2054f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach public void startSetsWakeupLock() { 206115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 207115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 2084f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWakeupLock).setLock(any()); 20912d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach verify(mWifiWakeMetrics).recordStartEvent(anyInt()); 210115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 211115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 212115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 2134f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach * Verify that start does not set the wakeup lock when feature is disabled. 214115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 215115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 2164f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach public void startDoesNotSetWakeupLockWhenDisabled() { 217115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(false /* enabled */); 218115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 2194f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWakeupLock, never()).setLock(any()); 22012d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach verify(mWifiWakeMetrics, never()).recordStartEvent(anyInt()); 221115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 222115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 223115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 2244f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach * Verify that start does not set the wakeup lock if the controller is already active. 225115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 226115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 2274f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach public void startDoesNotSetWakeupLockIfAlreadyActive() { 228115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 22912d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach InOrder lockInOrder = Mockito.inOrder(mWakeupLock); 23012d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach InOrder metricsInOrder = Mockito.inOrder(mWifiWakeMetrics); 231115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 232115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 2334f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach lockInOrder.verify(mWakeupLock).setLock(any()); 23412d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach metricsInOrder.verify(mWifiWakeMetrics).recordStartEvent(anyInt()); 235115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 236115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.stop(); 237115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 2384f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach lockInOrder.verify(mWakeupLock, never()).setLock(any()); 23912d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach metricsInOrder.verify(mWifiWakeMetrics, never()).recordStartEvent(anyInt()); 240115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 241115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 242115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 243115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * Verify that start registers the scan listener on the wifi scanner. 244115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 245115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 246115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach public void startRegistersScanListener() { 247115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 248115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 249115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach verify(mWifiScanner).registerScanListener(any()); 250115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 251115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 252115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 253115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * Verify that stop deregisters the scan listener from the wifi scanner. 254115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 255115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 256115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach public void stopDeresgistersScanListener() { 257115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 258115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 259115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.stop(); 260115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach verify(mWifiScanner).deregisterScanListener(any()); 261115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 262115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 263115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 264115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * Verify that reset sets active to false. 265115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * 266115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * <p>This is accomplished by initiating another call to start and verifying that the wakeup 2674f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach * lock is re-set. 268115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 269115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 270115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach public void resetSetsActiveToFalse() { 271115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 27212d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach InOrder lockInOrder = Mockito.inOrder(mWakeupLock); 27312d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach InOrder metricsInOrder = Mockito.inOrder(mWifiWakeMetrics); 274115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 275115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 2764f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach lockInOrder.verify(mWakeupLock).setLock(any()); 27712d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach metricsInOrder.verify(mWifiWakeMetrics).recordStartEvent(anyInt()); 278115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 279115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.stop(); 280115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.reset(); 28112d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach metricsInOrder.verify(mWifiWakeMetrics).recordResetEvent(0 /* numScans */); 28212d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach 283115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 2844f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach lockInOrder.verify(mWakeupLock).setLock(any()); 28512d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach metricsInOrder.verify(mWifiWakeMetrics).recordStartEvent(anyInt()); 286115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 287115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 288115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 289115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * Verify that the wakeup lock is initialized with the intersection of ScanResults and saved 290115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * networks. 291115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 292115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 293115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach public void startInitializesWakeupLockWithSavedScanResults() { 294115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach String ssid1 = "ssid 1"; 295115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach String ssid2 = "ssid 2"; 296115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach String quotedSsid = ScanResultUtil.createQuotedSSID(ssid1); 297115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 298115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach // saved configs 299115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(quotedSsid); 300115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach openNetwork.getNetworkSelectionStatus().setHasEverConnected(true); 301115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 302115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach wepNetwork.getNetworkSelectionStatus().setHasEverConnected(true); 303115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach when(mWifiConfigManager.getSavedNetworks()) 304115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach .thenReturn(Arrays.asList(openNetwork, wepNetwork)); 305115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 306115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach // scan results from most recent scan 307115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach ScanResult savedScanResult = createOpenScanResult(ssid1); 3084f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach savedScanResult.frequency = 2412; 309115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach ScanResult unsavedScanResult = createOpenScanResult(ssid2); 3104f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach savedScanResult.frequency = 2412; 3114f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 312115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach when(mWifiScanner.getSingleScanResults()) 313115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach .thenReturn(Arrays.asList(savedScanResult, unsavedScanResult)); 314115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 315115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach // intersection of most recent scan + saved configs 3164f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach Set<ScanResultMatchInfo> expectedMatchInfos = 317115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach Collections.singleton(ScanResultMatchInfo.fromScanResult(savedScanResult)); 318115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 319115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 320115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 3214f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWakeupLock).setLock(eq(expectedMatchInfos)); 3224f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWifiWakeMetrics).recordStartEvent(expectedMatchInfos.size()); 3234f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach } 3244f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 3254f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach /** 3264f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach * Verify that start filters out DFS channels. 3274f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach */ 3284f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach @Test 3294f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach public void startFiltersOutDfsScanResults() { 3304f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach String ssid = "test_ssid"; 3314f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach String quotedSsid = ScanResultUtil.createQuotedSSID(ssid); 3324f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 3334f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach // saved config 3344f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(quotedSsid); 3354f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach openNetwork.getNetworkSelectionStatus().setHasEverConnected(true); 3364f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach when(mWifiConfigManager.getSavedNetworks()) 3374f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach .thenReturn(Collections.singletonList(openNetwork)); 3384f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 3394f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach // scan result from most recent scan 3404f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach ScanResult scanResult = createOpenScanResult(ssid); 3414f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach scanResult.frequency = DFS_CHANNEL; 3424f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 3434f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach when(mWifiScanner.getSingleScanResults()).thenReturn(Collections.singletonList(scanResult)); 3444f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 3454f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach // intersection of most recent scan + saved configs 3464f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach Set<ScanResultMatchInfo> expectedMatchInfos = Collections.emptySet(); 3474f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach 3484f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach initializeWakeupController(true /* enabled */); 3494f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach mWakeupController.start(); 3504f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWakeupLock).setLock(eq(expectedMatchInfos)); 35112d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach verify(mWifiWakeMetrics).recordStartEvent(expectedMatchInfos.size()); 352115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 353b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 354b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach /** 355b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach * Verify that onResults updates the WakeupLock. 356b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach */ 357b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach @Test 358b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach public void onResultsUpdatesWakeupLock() { 359b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach initializeWakeupController(true /* enabled */); 360b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach mWakeupController.start(); 361b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 362b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 363b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 364b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 365b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 366b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 367b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 368aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // incoming scan results 369aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 370b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 371aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ScanResultMatchInfo expectedMatchInfo = ScanResultMatchInfo.fromScanResult(mTestScanResult); 372b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach verify(mWakeupLock).update(eq(Collections.singleton(expectedMatchInfo))); 373b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach } 374b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 375b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach /** 3764f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach * Verify that onResults filters out DFS channels. 37712d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach */ 37812d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach @Test 3794f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach public void onResultsFiltersOutDfsScanResults() { 38012d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach initializeWakeupController(true /* enabled */); 38112d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach mWakeupController.start(); 38212d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach 38312d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 38412d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 38512d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach 38612d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 38712d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 38812d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach 38912d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach // incoming scan results 3904f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach mTestScanResult.frequency = DFS_CHANNEL; 39112d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 39212d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach 3934f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWakeupLock).update(eq(Collections.emptySet())); 39412d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach } 39512d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach 39612d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach /** 397b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach * Verify that the controller searches for viable networks during onResults when WakeupLock is 3984f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach * unlocked. 399b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach */ 400b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach @Test 4014f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach public void onResultsSearchesForViableNetworkWhenWakeupLockIsUnlocked() { 4024f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach // unlock wakeup lock 4034f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach when(mWakeupLock.isUnlocked()).thenReturn(true); 40432152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach // do not find viable network 40532152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach when(mWakeupEvaluator.findViableNetwork(any(), any())).thenReturn(null); 40632152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 407b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach initializeWakeupController(true /* enabled */); 408b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach mWakeupController.start(); 409b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 410b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 411b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 412b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 413b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 414b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 415b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 416aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // incoming scan results 417aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 41832152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 419aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupEvaluator).findViableNetwork(any(), any()); 42032152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach verifyDoesNotEnableWifi(); 421b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach } 4229d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach 4239d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach /** 4245aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach * Verify that the controller updates the WakeupLock even if the user is not onboarded. 4259d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach */ 4269d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach @Test 4275aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach public void onResultsUpdatesIfNotOnboarded() { 4289d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 4299d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach when(mWakeupOnboarding.isOnboarded()).thenReturn(false); 4305aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach when(mWakeupLock.isUnlocked()).thenReturn(false); 4319d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach mWakeupController.start(); 4329d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach 4339d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 4349d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 4359d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach 4369d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 4379d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 4389d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach 439aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // incoming scan results 440aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 4419d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach 4425aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach verify(mWakeupLock).update(any()); 4435aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach verify(mWakeupLock).isUnlocked(); 44432152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach verifyDoesNotEnableWifi(); 44532152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach } 44632152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 44732152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach /** 44832152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach * Verify that the controller enables wifi and notifies user when all criteria are met. 44932152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach */ 45032152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach @Test 45132152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach public void onResultsEnablesWifi() { 4524f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach // unlock wakeup lock 4534f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach when(mWakeupLock.isUnlocked()).thenReturn(true); 45432152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach // find viable network 455aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach when(mWakeupEvaluator.findViableNetwork(any(), any())).thenReturn(mTestScanResult); 45632152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 45732152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach initializeWakeupController(true /* enabled */); 45832152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach mWakeupController.start(); 45932152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 46032152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 46132152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 46232152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 46332152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 46432152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 46532152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 466aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // incoming scan results 467aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 46832152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 469aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupEvaluator).findViableNetwork(any(), any()); 47032152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach verify(mWifiSettingsStore).handleWifiToggled(true /* wifiEnabled */); 47112d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach verify(mWifiWakeMetrics).recordWakeupEvent(1 /* numScans */); 4729d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach } 473aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 474aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach /** 475aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach * Verify that the controller will not do any work if the user store has not been read. 476aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach */ 477aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach @Test 478aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach public void controllerDoesNoWorkIfUserStoreIsNotRead() { 479aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach initializeWakeupController(true /* enabled */, false /* isRead */); 480aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mWakeupController.start(); 481aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 482aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 483aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 484aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 485aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 486aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 487aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 488aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // incoming scan results 489aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 490aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 4914f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWakeupLock, never()).setLock(any()); 492aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupLock, never()).update(any()); 4934f894bd0f4b378972d10f64390ab710da54d5cc6Eric Schwarzenbach verify(mWakeupLock, never()).isUnlocked(); 494aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupOnboarding, never()).maybeShowNotification(); 495aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupEvaluator, never()).findViableNetwork(any(), any()); 496aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } 4975aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach 4985aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach @Test 4995aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach public void userIsNotOnboardedByInitialization() { 5005aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach initializeWakeupController(true /* enabled */); 5015aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach verify(mWakeupOnboarding, never()).setOnboarded(); 5025aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach } 5035aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach 5045aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach @Test 5055aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach public void userIsOnboardedBySettingChange() { 5065aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach initializeWakeupController(true /* enabled */); 5075aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach ArgumentCaptor<ContentObserver> argumentCaptor = 5085aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach ArgumentCaptor.forClass(ContentObserver.class); 5095aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach verify(mFrameworkFacade).registerContentObserver(any(), any(), eq(true), 5105aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach argumentCaptor.capture()); 5115aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach ContentObserver contentObserver = argumentCaptor.getValue(); 5125aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach contentObserver.onChange(false /* selfChange */); 5135aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach verify(mWakeupOnboarding).setOnboarded(); 5145aad8ece7e38a80db917d49b5245f6b8c6dca273Eric Schwarzenbach } 515a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach} 516