WakeupControllerTest.java revision 115c8923f9cfee8052c03eb5c92359d4156a86b2
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;
38115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport org.mockito.InOrder;
39a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport org.mockito.Mock;
40115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport org.mockito.Mockito;
41a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachimport org.mockito.MockitoAnnotations;
42a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
4304263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbachimport java.io.ByteArrayOutputStream;
4404263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbachimport java.io.PrintWriter;
45115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport java.util.Arrays;
46115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport java.util.Collection;
47115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbachimport java.util.Collections;
4804263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach
49a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach/**
50a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach * Unit tests for {@link WakeupController}.
51a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach */
52a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbachpublic class WakeupControllerTest {
53a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
54a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    @Mock private Context mContext;
55a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach    @Mock private WakeupLock mWakeupLock;
56a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach    @Mock private WifiConfigStore mWifiConfigStore;
57115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    @Mock private WifiInjector mWifiInjector;
58115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    @Mock private WifiScanner mWifiScanner;
59115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    @Mock private WifiConfigManager mWifiConfigManager;
60a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    @Mock private FrameworkFacade mFrameworkFacade;
61a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
62a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    private TestLooper mLooper;
63a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    private WakeupController mWakeupController;
64a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
65a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    /** Initialize objects before each test run. */
66a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    @Before
67a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    public void setUp() {
68a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach        MockitoAnnotations.initMocks(this);
69115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
70115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        when(mWifiInjector.getWifiScanner()).thenReturn(mWifiScanner);
71a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach        mLooper = new TestLooper();
72a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    }
73a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
74115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    /** Initializes the wakeupcontroller in the given `enabled` state. */
75115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    private void initializeWakeupController(boolean enabled) {
76115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        int settingsValue = enabled ? 1 : 0;
77115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        when(mFrameworkFacade.getIntegerSetting(mContext,
78115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach                Settings.Global.WIFI_WAKEUP_ENABLED, 0)).thenReturn(settingsValue);
79115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        mWakeupController = new WakeupController(mContext,
80115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach                mLooper.getLooper(),
81115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach                mWakeupLock,
82115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach                mWifiConfigManager,
83115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach                mWifiConfigStore,
84115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach                mWifiInjector,
85115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach                mFrameworkFacade);
86115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    }
87115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
88115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    private ScanResult createOpenScanResult(String ssid) {
89115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        ScanResult scanResult = new ScanResult();
90115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        scanResult.SSID = ssid;
91115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        scanResult.capabilities = "";
92115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        return scanResult;
93a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach    }
94a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach
95a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    /**
96a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach     * Verify WakeupController is enabled when the settings toggle is true.
97a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach     */
98a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    @Test
99a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    public void verifyEnabledWhenToggledOn() {
100115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        initializeWakeupController(true /* enabled */);
101a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
102a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach        assertTrue(mWakeupController.isEnabled());
103a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    }
104a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
105a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    /**
106a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach     * Verify WakeupController is disabled when the settings toggle is false.
107a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach     */
108a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    @Test
109a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    public void verifyDisabledWhenToggledOff() {
110115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        initializeWakeupController(false /* enabled */);
111a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach
112a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach        assertFalse(mWakeupController.isEnabled());
113a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach    }
114a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach
115a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach    /**
116a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach     * Verify WakeupController registers its store data with the WifiConfigStore on construction.
117a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach     */
118a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach    @Test
119a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach    public void registersWakeupConfigStoreData() {
120115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        initializeWakeupController(true /* enabled */);
121a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach        verify(mWifiConfigStore).registerStoreData(any(WakeupConfigStoreData.class));
122a57806da53f2eadcf12475892ae3a0e0e58d98cdEric Schwarzenbach    }
12304263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach
12404263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach    /**
12504263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach     * Verify that dump calls also dump the state of the WakeupLock.
12604263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach     */
12704263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach    @Test
12804263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach    public void dumpIncludesWakeupLock() {
129115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        initializeWakeupController(true /* enabled */);
13004263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach        ByteArrayOutputStream stream = new ByteArrayOutputStream();
13104263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach        PrintWriter writer = new PrintWriter(stream);
13204263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach        mWakeupController.dump(null, writer, null);
13304263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach
13404263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach        verify(mWakeupLock).dump(null, writer, null);
13504263765dc4bb2a74722d69db56c5b42e7fb1bc9Eric Schwarzenbach    }
136115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
137115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    /**
138115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     * Verify that start initializes the wakeup lock.
139115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     */
140115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    @Test
141115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    public void startInitializesWakeupLock() {
142115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        initializeWakeupController(true /* enabled */);
143115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        mWakeupController.start();
144115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        verify(mWakeupLock).initialize(any());
145115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    }
146115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
147115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    /**
148115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     * Verify that start does not initialize the wakeup lock when feature is disabled.
149115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     */
150115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    @Test
151115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    public void startDoesNotInitializeWakeupLockWhenDisabled() {
152115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        initializeWakeupController(false /* enabled */);
153115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        mWakeupController.start();
154115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        verify(mWakeupLock, never()).initialize(any());
155115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    }
156115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
157115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    /**
158115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     * Verify that start does not re-initialize the wakeup lock if the controller is already active.
159115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     */
160115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    @Test
161115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    public void startDoesNotInitializeWakeupLockIfAlreadyActive() {
162115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        initializeWakeupController(true /* enabled */);
163115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        InOrder inOrder = Mockito.inOrder(mWakeupLock);
164115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
165115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        mWakeupController.start();
166115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        inOrder.verify(mWakeupLock).initialize(any());
167115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
168115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        mWakeupController.stop();
169115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        mWakeupController.start();
170115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        inOrder.verify(mWakeupLock, never()).initialize(any());
171115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    }
172115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
173115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    /**
174115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     * Verify that start registers the scan listener on the wifi scanner.
175115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     */
176115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    @Test
177115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    public void startRegistersScanListener() {
178115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        initializeWakeupController(true /* enabled */);
179115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        mWakeupController.start();
180115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        verify(mWifiScanner).registerScanListener(any());
181115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    }
182115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
183115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    /**
184115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     * Verify that stop deregisters the scan listener from the wifi scanner.
185115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     */
186115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    @Test
187115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    public void stopDeresgistersScanListener() {
188115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        initializeWakeupController(true /* enabled */);
189115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        mWakeupController.start();
190115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        mWakeupController.stop();
191115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        verify(mWifiScanner).deregisterScanListener(any());
192115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    }
193115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
194115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    /**
195115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     * Verify that reset sets active to false.
196115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     *
197115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     * <p>This is accomplished by initiating another call to start and verifying that the wakeup
198115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     * lock is re-initialized.
199115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     */
200115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    @Test
201115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    public void resetSetsActiveToFalse() {
202115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        initializeWakeupController(true /* enabled */);
203115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        InOrder inOrder = Mockito.inOrder(mWakeupLock);
204115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
205115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        mWakeupController.start();
206115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        inOrder.verify(mWakeupLock).initialize(any());
207115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
208115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        mWakeupController.stop();
209115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        mWakeupController.reset();
210115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        mWakeupController.start();
211115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        inOrder.verify(mWakeupLock).initialize(any());
212115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    }
213115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
214115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    /**
215115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     * Verify that the wakeup lock is initialized with the intersection of ScanResults and saved
216115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     * networks.
217115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach     */
218115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    @Test
219115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    public void startInitializesWakeupLockWithSavedScanResults() {
220115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        String ssid1 = "ssid 1";
221115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        String ssid2 = "ssid 2";
222115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        String quotedSsid = ScanResultUtil.createQuotedSSID(ssid1);
223115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
224115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        // saved configs
225115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(quotedSsid);
226115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        openNetwork.getNetworkSelectionStatus().setHasEverConnected(true);
227115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork();
228115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        wepNetwork.getNetworkSelectionStatus().setHasEverConnected(true);
229115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        when(mWifiConfigManager.getSavedNetworks())
230115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach                .thenReturn(Arrays.asList(openNetwork, wepNetwork));
231115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
232115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        // scan results from most recent scan
233115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        ScanResult savedScanResult = createOpenScanResult(ssid1);
234115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        ScanResult unsavedScanResult = createOpenScanResult(ssid2);
235115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        when(mWifiScanner.getSingleScanResults())
236115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach                .thenReturn(Arrays.asList(savedScanResult, unsavedScanResult));
237115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
238115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        // intersection of most recent scan + saved configs
239115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        Collection<ScanResultMatchInfo> expectedMatchInfos =
240115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach                Collections.singleton(ScanResultMatchInfo.fromScanResult(savedScanResult));
241115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach
242115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        initializeWakeupController(true /* enabled */);
243115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        mWakeupController.start();
244115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach        verify(mWakeupLock).initialize(eq(expectedMatchInfos));
245115c8923f9cfee8052c03eb5c92359d4156a86b2Eric Schwarzenbach    }
246a55e8d795bba5aa66f692cffa8fa28e3b4174546Eric Schwarzenbach}
247