Convert VtsHalDrmV1_*TargetTest to be parameterized test
Removing dependency from VTS infrastructure so that test can run
standalone, for instance with atest/TEST_MAPPING. Once this is
done for every test, VTS can use the core testing infra.
Bug: 142397658
Test: atest VtsHalDrmV1_0TargetTest VtsHalDrmV1_1TargetTest \
VtsHalDrmV1_2TargetTest
Change-Id: Ic436d949f5b26087e32c48fac220cd5abad8a443
diff --git a/drm/1.2/vts/functional/Android.bp b/drm/1.2/vts/functional/Android.bp
index 95883bf..83ea104 100644
--- a/drm/1.2/vts/functional/Android.bp
+++ b/drm/1.2/vts/functional/Android.bp
@@ -17,13 +17,13 @@
cc_test {
name: "VtsHalDrmV1_2TargetTest",
defaults: ["VtsHalTargetTestDefaults"],
+ include_dirs: ["hardware/interfaces/drm/1.0/vts/functional"],
srcs: [
"drm_hal_clearkey_module.cpp",
"drm_hal_common.cpp",
"drm_hal_test.cpp",
"vendor_modules.cpp",
],
- include_dirs: ["hardware/interfaces/drm/1.0/vts/functional"],
static_libs: [
"android.hardware.drm@1.0",
"android.hardware.drm@1.1",
@@ -36,5 +36,8 @@
"libssl",
"libcrypto_static",
],
- test_suites: ["general-tests"],
+ test_suites: [
+ "general-tests",
+ "vts-core",
+ ],
}
diff --git a/drm/1.2/vts/functional/drm_hal_common.cpp b/drm/1.2/vts/functional/drm_hal_common.cpp
index bfffbe8..1f439f7 100644
--- a/drm/1.2/vts/functional/drm_hal_common.cpp
+++ b/drm/1.2/vts/functional/drm_hal_common.cpp
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+#include "vendor_modules.h"
#define LOG_TAG "drm_hal_common@1.2"
#include <android/hidl/allocator/1.0/IAllocator.h>
@@ -81,16 +82,19 @@
return Void();
}
+static DrmHalVTSVendorModule_V1* getModuleForInstance(const std::string& instance) {
+ if (instance == "clearkey" || instance == "default") {
+ return new DrmHalVTSClearkeyModule();
+ }
+
+ return static_cast<DrmHalVTSVendorModule_V1*>(DrmHalTest::gVendorModules->getModule(instance));
+}
+
/**
* DrmHalTest
*/
-DrmHalTest::DrmHalTest()
- : vendorModule(GetParam() == "clearkey"
- ? new DrmHalVTSClearkeyModule()
- : static_cast<DrmHalVTSVendorModule_V1*>(gVendorModules->getModule(GetParam()))),
- contentConfigurations(vendorModule->getContentConfigurations()) {
-}
+DrmHalTest::DrmHalTest() : vendorModule(getModuleForInstance(GetParam())) {}
void DrmHalTest::SetUp() {
const ::testing::TestInfo* const test_info =
@@ -100,22 +104,32 @@
test_info->test_case_name(), test_info->name(),
GetParam().c_str());
- string name = vendorModule->getServiceName();
- drmFactory = VtsHalHidlTargetTestBase::getService<IDrmFactory>(name);
- if (drmFactory == nullptr) {
- drmFactory = VtsHalHidlTargetTestBase::getService<IDrmFactory>();
- }
- if (drmFactory != nullptr) {
- drmPlugin = createDrmPlugin();
+ const string instance = GetParam();
+
+ drmFactory = IDrmFactory::getService(instance);
+ ASSERT_NE(drmFactory, nullptr);
+ drmPlugin = createDrmPlugin();
+
+ cryptoFactory = ICryptoFactory::getService(instance);
+ ASSERT_NE(cryptoFactory, nullptr);
+ cryptoPlugin = createCryptoPlugin();
+
+ if (!vendorModule) {
+ ASSERT_NE(instance, "widevine") << "Widevine requires vendor module.";
+ ASSERT_NE(instance, "clearkey") << "Clearkey requires vendor module.";
+ GTEST_SKIP() << "No vendor module installed";
}
- cryptoFactory = VtsHalHidlTargetTestBase::getService<ICryptoFactory>(name);
- if (cryptoFactory == nullptr) {
- cryptoFactory = VtsHalHidlTargetTestBase::getService<ICryptoFactory>();
+ if (instance == "clearkey") {
+ // TODO(b/147449315)
+ // Only the clearkey plugged into the "default" instance supports
+ // this test. Currently the "clearkey" instance fails some tests
+ // here.
+ GTEST_SKIP() << "Clearkey tests don't work with 'clearkey' instance yet.";
}
- if (cryptoFactory != nullptr) {
- cryptoPlugin = createCryptoPlugin();
- }
+
+ ASSERT_EQ(instance, vendorModule->getServiceName());
+ contentConfigurations = vendorModule->getContentConfigurations();
// If drm scheme not installed skip subsequent tests
if (!drmFactory->isCryptoSchemeSupported(getVendorUUID())) {
@@ -134,12 +148,12 @@
}
sp<IDrmPlugin> plugin = nullptr;
hidl_string packageName("android.hardware.drm.test");
- auto res = drmFactory->createPlugin(
- getVendorUUID(), packageName,
- [&](StatusV1_0 status, const sp<IDrmPluginV1_0>& pluginV1_0) {
- EXPECT_EQ(StatusV1_0::OK, status);
- plugin = IDrmPlugin::castFrom(pluginV1_0);
- });
+ auto res =
+ drmFactory->createPlugin(getVendorUUID(), packageName,
+ [&](StatusV1_0 status, const sp<IDrmPluginV1_0>& pluginV1_0) {
+ EXPECT_EQ(StatusV1_0::OK == status, pluginV1_0 != nullptr);
+ plugin = IDrmPlugin::castFrom(pluginV1_0);
+ });
if (!res.isOk()) {
ALOGE("createDrmPlugin remote call failed");
@@ -155,8 +169,8 @@
hidl_vec<uint8_t> initVec;
auto res = cryptoFactory->createPlugin(
getVendorUUID(), initVec,
- [&](StatusV1_0 status, const sp<ICryptoPluginV1_0>& pluginV1_0) {
- EXPECT_EQ(StatusV1_0::OK, status);
+ [&](StatusV1_0 status, const sp<ICryptoPluginV1_0>& pluginV1_0) {
+ EXPECT_EQ(StatusV1_0::OK == status, pluginV1_0 != nullptr);
plugin = ICryptoPlugin::castFrom(pluginV1_0);
});
if (!res.isOk()) {
@@ -166,6 +180,7 @@
}
hidl_array<uint8_t, 16> DrmHalTest::getVendorUUID() {
+ if (vendorModule == nullptr) return {};
vector<uint8_t> uuid = vendorModule->getUUID();
return hidl_array<uint8_t, 16>(&uuid[0]);
}
diff --git a/drm/1.2/vts/functional/drm_hal_common.h b/drm/1.2/vts/functional/drm_hal_common.h
index e348664..b2d654c 100644
--- a/drm/1.2/vts/functional/drm_hal_common.h
+++ b/drm/1.2/vts/functional/drm_hal_common.h
@@ -33,7 +33,6 @@
#include "drm_hal_vendor_module_api.h"
#include "vendor_modules.h"
#include "VtsHalHidlTargetCallbackBase.h"
-#include "VtsHalHidlTargetTestBase.h"
using ::android::hardware::drm::V1_0::EventType;
using ::android::hardware::drm::V1_0::KeyedVector;
@@ -56,8 +55,6 @@
using ::android::hidl::memory::V1_0::IMemory;
using ::android::sp;
-using ::testing::VtsHalHidlTargetTestBase;
-
using std::map;
using std::string;
using std::unique_ptr;
@@ -65,12 +62,12 @@
#define EXPECT_OK(ret) EXPECT_TRUE(ret.isOk())
-#define RETURN_IF_SKIPPED \
- if (!vendorModule->isInstalled()) { \
- std::cout << "[ SKIPPED ] This drm scheme not supported." << \
- " library:" << GetParam() << " service-name:" << \
- vendorModule->getServiceName() << std::endl; \
- return; \
+#define RETURN_IF_SKIPPED \
+ if (!vendorModule->isInstalled()) { \
+ GTEST_SKIP() << "This drm scheme not supported." \
+ << " library:" << GetParam() \
+ << " service-name:" << vendorModule->getServiceName() << std::endl; \
+ return; \
}
namespace android {
@@ -79,26 +76,6 @@
namespace V1_2 {
namespace vts {
-class DrmHidlEnvironment : public ::testing::VtsHalHidlTargetTestEnvBase {
- public:
- // get the test environment singleton
- static DrmHidlEnvironment* Instance() {
- static DrmHidlEnvironment* instance = new DrmHidlEnvironment;
- return instance;
- }
-
- void registerTestServices() override {
- registerTestService<ICryptoFactory>();
- registerTestService<IDrmFactory>();
- setServiceCombMode(::testing::HalServiceCombMode::NO_COMBINATION);
- }
-
- private:
- DrmHidlEnvironment() {}
-
- GTEST_DISALLOW_COPY_AND_ASSIGN_(DrmHidlEnvironment);
-};
-
class DrmHalTest : public ::testing::TestWithParam<std::string> {
public:
static drm_vts::VendorModules* gVendorModules;
@@ -142,9 +119,9 @@
sp<IDrmPlugin> drmPlugin;
sp<ICryptoPlugin> cryptoPlugin;
unique_ptr<DrmHalVTSVendorModule_V1> vendorModule;
- const vector<DrmHalVTSVendorModule_V1::ContentConfiguration> contentConfigurations;
+ vector<DrmHalVTSVendorModule_V1::ContentConfiguration> contentConfigurations;
- private:
+ private:
sp<IDrmPlugin> createDrmPlugin();
sp<ICryptoPlugin> createCryptoPlugin();
@@ -152,7 +129,13 @@
class DrmHalClearkeyTest : public DrmHalTest {
public:
- virtual void SetUp() override { DrmHalTest::SetUp(); }
+ virtual void SetUp() override {
+ DrmHalTest::SetUp();
+
+ if (vendorModule == nullptr) {
+ GTEST_SKIP() << "Instance not supported";
+ }
+ }
virtual void TearDown() override {}
void decryptWithInvalidKeys(hidl_vec<uint8_t>& invalidResponse,
vector<uint8_t>& iv, const Pattern& noPattern, const vector<SubSample>& subSamples);
diff --git a/drm/1.2/vts/functional/drm_hal_test.cpp b/drm/1.2/vts/functional/drm_hal_test.cpp
index 37ecc25..99c834d 100644
--- a/drm/1.2/vts/functional/drm_hal_test.cpp
+++ b/drm/1.2/vts/functional/drm_hal_test.cpp
@@ -17,7 +17,9 @@
#define LOG_TAG "drm_hal_test@1.2"
#include <gtest/gtest.h>
+#include <hidl/GtestPrinter.h>
#include <hidl/HidlSupport.h>
+#include <hidl/ServiceManagement.h>
#include <log/log.h>
#include <openssl/aes.h>
@@ -35,7 +37,6 @@
using ::android::hardware::drm::V1_2::vts::DrmHalClearkeyTest;
using ::android::hardware::drm::V1_2::vts::DrmHalPluginListener;
using ::android::hardware::drm::V1_2::vts::DrmHalTest;
-using ::android::hardware::drm::V1_2::vts::DrmHidlEnvironment;
using ::android::hardware::drm::V1_2::vts::kCallbackLostState;
using ::android::hardware::drm::V1_2::vts::kCallbackKeysChange;
@@ -559,17 +560,24 @@
* Instantiate the set of test cases for each vendor module
*/
-INSTANTIATE_TEST_CASE_P(
- DrmHalTestClearkey, DrmHalTest,
- testing::Values("clearkey"));
+static const std::set<std::string> kAllInstances = [] {
+ using ::android::hardware::drm::V1_2::ICryptoFactory;
+ using ::android::hardware::drm::V1_2::IDrmFactory;
-INSTANTIATE_TEST_CASE_P(
- DrmHalTestClearkeyExtended, DrmHalClearkeyTest,
- testing::Values("clearkey"));
+ std::vector<std::string> drmInstances =
+ android::hardware::getAllHalInstanceNames(IDrmFactory::descriptor);
+ std::vector<std::string> cryptoInstances =
+ android::hardware::getAllHalInstanceNames(ICryptoFactory::descriptor);
+ std::set<std::string> allInstances;
+ allInstances.insert(drmInstances.begin(), drmInstances.end());
+ allInstances.insert(cryptoInstances.begin(), cryptoInstances.end());
+ return allInstances;
+}();
-INSTANTIATE_TEST_CASE_P(
- DrmHalTestVendor, DrmHalTest,
- testing::ValuesIn(DrmHalTest::gVendorModules->getPathList()));
+INSTANTIATE_TEST_SUITE_P(PerInstance, DrmHalTest, testing::ValuesIn(kAllInstances),
+ android::hardware::PrintInstanceNameToString);
+INSTANTIATE_TEST_SUITE_P(PerInstance, DrmHalClearkeyTest, testing::ValuesIn(kAllInstances),
+ android::hardware::PrintInstanceNameToString);
int main(int argc, char** argv) {
#if defined(__LP64__)
@@ -582,9 +590,7 @@
std::cerr << "WARNING: No vendor modules found in " << kModulePath <<
", all vendor tests will be skipped" << std::endl;
}
- ::testing::AddGlobalTestEnvironment(DrmHidlEnvironment::Instance());
::testing::InitGoogleTest(&argc, argv);
- DrmHidlEnvironment::Instance()->init(&argc, argv);
int status = RUN_ALL_TESTS();
ALOGI("Test result = %d", status);
return status;