1cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat/* 2cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * Copyright (C) 2015 The Android Open Source Project 3cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * 4cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * Licensed under the Apache License, Version 2.0 (the "License"); 5cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * you may not use this file except in compliance with the License. 6cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * You may obtain a copy of the License at 7cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * 8cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * http://www.apache.org/licenses/LICENSE-2.0 9cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * 10cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * Unless required by applicable law or agreed to in writing, software 11cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * distributed under the License is distributed on an "AS IS" BASIS, 12cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * See the License for the specific language governing permissions and 14cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat * limitations under the License. 15cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat */ 16cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 17cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat#include <memory> 18cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 19c2a4b05a931fbf3ecbf1915049b549b33dae8ba5Daniel Erat#include <base/logging.h> 20cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat#include <base/macros.h> 21cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat#include <binder/Binder.h> 22cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat#include <binder/IBinder.h> 23cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat#include <binderwrapper/binder_test_base.h> 24cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat#include <binderwrapper/stub_binder_wrapper.h> 25cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat#include <nativepower/constants.h> 26c2a4b05a931fbf3ecbf1915049b549b33dae8ba5Daniel Erat#include <nativepower/power_manager_client.h> 27cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat#include <nativepower/power_manager_stub.h> 28cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat#include <nativepower/wake_lock.h> 29cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 30cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Eratnamespace android { 31cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 32cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Eratclass WakeLockTest : public BinderTestBase { 33cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat public: 34cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat WakeLockTest() 35cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat : power_manager_(new PowerManagerStub()), 36cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat power_manager_binder_(power_manager_) { 37c2a4b05a931fbf3ecbf1915049b549b33dae8ba5Daniel Erat binder_wrapper()->SetBinderForService(kPowerManagerServiceName, 38c2a4b05a931fbf3ecbf1915049b549b33dae8ba5Daniel Erat power_manager_binder_); 39c2a4b05a931fbf3ecbf1915049b549b33dae8ba5Daniel Erat CHECK(client_.Init()); 40cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat } 41cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat ~WakeLockTest() override = default; 42cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 43cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat protected: 44cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat PowerManagerStub* power_manager_; // Owned by |power_manager_binder_|. 45cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat sp<IBinder> power_manager_binder_; 46c2a4b05a931fbf3ecbf1915049b549b33dae8ba5Daniel Erat PowerManagerClient client_; 47cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 48cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat private: 49cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat DISALLOW_COPY_AND_ASSIGN(WakeLockTest); 50cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat}; 51cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 52cb57344ce792f41e58bc476840a82eba14b0fde9Daniel EratTEST_F(WakeLockTest, CreateAndDestroy) { 534f13a604088be86b9df607655d75b039aa5da4d2Daniel Erat const uid_t kUid = 123; 544f13a604088be86b9df607655d75b039aa5da4d2Daniel Erat binder_wrapper()->set_calling_uid(kUid); 55c2a4b05a931fbf3ecbf1915049b549b33dae8ba5Daniel Erat std::unique_ptr<WakeLock> lock(client_.CreateWakeLock("foo", "bar")); 564f13a604088be86b9df607655d75b039aa5da4d2Daniel Erat ASSERT_EQ(1, power_manager_->GetNumWakeLocks()); 57cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat ASSERT_EQ(1u, binder_wrapper()->local_binders().size()); 58cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat EXPECT_EQ( 594f13a604088be86b9df607655d75b039aa5da4d2Daniel Erat PowerManagerStub::ConstructWakeLockString("foo", "bar", kUid), 604f13a604088be86b9df607655d75b039aa5da4d2Daniel Erat power_manager_->GetWakeLockString(binder_wrapper()->local_binders()[0])); 61cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 62cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat lock.reset(); 634f13a604088be86b9df607655d75b039aa5da4d2Daniel Erat EXPECT_EQ(0, power_manager_->GetNumWakeLocks()); 64cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat} 65cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 66cb57344ce792f41e58bc476840a82eba14b0fde9Daniel EratTEST_F(WakeLockTest, PowerManagerDeath) { 67c2a4b05a931fbf3ecbf1915049b549b33dae8ba5Daniel Erat std::unique_ptr<WakeLock> lock(client_.CreateWakeLock("foo", "bar")); 68cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat binder_wrapper()->NotifyAboutBinderDeath(power_manager_binder_); 69cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 70c2a4b05a931fbf3ecbf1915049b549b33dae8ba5Daniel Erat // Since PowerManagerClient was informed that the power manager died, WakeLock 71c2a4b05a931fbf3ecbf1915049b549b33dae8ba5Daniel Erat // shouldn't try to release its lock on destruction. 72cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat lock.reset(); 734f13a604088be86b9df607655d75b039aa5da4d2Daniel Erat EXPECT_EQ(1, power_manager_->GetNumWakeLocks()); 74cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat} 75cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat 76cb57344ce792f41e58bc476840a82eba14b0fde9Daniel Erat} // namespace android 77