xref: /aosp_15_r20/hardware/interfaces/memtrack/aidl/vts/VtsHalMemtrackTargetTest.cpp (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker  * Copyright (C) 2020 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker  *
4*4d7e907cSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker  *
8*4d7e907cSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker  *
10*4d7e907cSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker  * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker  */
16*4d7e907cSAndroid Build Coastguard Worker #include <aidl/Gtest.h>
17*4d7e907cSAndroid Build Coastguard Worker #include <aidl/Vintf.h>
18*4d7e907cSAndroid Build Coastguard Worker 
19*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/memtrack/DeviceInfo.h>
20*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/memtrack/IMemtrack.h>
21*4d7e907cSAndroid Build Coastguard Worker #include <aidl/android/hardware/memtrack/MemtrackType.h>
22*4d7e907cSAndroid Build Coastguard Worker #include <android/binder_manager.h>
23*4d7e907cSAndroid Build Coastguard Worker #include <android/binder_process.h>
24*4d7e907cSAndroid Build Coastguard Worker #include <vintf/VintfObject.h>
25*4d7e907cSAndroid Build Coastguard Worker 
26*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::memtrack::DeviceInfo;
27*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::memtrack::IMemtrack;
28*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::memtrack::MemtrackRecord;
29*4d7e907cSAndroid Build Coastguard Worker using aidl::android::hardware::memtrack::MemtrackType;
30*4d7e907cSAndroid Build Coastguard Worker using android::vintf::KernelVersion;
31*4d7e907cSAndroid Build Coastguard Worker using android::vintf::RuntimeInfo;
32*4d7e907cSAndroid Build Coastguard Worker using android::vintf::VintfObject;
33*4d7e907cSAndroid Build Coastguard Worker 
34*4d7e907cSAndroid Build Coastguard Worker class MemtrackAidlTest : public testing::TestWithParam<std::string> {
35*4d7e907cSAndroid Build Coastguard Worker   public:
SetUp()36*4d7e907cSAndroid Build Coastguard Worker     virtual void SetUp() override {
37*4d7e907cSAndroid Build Coastguard Worker         const auto instance = GetParam();
38*4d7e907cSAndroid Build Coastguard Worker         ASSERT_TRUE(AServiceManager_isDeclared(instance.c_str()));
39*4d7e907cSAndroid Build Coastguard Worker         auto memtrackBinder = ndk::SpAIBinder(AServiceManager_waitForService(instance.c_str()));
40*4d7e907cSAndroid Build Coastguard Worker         memtrack_ = IMemtrack::fromBinder(memtrackBinder);
41*4d7e907cSAndroid Build Coastguard Worker         ASSERT_NE(memtrack_, nullptr);
42*4d7e907cSAndroid Build Coastguard Worker     }
43*4d7e907cSAndroid Build Coastguard Worker 
44*4d7e907cSAndroid Build Coastguard Worker     std::shared_ptr<IMemtrack> memtrack_;
45*4d7e907cSAndroid Build Coastguard Worker };
46*4d7e907cSAndroid Build Coastguard Worker 
TEST_P(MemtrackAidlTest,GetMemoryInvalidPid)47*4d7e907cSAndroid Build Coastguard Worker TEST_P(MemtrackAidlTest, GetMemoryInvalidPid) {
48*4d7e907cSAndroid Build Coastguard Worker     int pid = -1;
49*4d7e907cSAndroid Build Coastguard Worker 
50*4d7e907cSAndroid Build Coastguard Worker     for (MemtrackType type : ndk::enum_range<MemtrackType>()) {
51*4d7e907cSAndroid Build Coastguard Worker         std::vector<MemtrackRecord> records;
52*4d7e907cSAndroid Build Coastguard Worker 
53*4d7e907cSAndroid Build Coastguard Worker         auto status = memtrack_->getMemory(pid, type, &records);
54*4d7e907cSAndroid Build Coastguard Worker 
55*4d7e907cSAndroid Build Coastguard Worker         EXPECT_EQ(status.getExceptionCode(), EX_ILLEGAL_ARGUMENT);
56*4d7e907cSAndroid Build Coastguard Worker     }
57*4d7e907cSAndroid Build Coastguard Worker }
58*4d7e907cSAndroid Build Coastguard Worker 
TEST_P(MemtrackAidlTest,GetMemoryInvalidType)59*4d7e907cSAndroid Build Coastguard Worker TEST_P(MemtrackAidlTest, GetMemoryInvalidType) {
60*4d7e907cSAndroid Build Coastguard Worker     int pid = 1;
61*4d7e907cSAndroid Build Coastguard Worker     MemtrackType type = static_cast<MemtrackType>(-1);
62*4d7e907cSAndroid Build Coastguard Worker     std::vector<MemtrackRecord> records;
63*4d7e907cSAndroid Build Coastguard Worker 
64*4d7e907cSAndroid Build Coastguard Worker     auto status = memtrack_->getMemory(pid, type, &records);
65*4d7e907cSAndroid Build Coastguard Worker 
66*4d7e907cSAndroid Build Coastguard Worker     EXPECT_EQ(status.getExceptionCode(), EX_UNSUPPORTED_OPERATION);
67*4d7e907cSAndroid Build Coastguard Worker }
68*4d7e907cSAndroid Build Coastguard Worker 
TEST_P(MemtrackAidlTest,GetMemory)69*4d7e907cSAndroid Build Coastguard Worker TEST_P(MemtrackAidlTest, GetMemory) {
70*4d7e907cSAndroid Build Coastguard Worker     int pid = 1;
71*4d7e907cSAndroid Build Coastguard Worker     for (MemtrackType type : ndk::enum_range<MemtrackType>()) {
72*4d7e907cSAndroid Build Coastguard Worker         std::vector<MemtrackRecord> records;
73*4d7e907cSAndroid Build Coastguard Worker 
74*4d7e907cSAndroid Build Coastguard Worker         auto status = memtrack_->getMemory(pid, type, &records);
75*4d7e907cSAndroid Build Coastguard Worker 
76*4d7e907cSAndroid Build Coastguard Worker         EXPECT_TRUE(status.isOk());
77*4d7e907cSAndroid Build Coastguard Worker     }
78*4d7e907cSAndroid Build Coastguard Worker }
79*4d7e907cSAndroid Build Coastguard Worker 
TEST_P(MemtrackAidlTest,GetGpuDeviceInfo)80*4d7e907cSAndroid Build Coastguard Worker TEST_P(MemtrackAidlTest, GetGpuDeviceInfo) {
81*4d7e907cSAndroid Build Coastguard Worker     std::vector<DeviceInfo> device_info;
82*4d7e907cSAndroid Build Coastguard Worker 
83*4d7e907cSAndroid Build Coastguard Worker     auto status = memtrack_->getGpuDeviceInfo(&device_info);
84*4d7e907cSAndroid Build Coastguard Worker 
85*4d7e907cSAndroid Build Coastguard Worker     // Devices with < 5.4 kernels aren't required to provide an implementation of
86*4d7e907cSAndroid Build Coastguard Worker     // getGpuDeviceInfo(), and can return EX_UNSUPPORTED_OPERATION
87*4d7e907cSAndroid Build Coastguard Worker     if (status.getExceptionCode() == EX_UNSUPPORTED_OPERATION) {
88*4d7e907cSAndroid Build Coastguard Worker         KernelVersion min_kernel_version = KernelVersion(5, 4, 0);
89*4d7e907cSAndroid Build Coastguard Worker         KernelVersion kernel_version = VintfObject::GetInstance()
90*4d7e907cSAndroid Build Coastguard Worker                                                ->getRuntimeInfo(RuntimeInfo::FetchFlag::CPU_VERSION)
91*4d7e907cSAndroid Build Coastguard Worker                                                ->kernelVersion();
92*4d7e907cSAndroid Build Coastguard Worker         EXPECT_LT(kernel_version, min_kernel_version)
93*4d7e907cSAndroid Build Coastguard Worker                 << "Devices with 5.4 or later kernels must implement getGpuDeviceInfo()";
94*4d7e907cSAndroid Build Coastguard Worker         return;
95*4d7e907cSAndroid Build Coastguard Worker     }
96*4d7e907cSAndroid Build Coastguard Worker 
97*4d7e907cSAndroid Build Coastguard Worker     EXPECT_TRUE(status.isOk());
98*4d7e907cSAndroid Build Coastguard Worker     EXPECT_FALSE(device_info.empty());
99*4d7e907cSAndroid Build Coastguard Worker     for (auto device : device_info) {
100*4d7e907cSAndroid Build Coastguard Worker         EXPECT_FALSE(device.name.empty());
101*4d7e907cSAndroid Build Coastguard Worker     }
102*4d7e907cSAndroid Build Coastguard Worker }
103*4d7e907cSAndroid Build Coastguard Worker 
104*4d7e907cSAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(MemtrackAidlTest);
105*4d7e907cSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(PerInstance, MemtrackAidlTest,
106*4d7e907cSAndroid Build Coastguard Worker                          testing::ValuesIn(android::getAidlHalInstanceNames(IMemtrack::descriptor)),
107*4d7e907cSAndroid Build Coastguard Worker                          android::PrintInstanceNameToString);
108*4d7e907cSAndroid Build Coastguard Worker 
main(int argc,char ** argv)109*4d7e907cSAndroid Build Coastguard Worker int main(int argc, char** argv) {
110*4d7e907cSAndroid Build Coastguard Worker     ::testing::InitGoogleTest(&argc, argv);
111*4d7e907cSAndroid Build Coastguard Worker     ABinderProcess_setThreadPoolMaxThreadCount(1);
112*4d7e907cSAndroid Build Coastguard Worker     ABinderProcess_startThreadPool();
113*4d7e907cSAndroid Build Coastguard Worker     return RUN_ALL_TESTS();
114*4d7e907cSAndroid Build Coastguard Worker }
115