blob: 682d1f44dc35f9ce389b7f49df86ccc0f7843e07 [file] [log] [blame]
Lais Andrade4d51f6c2020-03-25 10:58:31 +00001/*
2 * Copyright (C) 2020 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
17#define LOG_TAG "PowerHalWrapperAidlTest"
18
Xiang Wang99f6f3c2023-05-22 13:12:16 -070019#include <aidl/android/hardware/power/Boost.h>
20#include <aidl/android/hardware/power/IPowerHintSession.h>
21#include <aidl/android/hardware/power/Mode.h>
Lais Andrade4d51f6c2020-03-25 10:58:31 +000022#include <binder/IServiceManager.h>
Lais Andrade4d51f6c2020-03-25 10:58:31 +000023#include <gmock/gmock.h>
24#include <gtest/gtest.h>
Lais Andrade4d51f6c2020-03-25 10:58:31 +000025#include <powermanager/PowerHalWrapper.h>
Lais Andradeb59a9b52020-05-07 17:23:42 +010026#include <utils/Log.h>
Lais Andrade4d51f6c2020-03-25 10:58:31 +000027
Jimmy Shiu0b264bb2021-03-03 00:30:50 +080028#include <unistd.h>
Lais Andrade4d51f6c2020-03-25 10:58:31 +000029#include <thread>
Lais Andrade4d51f6c2020-03-25 10:58:31 +000030
Matt Buckley290d4262024-11-21 01:47:05 +000031
Lais Andrade4d51f6c2020-03-25 10:58:31 +000032using android::binder::Status;
Lais Andrade4d51f6c2020-03-25 10:58:31 +000033
Matt Buckley290d4262024-11-21 01:47:05 +000034using namespace aidl::android::hardware::power;
Lais Andrade4d51f6c2020-03-25 10:58:31 +000035using namespace android;
Lais Andradeb59a9b52020-05-07 17:23:42 +010036using namespace android::power;
Lais Andrade4d51f6c2020-03-25 10:58:31 +000037using namespace std::chrono_literals;
38using namespace testing;
39
40// -------------------------------------------------------------------------------------------------
41
42class MockIPower : public IPower {
43public:
Xiang Wang99f6f3c2023-05-22 13:12:16 -070044 MockIPower() = default;
45
46 MOCK_METHOD(ndk::ScopedAStatus, isBoostSupported, (Boost boost, bool* ret), (override));
47 MOCK_METHOD(ndk::ScopedAStatus, setBoost, (Boost boost, int32_t durationMs), (override));
48 MOCK_METHOD(ndk::ScopedAStatus, isModeSupported, (Mode mode, bool* ret), (override));
49 MOCK_METHOD(ndk::ScopedAStatus, setMode, (Mode mode, bool enabled), (override));
50 MOCK_METHOD(ndk::ScopedAStatus, createHintSession,
Jimmy Shiu0b264bb2021-03-03 00:30:50 +080051 (int32_t tgid, int32_t uid, const std::vector<int32_t>& threadIds,
Xiang Wang99f6f3c2023-05-22 13:12:16 -070052 int64_t durationNanos, std::shared_ptr<IPowerHintSession>* session),
Jimmy Shiu0b264bb2021-03-03 00:30:50 +080053 (override));
Matt Buckley104f53a2023-12-14 00:19:20 +000054 MOCK_METHOD(ndk::ScopedAStatus, createHintSessionWithConfig,
55 (int32_t tgid, int32_t uid, const std::vector<int32_t>& threadIds,
56 int64_t durationNanos, SessionTag tag, SessionConfig* config,
57 std::shared_ptr<IPowerHintSession>* _aidl_return),
58 (override));
59 MOCK_METHOD(ndk::ScopedAStatus, getSessionChannel,
60 (int32_t tgid, int32_t uid, ChannelConfig* _aidl_return), (override));
61 MOCK_METHOD(ndk::ScopedAStatus, closeSessionChannel, (int32_t tgid, int32_t uid), (override));
Xiang Wang99f6f3c2023-05-22 13:12:16 -070062 MOCK_METHOD(ndk::ScopedAStatus, getHintSessionPreferredRate, (int64_t * rate), (override));
Matt Buckley666659a2024-10-28 18:41:40 +000063 MOCK_METHOD(ndk::ScopedAStatus, getSupportInfo, (SupportInfo * _aidl_return), (override));
Xiang Wang99f6f3c2023-05-22 13:12:16 -070064 MOCK_METHOD(ndk::ScopedAStatus, getInterfaceVersion, (int32_t * version), (override));
65 MOCK_METHOD(ndk::ScopedAStatus, getInterfaceHash, (std::string * hash), (override));
66 MOCK_METHOD(ndk::SpAIBinder, asBinder, (), (override));
67 MOCK_METHOD(bool, isRemote, (), (override));
Xiang Wangc7bf1642024-10-22 17:37:25 -070068 MOCK_METHOD(ndk::ScopedAStatus, getCpuHeadroom,
Matt Buckleyfb45f272024-11-22 00:43:57 +000069 (const CpuHeadroomParams& params, CpuHeadroomResult* headroom), (override));
Xiang Wangc7bf1642024-10-22 17:37:25 -070070 MOCK_METHOD(ndk::ScopedAStatus, getGpuHeadroom,
Matt Buckleyfb45f272024-11-22 00:43:57 +000071 (const GpuHeadroomParams& params, GpuHeadroomResult* headroom), (override));
Matt Buckley290d4262024-11-21 01:47:05 +000072 MOCK_METHOD(ndk::ScopedAStatus, sendCompositionData,
73 (const std::vector<CompositionData>& in_data), (override));
74 MOCK_METHOD(ndk::ScopedAStatus, sendCompositionUpdate,
75 (const CompositionUpdate& in_update), (override));
Lais Andrade4d51f6c2020-03-25 10:58:31 +000076};
77
78// -------------------------------------------------------------------------------------------------
79
80class PowerHalWrapperAidlTest : public Test {
81public:
82 void SetUp() override;
83
84protected:
Lais Andradeb59a9b52020-05-07 17:23:42 +010085 std::unique_ptr<HalWrapper> mWrapper = nullptr;
Xiang Wang99f6f3c2023-05-22 13:12:16 -070086 std::shared_ptr<StrictMock<MockIPower>> mMockHal = nullptr;
Lais Andrade4d51f6c2020-03-25 10:58:31 +000087};
88
89// -------------------------------------------------------------------------------------------------
90
91void PowerHalWrapperAidlTest::SetUp() {
Xiang Wang99f6f3c2023-05-22 13:12:16 -070092 mMockHal = ndk::SharedRefBase::make<StrictMock<MockIPower>>();
Matt Buckley6c18e6d2024-02-07 23:39:50 +000093 EXPECT_CALL(*mMockHal, getInterfaceVersion(_)).WillRepeatedly(([](int32_t* ret) {
94 *ret = 5;
95 return ndk::ScopedAStatus::ok();
96 }));
Lais Andradeb59a9b52020-05-07 17:23:42 +010097 mWrapper = std::make_unique<AidlHalWrapper>(mMockHal);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +080098 ASSERT_NE(nullptr, mWrapper);
Lais Andrade4d51f6c2020-03-25 10:58:31 +000099}
100
101// -------------------------------------------------------------------------------------------------
102
103TEST_F(PowerHalWrapperAidlTest, TestSetBoostSuccessful) {
104 {
105 InSequence seq;
106 EXPECT_CALL(*mMockHal.get(), isBoostSupported(Eq(Boost::DISPLAY_UPDATE_IMMINENT), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100107 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700108 .WillOnce(DoAll(SetArgPointee<1>(true),
109 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000110 EXPECT_CALL(*mMockHal.get(), setBoost(Eq(Boost::DISPLAY_UPDATE_IMMINENT), Eq(100)))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700111 .Times(Exactly(1))
112 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000113 }
114
115 auto result = mWrapper->setBoost(Boost::DISPLAY_UPDATE_IMMINENT, 100);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800116 ASSERT_TRUE(result.isOk());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000117}
118
119TEST_F(PowerHalWrapperAidlTest, TestSetBoostFailed) {
120 {
121 InSequence seq;
122 EXPECT_CALL(*mMockHal.get(), isBoostSupported(Eq(Boost::INTERACTION), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100123 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700124 .WillOnce(DoAll(SetArgPointee<1>(true),
125 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000126 EXPECT_CALL(*mMockHal.get(), setBoost(Eq(Boost::INTERACTION), Eq(100)))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100127 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700128 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::fromExceptionCode(-1))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000129 EXPECT_CALL(*mMockHal.get(), isBoostSupported(Eq(Boost::DISPLAY_UPDATE_IMMINENT), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100130 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700131 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::fromExceptionCode(-1))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000132 }
133
134 auto result = mWrapper->setBoost(Boost::INTERACTION, 100);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800135 ASSERT_TRUE(result.isFailed());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000136 result = mWrapper->setBoost(Boost::DISPLAY_UPDATE_IMMINENT, 1000);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800137 ASSERT_TRUE(result.isFailed());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000138}
139
140TEST_F(PowerHalWrapperAidlTest, TestSetBoostUnsupported) {
Matt Buckley6c18e6d2024-02-07 23:39:50 +0000141 EXPECT_CALL(*mMockHal.get(), isBoostSupported(_, _))
142 .Times(Exactly(2))
143 .WillRepeatedly([](Boost, bool* ret) {
144 *ret = false;
145 return ndk::ScopedAStatus::ok();
146 });
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000147
148 auto result = mWrapper->setBoost(Boost::INTERACTION, 1000);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800149 ASSERT_TRUE(result.isUnsupported());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000150 result = mWrapper->setBoost(Boost::CAMERA_SHOT, 10);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800151 ASSERT_TRUE(result.isUnsupported());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000152}
153
154TEST_F(PowerHalWrapperAidlTest, TestSetBoostMultiThreadCheckSupportedOnlyOnce) {
155 {
156 InSequence seq;
157 EXPECT_CALL(*mMockHal.get(), isBoostSupported(Eq(Boost::INTERACTION), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100158 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700159 .WillOnce(DoAll(SetArgPointee<1>(true),
160 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
161 auto& exp = EXPECT_CALL(*mMockHal.get(), setBoost(Eq(Boost::INTERACTION), Eq(100)))
162 .Times(Exactly(10));
163 for (int i = 0; i < 10; i++) {
164 exp.WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
165 }
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000166 }
167
168 std::vector<std::thread> threads;
169 for (int i = 0; i < 10; i++) {
170 threads.push_back(std::thread([&]() {
171 auto result = mWrapper->setBoost(Boost::INTERACTION, 100);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800172 ASSERT_TRUE(result.isOk());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000173 }));
174 }
175 std::for_each(threads.begin(), threads.end(), [](std::thread& t) { t.join(); });
176}
177
178TEST_F(PowerHalWrapperAidlTest, TestSetModeSuccessful) {
179 {
180 InSequence seq;
181 EXPECT_CALL(*mMockHal.get(), isModeSupported(Eq(Mode::DISPLAY_INACTIVE), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100182 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700183 .WillOnce(DoAll(SetArgPointee<1>(true),
184 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000185 EXPECT_CALL(*mMockHal.get(), setMode(Eq(Mode::DISPLAY_INACTIVE), Eq(false)))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700186 .Times(Exactly(1))
187 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000188 }
189
190 auto result = mWrapper->setMode(Mode::DISPLAY_INACTIVE, false);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800191 ASSERT_TRUE(result.isOk());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000192}
193
194TEST_F(PowerHalWrapperAidlTest, TestSetModeFailed) {
195 {
196 InSequence seq;
197 EXPECT_CALL(*mMockHal.get(), isModeSupported(Eq(Mode::LAUNCH), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100198 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700199 .WillOnce(DoAll(SetArgPointee<1>(true),
200 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000201 EXPECT_CALL(*mMockHal.get(), setMode(Eq(Mode::LAUNCH), Eq(true)))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100202 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700203 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::fromExceptionCode(-1))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000204 EXPECT_CALL(*mMockHal.get(), isModeSupported(Eq(Mode::DISPLAY_INACTIVE), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100205 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700206 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::fromExceptionCode(-1))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000207 }
208
209 auto result = mWrapper->setMode(Mode::LAUNCH, true);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800210 ASSERT_TRUE(result.isFailed());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000211 result = mWrapper->setMode(Mode::DISPLAY_INACTIVE, false);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800212 ASSERT_TRUE(result.isFailed());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000213}
214
215TEST_F(PowerHalWrapperAidlTest, TestSetModeUnsupported) {
216 EXPECT_CALL(*mMockHal.get(), isModeSupported(Eq(Mode::LAUNCH), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100217 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700218 .WillOnce(DoAll(SetArgPointee<1>(false),
219 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000220
221 auto result = mWrapper->setMode(Mode::LAUNCH, true);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800222 ASSERT_TRUE(result.isUnsupported());
Jim Blackler559361b2021-11-29 00:07:39 +0000223
224 EXPECT_CALL(*mMockHal.get(), isModeSupported(Eq(Mode::CAMERA_STREAMING_HIGH), _))
225 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700226 .WillOnce(DoAll(SetArgPointee<1>(false),
227 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000228 result = mWrapper->setMode(Mode::CAMERA_STREAMING_HIGH, true);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800229 ASSERT_TRUE(result.isUnsupported());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000230}
231
232TEST_F(PowerHalWrapperAidlTest, TestSetModeMultiThreadCheckSupportedOnlyOnce) {
233 {
234 InSequence seq;
235 EXPECT_CALL(*mMockHal.get(), isModeSupported(Eq(Mode::LAUNCH), _))
Lais Andradeb59a9b52020-05-07 17:23:42 +0100236 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700237 .WillOnce(DoAll(SetArgPointee<1>(true),
238 Return(testing::ByMove(ndk::ScopedAStatus::ok()))));
239 auto& exp = EXPECT_CALL(*mMockHal.get(), setMode(Eq(Mode::LAUNCH), Eq(false)))
240 .Times(Exactly(10));
241 for (int i = 0; i < 10; i++) {
242 exp.WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
243 }
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000244 }
245
246 std::vector<std::thread> threads;
247 for (int i = 0; i < 10; i++) {
248 threads.push_back(std::thread([&]() {
249 auto result = mWrapper->setMode(Mode::LAUNCH, false);
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800250 ASSERT_TRUE(result.isOk());
Lais Andrade4d51f6c2020-03-25 10:58:31 +0000251 }));
252 }
253 std::for_each(threads.begin(), threads.end(), [](std::thread& t) { t.join(); });
254}
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800255
256TEST_F(PowerHalWrapperAidlTest, TestCreateHintSessionSuccessful) {
257 std::vector<int> threadIds{gettid()};
258 int32_t tgid = 999;
259 int32_t uid = 1001;
260 int64_t durationNanos = 16666666L;
261 EXPECT_CALL(*mMockHal.get(),
262 createHintSession(Eq(tgid), Eq(uid), Eq(threadIds), Eq(durationNanos), _))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700263 .Times(Exactly(1))
264 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800265 auto result = mWrapper->createHintSession(tgid, uid, threadIds, durationNanos);
266 ASSERT_TRUE(result.isOk());
267}
268
Matt Buckleydb4192a2023-12-21 20:00:32 +0000269TEST_F(PowerHalWrapperAidlTest, TestCreateHintSessionWithConfigSuccessful) {
270 std::vector<int> threadIds{gettid()};
271 int32_t tgid = 999;
272 int32_t uid = 1001;
273 int64_t durationNanos = 16666666L;
274 SessionTag tag = SessionTag::OTHER;
275 SessionConfig out;
276 EXPECT_CALL(*mMockHal.get(),
277 createHintSessionWithConfig(Eq(tgid), Eq(uid), Eq(threadIds), Eq(durationNanos),
278 Eq(tag), _, _))
279 .Times(Exactly(1))
280 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
281 auto result =
282 mWrapper->createHintSessionWithConfig(tgid, uid, threadIds, durationNanos, tag, &out);
283 ASSERT_TRUE(result.isOk());
284}
285
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800286TEST_F(PowerHalWrapperAidlTest, TestCreateHintSessionFailed) {
287 int32_t tgid = 999;
288 int32_t uid = 1001;
289 std::vector<int> threadIds{};
290 int64_t durationNanos = 16666666L;
291 EXPECT_CALL(*mMockHal.get(),
292 createHintSession(Eq(tgid), Eq(uid), Eq(threadIds), Eq(durationNanos), _))
293 .Times(Exactly(1))
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700294 .WillOnce(Return(testing::ByMove(
295 ndk::ScopedAStatus::fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT))));
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800296 auto result = mWrapper->createHintSession(tgid, uid, threadIds, durationNanos);
297 ASSERT_TRUE(result.isFailed());
298}
299
300TEST_F(PowerHalWrapperAidlTest, TestGetHintSessionPreferredRate) {
Xiang Wang99f6f3c2023-05-22 13:12:16 -0700301 EXPECT_CALL(*mMockHal.get(), getHintSessionPreferredRate(_))
302 .Times(Exactly(1))
303 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
Jimmy Shiu0b264bb2021-03-03 00:30:50 +0800304 auto result = mWrapper->getHintSessionPreferredRate();
305 ASSERT_TRUE(result.isOk());
306 int64_t rate = result.value();
307 ASSERT_GE(0, rate);
308}
Matt Buckleydb4192a2023-12-21 20:00:32 +0000309
310TEST_F(PowerHalWrapperAidlTest, TestSessionChannel) {
311 int32_t tgid = 999;
312 int32_t uid = 1001;
313 EXPECT_CALL(*mMockHal.get(), getSessionChannel(Eq(tgid), Eq(uid), _))
314 .Times(Exactly(1))
315 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
316 EXPECT_CALL(*mMockHal.get(), closeSessionChannel(Eq(tgid), Eq(uid)))
317 .Times(Exactly(1))
318 .WillOnce(Return(testing::ByMove(ndk::ScopedAStatus::ok())));
319 auto createResult = mWrapper->getSessionChannel(tgid, uid);
320 ASSERT_TRUE(createResult.isOk());
321 auto closeResult = mWrapper->closeSessionChannel(tgid, uid);
322 ASSERT_TRUE(closeResult.isOk());
323}
Matt Buckley6c18e6d2024-02-07 23:39:50 +0000324
325TEST_F(PowerHalWrapperAidlTest, TestCreateHintSessionWithConfigUnsupported) {
326 std::vector<int> threadIds{gettid()};
327 int32_t tgid = 999;
328 int32_t uid = 1001;
329 int64_t durationNanos = 16666666L;
330 SessionTag tag = SessionTag::OTHER;
331 SessionConfig out;
332 EXPECT_CALL(*mMockHal.get(),
333 createHintSessionWithConfig(Eq(tgid), Eq(uid), Eq(threadIds), Eq(durationNanos),
334 Eq(tag), _, _))
335 .Times(1)
336 .WillOnce(Return(testing::ByMove(
337 ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION))));
338 auto result =
339 mWrapper->createHintSessionWithConfig(tgid, uid, threadIds, durationNanos, tag, &out);
340 ASSERT_TRUE(result.isUnsupported());
341 Mock::VerifyAndClearExpectations(mMockHal.get());
342 EXPECT_CALL(*mMockHal.get(),
343 createHintSessionWithConfig(Eq(tgid), Eq(uid), Eq(threadIds), Eq(durationNanos),
344 Eq(tag), _, _))
345 .WillOnce(Return(
346 testing::ByMove(ndk::ScopedAStatus::fromStatus(STATUS_UNKNOWN_TRANSACTION))));
347 result = mWrapper->createHintSessionWithConfig(tgid, uid, threadIds, durationNanos, tag, &out);
348 ASSERT_TRUE(result.isUnsupported());
349}