1*9a741119SAndroid Build Coastguard Worker /* 2*9a741119SAndroid Build Coastguard Worker * Copyright (C) 2017 The Android Open Source Project 3*9a741119SAndroid Build Coastguard Worker * 4*9a741119SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*9a741119SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*9a741119SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*9a741119SAndroid Build Coastguard Worker * 8*9a741119SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*9a741119SAndroid Build Coastguard Worker * 10*9a741119SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*9a741119SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*9a741119SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*9a741119SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*9a741119SAndroid Build Coastguard Worker * limitations under the License. 15*9a741119SAndroid Build Coastguard Worker */ 16*9a741119SAndroid Build Coastguard Worker 17*9a741119SAndroid Build Coastguard Worker #ifndef __VTS_HAL_HIDL_TARGET_TEST_BASE_H 18*9a741119SAndroid Build Coastguard Worker #define __VTS_HAL_HIDL_TARGET_TEST_BASE_H 19*9a741119SAndroid Build Coastguard Worker 20*9a741119SAndroid Build Coastguard Worker #include <VtsHalHidlTargetTestEnvBase.h> 21*9a741119SAndroid Build Coastguard Worker #include <gtest/gtest.h> 22*9a741119SAndroid Build Coastguard Worker #include <hidl/HidlSupport.h> 23*9a741119SAndroid Build Coastguard Worker #include <log/log.h> 24*9a741119SAndroid Build Coastguard Worker #include <utils/RefBase.h> 25*9a741119SAndroid Build Coastguard Worker 26*9a741119SAndroid Build Coastguard Worker #define VTS_HAL_HIDL_GET_STUB "VTS_HAL_HIDL_GET_STUB" 27*9a741119SAndroid Build Coastguard Worker 28*9a741119SAndroid Build Coastguard Worker using namespace std; 29*9a741119SAndroid Build Coastguard Worker 30*9a741119SAndroid Build Coastguard Worker namespace testing { 31*9a741119SAndroid Build Coastguard Worker 32*9a741119SAndroid Build Coastguard Worker using ::android::sp; 33*9a741119SAndroid Build Coastguard Worker 34*9a741119SAndroid Build Coastguard Worker // VTS target side test template 35*9a741119SAndroid Build Coastguard Worker class VtsHalHidlTargetTestBase : public ::testing::Test { 36*9a741119SAndroid Build Coastguard Worker public: 37*9a741119SAndroid Build Coastguard Worker /* 38*9a741119SAndroid Build Coastguard Worker * Internal test class setup function. 39*9a741119SAndroid Build Coastguard Worker */ SetUp()40*9a741119SAndroid Build Coastguard Worker virtual void SetUp() override { 41*9a741119SAndroid Build Coastguard Worker ALOGI("[Test Case] %s.%s BEGIN", getTestSuiteName().c_str(), 42*9a741119SAndroid Build Coastguard Worker getTestCaseName().c_str()); 43*9a741119SAndroid Build Coastguard Worker string testCaseInfo = getTestCaseInfo(); 44*9a741119SAndroid Build Coastguard Worker if (testCaseInfo.size()) { 45*9a741119SAndroid Build Coastguard Worker ALOGD("Test case info: %s", testCaseInfo.c_str()); 46*9a741119SAndroid Build Coastguard Worker } 47*9a741119SAndroid Build Coastguard Worker 48*9a741119SAndroid Build Coastguard Worker HalHidlSetUp(); 49*9a741119SAndroid Build Coastguard Worker } 50*9a741119SAndroid Build Coastguard Worker 51*9a741119SAndroid Build Coastguard Worker /* 52*9a741119SAndroid Build Coastguard Worker * Internal test class tear-down function. 53*9a741119SAndroid Build Coastguard Worker */ TearDown()54*9a741119SAndroid Build Coastguard Worker virtual void TearDown() override { 55*9a741119SAndroid Build Coastguard Worker HalHidlTearDown(); 56*9a741119SAndroid Build Coastguard Worker 57*9a741119SAndroid Build Coastguard Worker ALOGI("[Test Case] %s.%s END", getTestSuiteName().c_str(), 58*9a741119SAndroid Build Coastguard Worker getTestCaseName().c_str()); 59*9a741119SAndroid Build Coastguard Worker string testCaseInfo = getTestCaseInfo(); 60*9a741119SAndroid Build Coastguard Worker if (testCaseInfo.size()) { 61*9a741119SAndroid Build Coastguard Worker ALOGD("Test case info: %s", testCaseInfo.c_str()); 62*9a741119SAndroid Build Coastguard Worker } 63*9a741119SAndroid Build Coastguard Worker } 64*9a741119SAndroid Build Coastguard Worker 65*9a741119SAndroid Build Coastguard Worker /* 66*9a741119SAndroid Build Coastguard Worker * HAL HIDL test class setup function. 67*9a741119SAndroid Build Coastguard Worker * Will be called in the end of SetUp() function. 68*9a741119SAndroid Build Coastguard Worker */ HalHidlSetUp()69*9a741119SAndroid Build Coastguard Worker virtual void HalHidlSetUp() {} 70*9a741119SAndroid Build Coastguard Worker 71*9a741119SAndroid Build Coastguard Worker /* 72*9a741119SAndroid Build Coastguard Worker * HAL HIDL test class tear-down function. 73*9a741119SAndroid Build Coastguard Worker * Will be called in the beginning of TearDown() function. 74*9a741119SAndroid Build Coastguard Worker */ HalHidlTearDown()75*9a741119SAndroid Build Coastguard Worker virtual void HalHidlTearDown() {} 76*9a741119SAndroid Build Coastguard Worker 77*9a741119SAndroid Build Coastguard Worker /* 78*9a741119SAndroid Build Coastguard Worker * Return test case info as string. 79*9a741119SAndroid Build Coastguard Worker */ getTestCaseInfo()80*9a741119SAndroid Build Coastguard Worker virtual string getTestCaseInfo() const { return ""; } 81*9a741119SAndroid Build Coastguard Worker 82*9a741119SAndroid Build Coastguard Worker /* 83*9a741119SAndroid Build Coastguard Worker * Get value of system property as string on target 84*9a741119SAndroid Build Coastguard Worker */ 85*9a741119SAndroid Build Coastguard Worker static string PropertyGet(const char* name); 86*9a741119SAndroid Build Coastguard Worker 87*9a741119SAndroid Build Coastguard Worker /* 88*9a741119SAndroid Build Coastguard Worker * Call interface's getService and use passthrough mode if set from host. 89*9a741119SAndroid Build Coastguard Worker */ 90*9a741119SAndroid Build Coastguard Worker template <class T> 91*9a741119SAndroid Build Coastguard Worker static sp<T> getService(const string& serviceName = "default", 92*9a741119SAndroid Build Coastguard Worker bool getStub = false) { 93*9a741119SAndroid Build Coastguard Worker return T::getService(serviceName, 94*9a741119SAndroid Build Coastguard Worker getStub || VtsHalHidlTargetTestBase::VtsGetStub()); 95*9a741119SAndroid Build Coastguard Worker } 96*9a741119SAndroid Build Coastguard Worker 97*9a741119SAndroid Build Coastguard Worker /* 98*9a741119SAndroid Build Coastguard Worker * Call interface's getService with the service name stored in the test 99*9a741119SAndroid Build Coastguard Worker * environment and use passthrough mode if set from host. 100*9a741119SAndroid Build Coastguard Worker */ 101*9a741119SAndroid Build Coastguard Worker template <class T> getService(VtsHalHidlTargetTestEnvBase * testEnv)102*9a741119SAndroid Build Coastguard Worker static sp <T> getService(VtsHalHidlTargetTestEnvBase* testEnv) { 103*9a741119SAndroid Build Coastguard Worker return T::getService(testEnv->getServiceName<T>(), 104*9a741119SAndroid Build Coastguard Worker VtsHalHidlTargetTestBase::VtsGetStub()); 105*9a741119SAndroid Build Coastguard Worker } 106*9a741119SAndroid Build Coastguard Worker 107*9a741119SAndroid Build Coastguard Worker private: 108*9a741119SAndroid Build Coastguard Worker /* 109*9a741119SAndroid Build Coastguard Worker * Decide bool val for getStub option. Will read environment variable set 110*9a741119SAndroid Build Coastguard Worker * from host. If environment variable is not set, return will default to 111*9a741119SAndroid Build Coastguard Worker * false. 112*9a741119SAndroid Build Coastguard Worker */ 113*9a741119SAndroid Build Coastguard Worker static bool VtsGetStub(); 114*9a741119SAndroid Build Coastguard Worker 115*9a741119SAndroid Build Coastguard Worker /* 116*9a741119SAndroid Build Coastguard Worker * Return test suite name as string. 117*9a741119SAndroid Build Coastguard Worker */ 118*9a741119SAndroid Build Coastguard Worker string getTestSuiteName() const; 119*9a741119SAndroid Build Coastguard Worker 120*9a741119SAndroid Build Coastguard Worker /* 121*9a741119SAndroid Build Coastguard Worker * Return test case name as string. 122*9a741119SAndroid Build Coastguard Worker */ 123*9a741119SAndroid Build Coastguard Worker string getTestCaseName() const; 124*9a741119SAndroid Build Coastguard Worker }; 125*9a741119SAndroid Build Coastguard Worker 126*9a741119SAndroid Build Coastguard Worker } // namespace testing 127*9a741119SAndroid Build Coastguard Worker 128*9a741119SAndroid Build Coastguard Worker #endif // __VTS_HAL_HIDL_TARGET_TEST_BASE_H 129