153 lines
4.7 KiB
C++
153 lines
4.7 KiB
C++
/*
|
|
* 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
|