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.server.power; 18 19import android.content.Context; 20import android.hardware.display.DisplayManagerInternal.DisplayPowerRequest; 21import android.os.PowerManager; 22import android.os.PowerSaveState; 23import android.test.AndroidTestCase; 24import android.test.suitebuilder.annotation.SmallTest; 25import android.text.TextUtils; 26import java.io.File; 27import java.io.FileWriter; 28import java.io.IOException; 29import java.io.OutputStreamWriter; 30import org.junit.Rule; 31import org.junit.rules.TemporaryFolder; 32import org.mockito.Mock; 33import org.mockito.MockitoAnnotations; 34 35import static com.google.common.truth.Truth.assertThat; 36import static org.mockito.Matchers.anyBoolean; 37import static org.mockito.Matchers.eq; 38import static org.mockito.Mockito.when; 39 40/** 41 * Tests for {@link com.android.server.power.PowerManagerService} 42 */ 43public class PowerManagerServiceTest extends AndroidTestCase { 44 private static final float PRECISION = 0.001f; 45 private static final float BRIGHTNESS_FACTOR = 0.7f; 46 private static final boolean BATTERY_SAVER_ENABLED = true; 47 private static final String LAST_REBOOT_REASON = "last_reboot_reason"; 48 49 private @Mock BatterySaverPolicy mBatterySaverPolicy; 50 private PowerManagerService mService; 51 private PowerSaveState mPowerSaveState; 52 private DisplayPowerRequest mDisplayPowerRequest; 53 private File mTempReason; 54 55 @Rule 56 public TemporaryFolder temporaryFolder = new TemporaryFolder(); 57 58 public void setUp() throws Exception { 59 super.setUp(); 60 MockitoAnnotations.initMocks(this); 61 62 mPowerSaveState = new PowerSaveState.Builder() 63 .setBatterySaverEnabled(BATTERY_SAVER_ENABLED) 64 .setBrightnessFactor(BRIGHTNESS_FACTOR) 65 .build(); 66 when(mBatterySaverPolicy.getBatterySaverPolicy( 67 eq(BatterySaverPolicy.ServiceType.SCREEN_BRIGHTNESS), anyBoolean())) 68 .thenReturn(mPowerSaveState); 69 mDisplayPowerRequest = new DisplayPowerRequest(); 70 mService = new PowerManagerService(getContext(), mBatterySaverPolicy); 71 temporaryFolder.create(); 72 mTempReason = temporaryFolder.newFile(LAST_REBOOT_REASON); 73 } 74 75 @SmallTest 76 public void testUpdatePowerScreenPolicy_UpdateDisplayPowerRequest() { 77 mService.updatePowerRequestFromBatterySaverPolicy(mDisplayPowerRequest); 78 assertThat(mDisplayPowerRequest.lowPowerMode).isEqualTo(BATTERY_SAVER_ENABLED); 79 assertThat(mDisplayPowerRequest.screenLowPowerBrightnessFactor) 80 .isWithin(PRECISION).of(BRIGHTNESS_FACTOR); 81 } 82 83 @SmallTest 84 public void testGetLastShutdownReasonInternal() { 85 try { 86 FileWriter writer = new FileWriter(mTempReason); 87 writer.append("thermal-shutdown\n"); 88 writer.close(); 89 } catch (IOException e) { 90 e.printStackTrace(); 91 } 92 int reason = mService.getLastShutdownReasonInternal(mTempReason); 93 assertThat(reason).isEqualTo(PowerManager.SHUTDOWN_REASON_THERMAL_SHUTDOWN); 94 } 95} 96