BatterySaverPolicyTest.java revision 455e90add22835d0744fc0f5c2feb5fcaf03b28f
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 */
16package com.android.server.power;
17
18import android.os.PowerSaveState;
19import android.os.Handler;
20import android.test.AndroidTestCase;
21import android.test.suitebuilder.annotation.SmallTest;
22import com.android.server.power.BatterySaverPolicy.ServiceType;
23import org.mockito.Mock;
24import org.mockito.MockitoAnnotations;
25
26import static com.google.common.truth.Truth.assertThat;
27
28/**
29 * Tests for {@link com.android.server.power.BatterySaverPolicy}
30 */
31public class BatterySaverPolicyTest extends AndroidTestCase {
32    private static final boolean BATTERY_SAVER_ON = true;
33    private static final boolean BATTERY_SAVER_OFF = false;
34    private static final float BRIGHTNESS_FACTOR = 0.7f;
35    private static final float DEFAULT_BRIGHTNESS_FACTOR = 0.5f;
36    private static final float PRECISION = 0.001f;
37    private static final int GPS_MODE = 0;
38    private static final int DEFAULT_GPS_MODE = 1;
39    private static final String BATTERY_SAVER_CONSTANTS = "vibration_disabled=true,"
40            + "animation_disabled=false,"
41            + "soundtrigger_disabled=true,"
42            + "firewall_disabled=false,"
43            + "adjust_brightness_disabled=true,"
44            + "adjust_brightness_factor=0.7,"
45            + "fullbackup_deferred=true,"
46            + "keyvaluebackup_deferred=false,"
47            + "gps_mode=0";
48    private static final String BATTERY_SAVER_INCORRECT_CONSTANTS = "vi*,!=,,true";
49
50    @Mock
51    Handler mHandler;
52    private BatterySaverPolicy mBatterySaverPolicy;
53
54    public void setUp() throws Exception {
55        super.setUp();
56        MockitoAnnotations.initMocks(this);
57        mBatterySaverPolicy = new BatterySaverPolicy(mHandler);
58        mBatterySaverPolicy.start(getContext().getContentResolver());
59    }
60
61    @SmallTest
62    public void testGetBatterySaverPolicy_PolicyNull_DefaultValueCorrect() {
63        testServiceDefaultValue(ServiceType.NULL);
64    }
65
66    @SmallTest
67    public void testGetBatterySaverPolicy_PolicyVibration_DefaultValueCorrect() {
68        testServiceDefaultValue(ServiceType.VIBRATION);
69    }
70
71    @SmallTest
72    public void testGetBatterySaverPolicy_PolicySound_DefaultValueCorrect() {
73        testServiceDefaultValue(ServiceType.SOUND);
74    }
75
76    @SmallTest
77    public void testGetBatterySaverPolicy_PolicyFullBackup_DefaultValueCorrect() {
78        testServiceDefaultValue(ServiceType.FULL_BACKUP);
79    }
80
81    @SmallTest
82    public void testGetBatterySaverPolicy_PolicyKeyValueBackup_DefaultValueCorrect() {
83        testServiceDefaultValue(ServiceType.KEYVALUE_BACKUP);
84    }
85
86    @SmallTest
87    public void testGetBatterySaverPolicy_PolicyAnimation_DefaultValueCorrect() {
88        testServiceDefaultValue(ServiceType.ANIMATION);
89    }
90
91    @SmallTest
92    public void testGetBatterySaverPolicy_PolicyBatteryStats_DefaultValueCorrect() {
93        testServiceDefaultValue(ServiceType.BATTERY_STATS);
94    }
95
96    @SmallTest
97    public void testGetBatterySaverPolicy_PolicyNetworkFirewall_DefaultValueCorrect() {
98        testServiceDefaultValue(ServiceType.NETWORK_FIREWALL);
99    }
100
101    @SmallTest
102    public void testGetBatterySaverPolicy_PolicyScreenBrightness_DefaultValueCorrect() {
103        testServiceDefaultValue(ServiceType.SCREEN_BRIGHTNESS);
104
105        PowerSaveState stateOn =
106                mBatterySaverPolicy.getBatterySaverPolicy(ServiceType.SCREEN_BRIGHTNESS, true);
107        assertThat(stateOn.brightnessFactor).isWithin(PRECISION).of(DEFAULT_BRIGHTNESS_FACTOR);
108    }
109
110    @SmallTest
111    public void testGetBatterySaverPolicy_PolicyGps_DefaultValueCorrect() {
112        testServiceDefaultValue(ServiceType.GPS);
113
114        PowerSaveState stateOn =
115                mBatterySaverPolicy.getBatterySaverPolicy(ServiceType.GPS, true);
116        assertThat(stateOn.gpsMode).isEqualTo(DEFAULT_GPS_MODE);
117    }
118
119    @SmallTest
120    public void testUpdateConstants_getCorrectData() {
121        mBatterySaverPolicy.updateConstants(BATTERY_SAVER_CONSTANTS);
122
123        final PowerSaveState vibrationState =
124                mBatterySaverPolicy.getBatterySaverPolicy(ServiceType.VIBRATION, BATTERY_SAVER_ON);
125        assertThat(vibrationState.batterySaverEnabled).isTrue();
126
127        final PowerSaveState animationState =
128                mBatterySaverPolicy.getBatterySaverPolicy(ServiceType.ANIMATION, BATTERY_SAVER_ON);
129        assertThat(animationState.batterySaverEnabled).isFalse();
130
131        final PowerSaveState soundState =
132                mBatterySaverPolicy.getBatterySaverPolicy(ServiceType.SOUND, BATTERY_SAVER_ON);
133        assertThat(soundState.batterySaverEnabled).isTrue();
134
135        final PowerSaveState networkState = mBatterySaverPolicy.getBatterySaverPolicy(
136                ServiceType.NETWORK_FIREWALL, BATTERY_SAVER_ON);
137        assertThat(networkState.batterySaverEnabled).isTrue();
138
139        final PowerSaveState screenState =
140                mBatterySaverPolicy.getBatterySaverPolicy(ServiceType.SCREEN_BRIGHTNESS, BATTERY_SAVER_ON);
141        assertThat(screenState.batterySaverEnabled).isFalse();
142        assertThat(screenState.brightnessFactor).isWithin(PRECISION).of(BRIGHTNESS_FACTOR);
143
144        final PowerSaveState fullBackupState = mBatterySaverPolicy.getBatterySaverPolicy(
145                ServiceType.FULL_BACKUP, BATTERY_SAVER_ON);
146        assertThat(fullBackupState.batterySaverEnabled).isTrue();
147
148        final PowerSaveState keyValueBackupState = mBatterySaverPolicy.getBatterySaverPolicy(
149                ServiceType.KEYVALUE_BACKUP, BATTERY_SAVER_ON);
150        assertThat(keyValueBackupState.batterySaverEnabled).isFalse();
151
152        final PowerSaveState gpsState =
153                mBatterySaverPolicy.getBatterySaverPolicy(ServiceType.GPS, BATTERY_SAVER_ON);
154        assertThat(gpsState.batterySaverEnabled).isTrue();
155        assertThat(gpsState.gpsMode).isEqualTo(GPS_MODE);
156    }
157
158    @SmallTest
159    public void testUpdateConstants_IncorrectData_NotCrash() {
160        //Should not crash
161        mBatterySaverPolicy.updateConstants(BATTERY_SAVER_INCORRECT_CONSTANTS);
162        mBatterySaverPolicy.updateConstants(null);
163    }
164
165    private void testServiceDefaultValue(@ServiceType int type) {
166        mBatterySaverPolicy.updateConstants("");
167        final PowerSaveState batterySaverStateOn =
168                mBatterySaverPolicy.getBatterySaverPolicy(type, BATTERY_SAVER_ON);
169        assertThat(batterySaverStateOn.batterySaverEnabled).isTrue();
170
171        final PowerSaveState batterySaverStateOff =
172                mBatterySaverPolicy.getBatterySaverPolicy(type, BATTERY_SAVER_OFF);
173        assertThat(batterySaverStateOff.batterySaverEnabled).isFalse();
174    }
175}
176