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