WakeupControllerTest.java revision aa872c243eb5b27beaefe1360b69a46ceb016b56
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; 22115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport static org.mockito.ArgumentMatchers.eq; 23115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport static org.mockito.Mockito.never; 24a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbachimport static org.mockito.Mockito.verify; 25a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport static org.mockito.Mockito.when; 26a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 27a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport android.content.Context; 28115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport android.net.wifi.ScanResult; 29115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport android.net.wifi.WifiConfiguration; 30115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport android.net.wifi.WifiScanner; 31a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport android.os.test.TestLooper; 32a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport android.provider.Settings; 33a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 34115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport com.android.server.wifi.util.ScanResultUtil; 35115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 36a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport org.junit.Before; 37a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport org.junit.Test; 38b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbachimport org.mockito.ArgumentCaptor; 39115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport org.mockito.InOrder; 40a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport org.mockito.Mock; 41115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport org.mockito.Mockito; 42a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport org.mockito.MockitoAnnotations; 43aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbachimport org.xmlpull.v1.XmlPullParserException; 44a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 4504263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbachimport java.io.ByteArrayOutputStream; 46aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbachimport java.io.IOException; 4704263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbachimport java.io.PrintWriter; 48115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport java.util.Arrays; 49115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport java.util.Collection; 50115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport java.util.Collections; 5104263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach 52a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach/** 53a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Unit tests for {@link WakeupController}. 54a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach */ 55a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachpublic class WakeupControllerTest { 56a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 57a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach @Mock private Context mContext; 58a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach @Mock private WakeupLock mWakeupLock; 59b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach @Mock private WakeupEvaluator mWakeupEvaluator; 609d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach @Mock private WakeupOnboarding mWakeupOnboarding; 61a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach @Mock private WifiConfigStore mWifiConfigStore; 62115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Mock private WifiInjector mWifiInjector; 63115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Mock private WifiScanner mWifiScanner; 64115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Mock private WifiConfigManager mWifiConfigManager; 65a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach @Mock private FrameworkFacade mFrameworkFacade; 6632152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach @Mock private WifiSettingsStore mWifiSettingsStore; 67a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 68a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach private TestLooper mLooper; 69a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach private WakeupController mWakeupController; 70aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach private WakeupConfigStoreData mWakeupConfigStoreData; 71aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach private WifiScanner.ScanData[] mTestScanDatas; 72aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach private ScanResult mTestScanResult; 73a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 74a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach /** Initialize objects before each test run. */ 75a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach @Before 76a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach public void setUp() { 77a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach MockitoAnnotations.initMocks(this); 78115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 79115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach when(mWifiInjector.getWifiScanner()).thenReturn(mWifiScanner); 8032152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach when(mWifiInjector.getWifiSettingsStore()).thenReturn(mWifiSettingsStore); 8132152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 82a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach mLooper = new TestLooper(); 83aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 84aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // scanlistener input 85aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mTestScanResult = new ScanResult(); 86aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mTestScanResult.SSID = "open ssid 1"; 87aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mTestScanResult.capabilities = ""; 88aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ScanResult[] scanResults = new ScanResult[1]; 89aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanResults[0] = mTestScanResult; 90aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mTestScanDatas = new WifiScanner.ScanData[1]; 91aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mTestScanDatas[0] = new WifiScanner.ScanData(0 /* id */, 0 /* flags */, 92aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 0 /* bucketsScanned */, true /* allChannelsScanned */, scanResults); 93a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach } 94a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 95aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach /** Initializes the wakeupcontroller in the given {@code enabled} state. */ 96115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach private void initializeWakeupController(boolean enabled) { 97aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach initializeWakeupController(enabled, true /* isRead */); 98aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } 99aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 100aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach private void initializeWakeupController(boolean enabled, boolean isRead) { 101115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach int settingsValue = enabled ? 1 : 0; 102115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach when(mFrameworkFacade.getIntegerSetting(mContext, 103115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach Settings.Global.WIFI_WAKEUP_ENABLED, 0)).thenReturn(settingsValue); 1049d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach when(mWakeupOnboarding.isOnboarded()).thenReturn(true); 105115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController = new WakeupController(mContext, 106115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mLooper.getLooper(), 107115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupLock, 108b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach mWakeupEvaluator, 1099d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach mWakeupOnboarding, 110115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWifiConfigManager, 111115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWifiConfigStore, 112115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWifiInjector, 113115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mFrameworkFacade); 114aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 115aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ArgumentCaptor<WakeupConfigStoreData> captor = 116aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ArgumentCaptor.forClass(WakeupConfigStoreData.class); 117aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWifiConfigStore).registerStoreData(captor.capture()); 118aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mWakeupConfigStoreData = captor.getValue(); 119aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach if (isRead) { 120aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach readUserStore(); 121aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } 122aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } 123aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 124aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach private void readUserStore() { 125aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach try { 126aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mWakeupConfigStoreData.deserializeData(null, 0, false); 127aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } catch (XmlPullParserException | IOException e) { 128aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // unreachable 129aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } 130115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 131115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 132115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach private ScanResult createOpenScanResult(String ssid) { 133115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach ScanResult scanResult = new ScanResult(); 134115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach scanResult.SSID = ssid; 135115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach scanResult.capabilities = ""; 136115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach return scanResult; 137a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach } 138a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach 13932152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach private void verifyDoesNotEnableWifi() { 14032152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach verify(mWifiSettingsStore, never()).handleWifiToggled(true /* wifiEnabled */); 14132152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach } 14232152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 143a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach /** 144a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Verify WakeupController is enabled when the settings toggle is true. 145a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach */ 146a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach @Test 147a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach public void verifyEnabledWhenToggledOn() { 148115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 149a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 150a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach assertTrue(mWakeupController.isEnabled()); 151a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach } 152a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 153a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach /** 154a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Verify WakeupController is disabled when the settings toggle is false. 155a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach */ 156a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach @Test 157a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach public void verifyDisabledWhenToggledOff() { 158115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(false /* enabled */); 159a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach 160a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach assertFalse(mWakeupController.isEnabled()); 161a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach } 162a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach 163a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach /** 164a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach * Verify WakeupController registers its store data with the WifiConfigStore on construction. 165a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach */ 166a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach @Test 167a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach public void registersWakeupConfigStoreData() { 168115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 169a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach verify(mWifiConfigStore).registerStoreData(any(WakeupConfigStoreData.class)); 170a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach } 17104263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach 17204263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach /** 17304263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach * Verify that dump calls also dump the state of the WakeupLock. 17404263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach */ 17504263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach @Test 17604263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach public void dumpIncludesWakeupLock() { 177115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 17804263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach ByteArrayOutputStream stream = new ByteArrayOutputStream(); 17904263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach PrintWriter writer = new PrintWriter(stream); 18004263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach mWakeupController.dump(null, writer, null); 18104263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach 18204263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach verify(mWakeupLock).dump(null, writer, null); 18304263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach } 184115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 185115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 186115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * Verify that start initializes the wakeup lock. 187115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 188115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 189115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach public void startInitializesWakeupLock() { 190115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 191115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 192115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach verify(mWakeupLock).initialize(any()); 193115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 194115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 195115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 196115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * Verify that start does not initialize the wakeup lock when feature is disabled. 197115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 198115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 199115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach public void startDoesNotInitializeWakeupLockWhenDisabled() { 200115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(false /* enabled */); 201115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 202115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach verify(mWakeupLock, never()).initialize(any()); 203115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 204115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 205115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 206115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * Verify that start does not re-initialize the wakeup lock if the controller is already active. 207115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 208115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 209115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach public void startDoesNotInitializeWakeupLockIfAlreadyActive() { 210115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 211115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach InOrder inOrder = Mockito.inOrder(mWakeupLock); 212115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 213115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 214115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach inOrder.verify(mWakeupLock).initialize(any()); 215115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 216115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.stop(); 217115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 218115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach inOrder.verify(mWakeupLock, never()).initialize(any()); 219115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 220115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 221115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 222115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * Verify that start registers the scan listener on the wifi scanner. 223115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 224115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 225115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach public void startRegistersScanListener() { 226115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 227115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 228115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach verify(mWifiScanner).registerScanListener(any()); 229115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 230115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 231115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 232115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * Verify that stop deregisters the scan listener from the wifi scanner. 233115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 234115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 235115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach public void stopDeresgistersScanListener() { 236115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 237115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 238115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.stop(); 239115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach verify(mWifiScanner).deregisterScanListener(any()); 240115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 241115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 242115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 243115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * Verify that reset sets active to false. 244115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * 245115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * <p>This is accomplished by initiating another call to start and verifying that the wakeup 246115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * lock is re-initialized. 247115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 248115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 249115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach public void resetSetsActiveToFalse() { 250115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 251115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach InOrder inOrder = Mockito.inOrder(mWakeupLock); 252115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 253115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 254115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach inOrder.verify(mWakeupLock).initialize(any()); 255115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 256115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.stop(); 257115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.reset(); 258115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 259115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach inOrder.verify(mWakeupLock).initialize(any()); 260115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 261115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 262115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach /** 263115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * Verify that the wakeup lock is initialized with the intersection of ScanResults and saved 264115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach * networks. 265115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach */ 266115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach @Test 267115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach public void startInitializesWakeupLockWithSavedScanResults() { 268115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach String ssid1 = "ssid 1"; 269115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach String ssid2 = "ssid 2"; 270115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach String quotedSsid = ScanResultUtil.createQuotedSSID(ssid1); 271115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 272115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach // saved configs 273115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(quotedSsid); 274115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach openNetwork.getNetworkSelectionStatus().setHasEverConnected(true); 275115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork(); 276115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach wepNetwork.getNetworkSelectionStatus().setHasEverConnected(true); 277115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach when(mWifiConfigManager.getSavedNetworks()) 278115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach .thenReturn(Arrays.asList(openNetwork, wepNetwork)); 279115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 280115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach // scan results from most recent scan 281115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach ScanResult savedScanResult = createOpenScanResult(ssid1); 282115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach ScanResult unsavedScanResult = createOpenScanResult(ssid2); 283115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach when(mWifiScanner.getSingleScanResults()) 284115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach .thenReturn(Arrays.asList(savedScanResult, unsavedScanResult)); 285115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 286115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach // intersection of most recent scan + saved configs 287115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach Collection<ScanResultMatchInfo> expectedMatchInfos = 288115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach Collections.singleton(ScanResultMatchInfo.fromScanResult(savedScanResult)); 289115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach 290115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 291115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach mWakeupController.start(); 292115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach verify(mWakeupLock).initialize(eq(expectedMatchInfos)); 293115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach } 294b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 295b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach /** 296b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach * Verify that onResults updates the WakeupLock. 297b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach */ 298b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach @Test 299b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach public void onResultsUpdatesWakeupLock() { 300b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach initializeWakeupController(true /* enabled */); 301b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach mWakeupController.start(); 302b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 303b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 304b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 305b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 306b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 307b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 308b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 309aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // incoming scan results 310aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 311b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 312aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ScanResultMatchInfo expectedMatchInfo = ScanResultMatchInfo.fromScanResult(mTestScanResult); 313b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach verify(mWakeupLock).update(eq(Collections.singleton(expectedMatchInfo))); 314b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach } 315b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 316b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach /** 317b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach * Verify that the controller searches for viable networks during onResults when WakeupLock is 318b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach * empty. 319b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach */ 320b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach @Test 321b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach public void onResultsSearchesForViableNetworkWhenWakeupLockIsEmpty() { 322b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach // empty wakeup lock 323b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach when(mWakeupLock.isEmpty()).thenReturn(true); 32432152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach // do not find viable network 32532152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach when(mWakeupEvaluator.findViableNetwork(any(), any())).thenReturn(null); 32632152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 327b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach initializeWakeupController(true /* enabled */); 328b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach mWakeupController.start(); 329b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 330b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 331b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 332b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 333b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 334b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 335b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach 336aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // incoming scan results 337aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 33832152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 339aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupEvaluator).findViableNetwork(any(), any()); 34032152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach verifyDoesNotEnableWifi(); 341b6b9c915c200d71da56026d8c3aeec9c243a933aEric Schwarzenbach } 3429d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach 3439d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach /** 3449d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach * Verify that the controller only updates the WakeupLock if the user is onboarded. 3459d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach */ 3469d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach @Test 3479d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach public void onResultsDoesNotUpdateIfNotOnboarded() { 3489d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach initializeWakeupController(true /* enabled */); 3499d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach when(mWakeupOnboarding.isOnboarded()).thenReturn(false); 3509d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach mWakeupController.start(); 3519d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach 3529d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 3539d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 3549d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach 3559d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 3569d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 3579d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach 358aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // incoming scan results 359aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 3609d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach 3619d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach verify(mWakeupLock, never()).isEmpty(); 3629d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach verify(mWakeupLock, never()).update(any()); 36332152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 36432152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach verifyDoesNotEnableWifi(); 36532152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach } 36632152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 36732152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach /** 36832152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach * Verify that the controller enables wifi and notifies user when all criteria are met. 36932152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach */ 37032152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach @Test 37132152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach public void onResultsEnablesWifi() { 37232152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach // empty wakeup lock 37332152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach when(mWakeupLock.isEmpty()).thenReturn(true); 37432152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach // find viable network 375aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach when(mWakeupEvaluator.findViableNetwork(any(), any())).thenReturn(mTestScanResult); 37632152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 37732152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach initializeWakeupController(true /* enabled */); 37832152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach mWakeupController.start(); 37932152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 38032152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 38132152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 38232152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 38332152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 38432152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 38532152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 386aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // incoming scan results 387aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 38832152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach 389aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupEvaluator).findViableNetwork(any(), any()); 39032152cdeeefb4d8cc9a1137232892e5360ae1f5bEric Schwarzenbach verify(mWifiSettingsStore).handleWifiToggled(true /* wifiEnabled */); 3919d60c0ff94757e8862f167f6de54789fe2e1bab2Eric Schwarzenbach } 392aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 393aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach /** 394aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach * Verify that the controller will not do any work if the user store has not been read. 395aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach */ 396aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach @Test 397aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach public void controllerDoesNoWorkIfUserStoreIsNotRead() { 398aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach initializeWakeupController(true /* enabled */, false /* isRead */); 399aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach mWakeupController.start(); 400aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 401aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor = 402aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach ArgumentCaptor.forClass(WifiScanner.ScanListener.class); 403aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 404aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture()); 405aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue(); 406aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 407aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach // incoming scan results 408aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach scanListener.onResults(mTestScanDatas); 409aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach 410aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupLock, never()).initialize(any()); 411aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupLock, never()).update(any()); 412aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupLock, never()).isEmpty(); 413aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupOnboarding, never()).maybeShowNotification(); 414aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach verify(mWakeupEvaluator, never()).findViableNetwork(any(), any()); 415aa872c243eb5b27beaefe1360b69a46ceb016b56Eric Schwarzenbach } 416a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach} 417