blob: c32899e27a95341909d7954cfe1b7ceb8abddd9d [file] [log] [blame]
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __VTS_HAL_HIDL_TARGET_TEST_ENV_BASE_H
#define __VTS_HAL_HIDL_TARGET_TEST_ENV_BASE_H
#include <gtest/gtest.h>
static constexpr const char* kDefaultServiceName = "default";
using namespace std;
namespace testing {
// Enum class indicates the required combination mode for registered services.
enum HalServiceCombMode {
// Get the full permutation of all the registered service instances.
// E.g. Hal service s1 with instances (n1, n2) and s2 with instances (n3, n4),
// Return combination (s1/n1, s2/n3), (s1/n1, s2/n4), (s1/n2, s2/n3),
// (s1/n2, s2/n4).
FULL_PERMUTATION = 0,
// Get the registered service instances with the same service name.
// E.g. Hal service s1 with instances (n1, n2) and s2 with instances (n1, n2),
// Return combination (s1/n1, s2/n1), (s1/n2, s2/n2).
NAME_MATCH,
// Do not return the service instance combinations. This is used in cases when
// the test logic specifically handles the testing instances. E.g. drm tests.
NO_COMBINATION,
};
// A class for test environment setup
class VtsHalHidlTargetTestEnvBase : public ::testing::Environment {
public:
VtsHalHidlTargetTestEnvBase() {}
/*
* SetUp process, should not be overridden by the test.
*/
void SetUp() final;
/*
* TearDown process, should not be overridden by the test.
*/
void TearDown() final;
/*
* Test should override this method for any custom setup process.
*/
virtual void HidlSetUp() {}
/*
* Test should override this method for any custom teardown process.
*/
virtual void HidlTearDown() {}
/*
* Test should override this method to register hal services used in the test.
*/
virtual void registerTestServices() {}
/* Parses the command line argument, extracts the vts reserved flags and
* leaves other options untouched.
* Must be called when the test environment is created is registered.
*/
void init(int* argc, char** argv);
/*
* Adds a hal sevice identified into registeredHalServices_.
*/
template <class T>
void registerTestService() {
registerTestService(T::descriptor);
}
/*
* Gets the service name for a hal instance. Returns defaultName if the hal
* instance is unkonwn (not in hal_instances_).
*/
template <class T>
string getServiceName(const string& defaultName = kDefaultServiceName) {
return getServiceName(T::descriptor, defaultName);
}
void setServiceCombMode(HalServiceCombMode mode) { mode_ = mode; }
private:
/*
* Parses VTS specific flags, currently support two flags:
* --list_registered_services to print all registered service.
* --hal_service_instance to pass a running service instance. e.g.
* --hal_service_instance=android.hardware.vibrator@1.0::IVibrator/default
* It is possible to have mulitple --hal_service_instance options passed if
* mutliple hal service is used in the test.
* Returns true if successfully pased the given arg, false if arg is null or
* unknown flag.
*/
bool parseVtsTestOption(const char* arg);
/*
* Prints all registered sercives.
*/
void listRegisteredServices();
/*
* Internal method to get the service name for a hal instance.
*/
string getServiceName(const string& instanceName, const string& defaultName);
/*
* Internal method to register a HAL sevice identified with the FQName.
*/
void registerTestService(const string& FQName);
/*
* Internal method to add a hal service instance.
*/
void addHalServiceInstance(const string& halServiceInstance);
/*
* Helper method to check whether the given halServiceInstance is well
* formatted.
*/
bool isValidInstance(const string& halServiceInstance);
// Map of hal instances with their correpoding service names.
map<string, string> halServiceInstances_;
// Set of all hal services used in the test.
set<string> registeredHalServices_;
// Flag to print registered hal services and exit the process.
bool listService_ = false;
// Flag whether init is called.
bool inited_ = false;
// Required combination mode for hal service instances.
HalServiceCombMode mode_ = HalServiceCombMode::FULL_PERMUTATION;
};
} // namespace testing
#endif // __VTS_HAL_HIDL_TARGET_TEST_ENV_BASE_H