13c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao/*
23c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao * Copyright (C) 2016 The Android Open Source Project
33c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao *
43c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao * Licensed under the Apache License, Version 2.0 (the "License");
53c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao * you may not use this file except in compliance with the License.
63c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao * You may obtain a copy of the License at
73c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao *
83c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao *      http://www.apache.org/licenses/LICENSE-2.0
93c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao *
103c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao * Unless required by applicable law or agreed to in writing, software
113c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao * distributed under the License is distributed on an "AS IS" BASIS,
123c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao * See the License for the specific language governing permissions and
143c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao * limitations under the License.
153c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao */
163c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao
173c0eb618a6398926893508f9d05fa39a99cf4894Sohani Raopackage com.android.server.wifi;
183c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao
193c0eb618a6398926893508f9d05fa39a99cf4894Sohani Raoimport com.android.internal.app.IBatteryStats;
203c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao
2130a29085c09339ff9faf12f105da6f80ffb77389Sohani Raoimport static org.mockito.Mockito.any;
223c0eb618a6398926893508f9d05fa39a99cf4894Sohani Raoimport static org.mockito.Mockito.anyInt;
233c0eb618a6398926893508f9d05fa39a99cf4894Sohani Raoimport static org.mockito.Mockito.times;
243c0eb618a6398926893508f9d05fa39a99cf4894Sohani Raoimport static org.mockito.Mockito.verify;
253c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao
267f2a1e30dd5d14320ffc7b185ac25fdb79fe52b0Etan Cohenimport android.support.test.filters.SmallTest;
273c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao
283c0eb618a6398926893508f9d05fa39a99cf4894Sohani Raoimport org.junit.Before;
293c0eb618a6398926893508f9d05fa39a99cf4894Sohani Raoimport org.junit.Test;
303c0eb618a6398926893508f9d05fa39a99cf4894Sohani Raoimport org.mockito.Mock;
313c0eb618a6398926893508f9d05fa39a99cf4894Sohani Raoimport org.mockito.MockitoAnnotations;
323c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao
333c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao/*
343c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao * Unit tests for {@link com.android.server.wifi.WifiStateTracker}.
353c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao */
363c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao@SmallTest
373c0eb618a6398926893508f9d05fa39a99cf4894Sohani Raopublic class WifiStateTrackerTest {
383c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao
393c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao    private static final String TAG = "WifiStateTrackerTest";
403c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao    @Mock IBatteryStats mBatteryStats;
413c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao    private WifiStateTracker mWifiStateTracker;
423c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao
433c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao    /**
443c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao     * Setup test.
453c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao     */
463c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao    @Before
473c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao    public void setUp() {
483c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao        MockitoAnnotations.initMocks(this);
493c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao        mWifiStateTracker = new WifiStateTracker(mBatteryStats);
503c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao    }
513c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao
523c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao    /**
533c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao     * Ensure BatteryStats's noteWifiState() is called when the method
543c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao     * updateState() is invoked on WifiStateTracker for relevant states.
553c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao     */
563c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao    @Test
573c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao    public void testBatteryStatsUpdated() throws Exception {
583c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao        int[] relevantStates = new int[] { WifiStateTracker.SCAN_MODE,
593c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao                WifiStateTracker.CONNECTED, WifiStateTracker.DISCONNECTED,
603c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao                WifiStateTracker.SOFT_AP};
613c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao        for (int i = 0; i < relevantStates.length; i++) {
623c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao            mWifiStateTracker.updateState(relevantStates[i]);
633c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao        }
6430a29085c09339ff9faf12f105da6f80ffb77389Sohani Rao        verify(mBatteryStats, times(relevantStates.length)).noteWifiState(anyInt(), any());
653c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao    }
663c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao
673c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao    /**
683c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao     * Ensure BatteryStats's noteWifiState() is not called when the method
693c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao     * updateState() is invoked on WifiStateTracker for irrelevant states.
703c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao     */
713c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao    @Test
723c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao    public void testBatteryStatsNotUpdated() throws Exception {
733c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao        int[] irrelevantStates = new int[] { WifiStateTracker.SCAN_MODE - 1,
743c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao                WifiStateTracker.SOFT_AP + 1};
753c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao        for (int i = 0; i < irrelevantStates.length; i++) {
763c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao            mWifiStateTracker.updateState(irrelevantStates[i]);
773c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao        }
7830a29085c09339ff9faf12f105da6f80ffb77389Sohani Rao        verify(mBatteryStats, times(0)).noteWifiState(anyInt(), any());
793c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao    }
803c0eb618a6398926893508f9d05fa39a99cf4894Sohani Rao}
81