PowerWhitelistBackendTest.java revision ae7686534ea7e45da87f391a0ef2c153adb49dd5
1/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.settingslib.fuelgauge;
18
19import static com.google.common.truth.Truth.assertThat;
20import static org.mockito.ArgumentMatchers.anyString;
21import static org.mockito.Mockito.atLeastOnce;
22import static org.mockito.Mockito.doNothing;
23import static org.mockito.Mockito.doReturn;
24import static org.mockito.Mockito.verify;
25
26import android.os.IDeviceIdleController;
27
28import com.android.settingslib.SettingsLibRobolectricTestRunner;
29
30import org.junit.Before;
31import org.junit.Test;
32import org.junit.runner.RunWith;
33import org.mockito.Mock;
34import org.mockito.MockitoAnnotations;
35
36@RunWith(SettingsLibRobolectricTestRunner.class)
37public class PowerWhitelistBackendTest {
38
39    private static final String PACKAGE_ONE = "com.example.packageone";
40    private static final String PACKAGE_TWO = "com.example.packagetwo";
41
42    private PowerWhitelistBackend mPowerWhitelistBackend;
43    @Mock
44    private IDeviceIdleController mDeviceIdleService;
45
46    @Before
47    public void setUp() throws Exception {
48        MockitoAnnotations.initMocks(this);
49        doReturn(new String[] {}).when(mDeviceIdleService).getFullPowerWhitelist();
50        doReturn(new String[] {}).when(mDeviceIdleService).getSystemPowerWhitelist();
51        doReturn(new String[] {}).when(mDeviceIdleService).getSystemPowerWhitelistExceptIdle();
52        doNothing().when(mDeviceIdleService).addPowerSaveWhitelistApp(anyString());
53        doNothing().when(mDeviceIdleService).removePowerSaveWhitelistApp(anyString());
54        mPowerWhitelistBackend = new PowerWhitelistBackend(mDeviceIdleService);
55    }
56
57    @Test
58    public void testIsWhitelisted() throws Exception {
59        doReturn(new String[] {PACKAGE_ONE}).when(mDeviceIdleService).getFullPowerWhitelist();
60        mPowerWhitelistBackend.refreshList();
61
62        assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_ONE)).isTrue();
63        assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_TWO)).isFalse();
64
65        mPowerWhitelistBackend.addApp(PACKAGE_TWO);
66
67        verify(mDeviceIdleService, atLeastOnce()).addPowerSaveWhitelistApp(PACKAGE_TWO);
68        assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_ONE)).isTrue();
69        assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_TWO)).isTrue();
70
71        mPowerWhitelistBackend.removeApp(PACKAGE_TWO);
72
73        verify(mDeviceIdleService, atLeastOnce()).removePowerSaveWhitelistApp(PACKAGE_TWO);
74        assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_ONE)).isTrue();
75        assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_TWO)).isFalse();
76
77        mPowerWhitelistBackend.removeApp(PACKAGE_ONE);
78
79        verify(mDeviceIdleService, atLeastOnce()).removePowerSaveWhitelistApp(PACKAGE_ONE);
80        assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_ONE)).isFalse();
81        assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_TWO)).isFalse();
82    }
83
84    @Test
85    public void testIsSystemWhitelisted() throws Exception {
86        doReturn(new String[] {PACKAGE_ONE}).when(mDeviceIdleService).getSystemPowerWhitelist();
87        mPowerWhitelistBackend.refreshList();
88
89        assertThat(mPowerWhitelistBackend.isSysWhitelisted(PACKAGE_ONE)).isTrue();
90        assertThat(mPowerWhitelistBackend.isSysWhitelisted(PACKAGE_TWO)).isFalse();
91        assertThat(mPowerWhitelistBackend.isWhitelisted(PACKAGE_ONE)).isFalse();
92    }
93
94    @Test
95    public void testIsSystemWhitelistedExceptIdle_onePackage() throws Exception {
96        doReturn(new String[]{PACKAGE_TWO}).when(
97                mDeviceIdleService).getSystemPowerWhitelistExceptIdle();
98        mPowerWhitelistBackend.refreshList();
99
100        assertThat(mPowerWhitelistBackend.isSysWhitelistedExceptIdle(PACKAGE_ONE)).isFalse();
101        assertThat(mPowerWhitelistBackend.isSysWhitelistedExceptIdle(PACKAGE_TWO)).isTrue();
102    }
103
104    @Test
105    public void testIsSystemWhitelistedExceptIdle_packageArray() throws Exception {
106        doReturn(new String[]{PACKAGE_TWO}).when(
107                mDeviceIdleService).getSystemPowerWhitelistExceptIdle();
108        mPowerWhitelistBackend.refreshList();
109
110        final String[] idlePackages = {PACKAGE_ONE, PACKAGE_TWO};
111        final String[] normalPackages = {PACKAGE_ONE};
112
113        assertThat(mPowerWhitelistBackend.isSysWhitelistedExceptIdle(normalPackages)).isFalse();
114        assertThat(mPowerWhitelistBackend.isSysWhitelistedExceptIdle(idlePackages)).isTrue();
115    }
116}
117