1d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil/*
2d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil * Copyright (C) 2017 The Android Open Source Project
3d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil *
4d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil * Licensed under the Apache License, Version 2.0 (the "License");
5d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil * you may not use this file except in compliance with the License.
6d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil * You may obtain a copy of the License at
7d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil *
8d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil *      http://www.apache.org/licenses/LICENSE-2.0
9d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil *
10d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil * Unless required by applicable law or agreed to in writing, software
11d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil * distributed under the License is distributed on an "AS IS" BASIS,
12d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil * See the License for the specific language governing permissions and
14d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil * limitations under the License.
15d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil */
16d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil
17d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil#define LOG_TAG "health_hidl_hal_test"
18d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil
19d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil#include <android/hardware/health/1.0/IHealth.h>
20d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil#include <android/hardware/health/1.0/types.h>
21d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil#include <log/log.h>
2291456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang
23d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil#include <VtsHalHidlTargetTestBase.h>
2491456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang#include <VtsHalHidlTargetTestEnvBase.h>
25d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil
26d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patilusing HealthConfig = ::android::hardware::health::V1_0::HealthConfig;
27d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patilusing HealthInfo = ::android::hardware::health::V1_0::HealthInfo;
28d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patilusing IHealth = ::android::hardware::health::V1_0::IHealth;
29d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patilusing Result = ::android::hardware::health::V1_0::Result;
30d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil
31d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patilusing ::android::sp;
32d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil
3391456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang// Test environment for Health HIDL HAL.
3491456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhangclass HealthHidlEnvironment : public ::testing::VtsHalHidlTargetTestEnvBase {
3591456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang   public:
3691456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang    // get the test environment singleton
3791456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang    static HealthHidlEnvironment* Instance() {
3891456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang        static HealthHidlEnvironment* instance = new HealthHidlEnvironment;
3991456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang        return instance;
4091456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang    }
4191456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang
4291456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang    virtual void registerTestServices() override { registerTestService<IHealth>(); }
4391456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang   private:
4491456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang    HealthHidlEnvironment() {}
4591456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang};
4691456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang
47d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patilclass HealthHidlTest : public ::testing::VtsHalHidlTargetTestBase {
48d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil   public:
49d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil    virtual void SetUp() override {
5091456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang        health = ::testing::VtsHalHidlTargetTestBase::getService<IHealth>(
5191456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang            HealthHidlEnvironment::Instance()->getServiceName<IHealth>());
52d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil        ASSERT_NE(health, nullptr);
53d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil        health->init(config,
54d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil                     [&](const auto& halConfigOut) { config = halConfigOut; });
55d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil    }
56d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil
57d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil    sp<IHealth> health;
58d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil    HealthConfig config;
59d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil};
60d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil
61d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil/**
62d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil * Ensure EnergyCounter call returns positive energy counter or NOT_SUPPORTED
63d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil */
64d22e2c5a87464ca252d088621abf0a9384f54618Sandeep PatilTEST_F(HealthHidlTest, TestEnergyCounter) {
65d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil    Result result;
66d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil    int64_t energy = 0;
67d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil    health->energyCounter([&](Result ret, int64_t energyOut) {
68d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil        result = ret;
69d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil        energy = energyOut;
70d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil    });
71d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil
72d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil    ASSERT_TRUE(result == Result::SUCCESS || result == Result::NOT_SUPPORTED);
73d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil    ASSERT_TRUE(result != Result::SUCCESS || energy > 0);
74d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil}
75d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil
76d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patilint main(int argc, char **argv) {
7791456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang    ::testing::AddGlobalTestEnvironment(HealthHidlEnvironment::Instance());
78d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil    ::testing::InitGoogleTest(&argc, argv);
7991456084c29c6f4a3f629d7c44631ee3ee3b29e6Zhuoyao Zhang    HealthHidlEnvironment::Instance()->init(&argc, argv);
80d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil    int status = RUN_ALL_TESTS();
81d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil    ALOGI("Test result = %d", status);
82d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil    return status;
83d22e2c5a87464ca252d088621abf0a9384f54618Sandeep Patil}
84