Revert "Revert "VTS tests for fixed MediaDrm security level APIs""
This reverts commit 6ec159b78041506efd7467672b5fd4c89f3d90c1.
Change-Id: I7e54e28c5e4b4c9f70d53d045bbfec57f7ef58c3
diff --git a/drm/1.1/vts/functional/drm_hal_clearkey_test.cpp b/drm/1.1/vts/functional/drm_hal_clearkey_test.cpp
index 62cc8b6..a8ed0e5 100644
--- a/drm/1.1/vts/functional/drm_hal_clearkey_test.cpp
+++ b/drm/1.1/vts/functional/drm_hal_clearkey_test.cpp
@@ -158,6 +158,7 @@
virtual void TearDown() override {}
SessionId openSession();
+ SessionId openSession(SecurityLevel level);
void closeSession(const SessionId& sessionId);
hidl_vec<uint8_t> loadKeys(const SessionId& sessionId, const KeyType& type);
sp<IMemory> getDecryptMemory(size_t size, size_t index);
@@ -277,6 +278,23 @@
}
/**
+ * Helper method to open as session using V1.1 API
+ */
+SessionId DrmHalClearkeyTest::openSession(SecurityLevel level) {
+ SessionId sessionId;
+
+ auto res = drmPlugin->openSession_1_1(level,
+ [&sessionId](Status status, const SessionId& id) {
+ EXPECT_EQ(Status::OK, status);
+ EXPECT_NE(0u, id.size());
+ sessionId = id;
+ });
+ EXPECT_OK(res);
+ return sessionId;
+}
+
+
+/**
* Helper method to close a session
*/
void DrmHalClearkeyTest::closeSession(const SessionId& sessionId) {
@@ -298,14 +316,14 @@
}
/**
- * Test that the plugin returns valid open and max session counts
+ * Test that the plugin returns default open and max session counts
*/
-TEST_F(DrmHalClearkeyTest, GetSessionCounts) {
+TEST_F(DrmHalClearkeyTest, GetDefaultSessionCounts) {
auto res = drmPlugin->getNumberOfSessions(
[&](Status status, uint32_t currentSessions,
uint32_t maxSessions) {
EXPECT_EQ(Status::OK, status);
- EXPECT_GT(maxSessions, (uint32_t)0);
+ EXPECT_GE(maxSessions, (uint32_t)8);
EXPECT_GE(currentSessions, (uint32_t)0);
EXPECT_LE(currentSessions, maxSessions);
});
@@ -313,16 +331,76 @@
}
/**
- * Test that the plugin returns a valid security level for
- * a valid session
+ * Test that the plugin returns valid open and max session counts
+ * after a session is opened.
*/
-TEST_F(DrmHalClearkeyTest, GetSecurityLevel) {
+TEST_F(DrmHalClearkeyTest, GetOpenSessionCounts) {
+ uint32_t initialSessions = 0;
+ auto res = drmPlugin->getNumberOfSessions(
+ [&](Status status, uint32_t currentSessions,
+ uint32_t maxSessions) {
+ EXPECT_EQ(Status::OK, status);
+ EXPECT_GE(maxSessions, (uint32_t)8);
+ EXPECT_GE(currentSessions, (uint32_t)0);
+ EXPECT_LE(currentSessions, maxSessions);
+ initialSessions = currentSessions;
+ });
+ EXPECT_OK(res);
+
SessionId session = openSession();
+ res = drmPlugin->getNumberOfSessions(
+ [&](Status status, uint32_t currentSessions,
+ uint32_t /*maxSessions*/) {
+ EXPECT_EQ(Status::OK, status);
+ EXPECT_EQ(currentSessions, initialSessions + 1);
+ });
+ EXPECT_OK(res);
+
+ closeSession(session);
+ res = drmPlugin->getNumberOfSessions(
+ [&](Status status, uint32_t currentSessions,
+ uint32_t /*maxSessions*/) {
+ EXPECT_EQ(Status::OK, status);
+ EXPECT_EQ(currentSessions, initialSessions);
+ });
+ EXPECT_OK(res);
+}
+
+/**
+ * Test that the plugin returns the same security level
+ * by default as when it is requested explicitly
+ */
+TEST_F(DrmHalClearkeyTest, GetDefaultSecurityLevel) {
+ SessionId session = openSession();
+ SecurityLevel defaultLevel;
auto res = drmPlugin->getSecurityLevel(session,
[&](Status status, SecurityLevel level) {
EXPECT_EQ(Status::OK, status);
- EXPECT_GE(level, SecurityLevel::SW_SECURE_CRYPTO);
- EXPECT_LE(level, SecurityLevel::HW_SECURE_ALL);
+ defaultLevel = level;
+ });
+ EXPECT_OK(res);
+ closeSession(session);
+
+ session = openSession(defaultLevel);
+ res = drmPlugin->getSecurityLevel(session,
+ [&](Status status, SecurityLevel level) {
+ EXPECT_EQ(Status::OK, status);
+ EXPECT_EQ(level, defaultLevel);
+ });
+ EXPECT_OK(res);
+ closeSession(session);
+}
+
+/**
+ * Test that the plugin returns the lowest security level
+ * when it is requested
+ */
+TEST_F(DrmHalClearkeyTest, GetSecurityLevel) {
+ SessionId session = openSession(SecurityLevel::SW_SECURE_CRYPTO);
+ auto res = drmPlugin->getSecurityLevel(session,
+ [&](Status status, SecurityLevel level) {
+ EXPECT_EQ(Status::OK, status);
+ EXPECT_EQ(level, SecurityLevel::SW_SECURE_CRYPTO);
});
EXPECT_OK(res);
closeSession(session);
@@ -342,51 +420,6 @@
}
/**
- * Test that setting all valid security levels on a valid sessionId
- * is supported
- */
-TEST_F(DrmHalClearkeyTest, SetSecurityLevel) {
- SessionId session = openSession();
- for (uint32_t level = static_cast<uint32_t>(SecurityLevel::SW_SECURE_CRYPTO);
- level <= static_cast<uint32_t>(SecurityLevel::HW_SECURE_ALL); level++) {
- EXPECT_EQ(Status::OK, drmPlugin->setSecurityLevel(session, static_cast<SecurityLevel>(level)));
-
- // check that the level got set
- auto res = drmPlugin->getSecurityLevel(session,
- [&](Status status, SecurityLevel readLevel) {
- EXPECT_EQ(Status::OK, status);
- EXPECT_EQ(level, static_cast<uint32_t>(readLevel));
- });
- EXPECT_OK(res);
- }
- closeSession(session);
-}
-
-/**
- * Test that setting an invalid security level on a valid
- * sessionId is prohibited with the documented error code.
- */
-TEST_F(DrmHalClearkeyTest, SetInvalidSecurityLevel) {
- SessionId session = openSession();
- SecurityLevel level = static_cast<SecurityLevel>(
- static_cast<uint32_t>(SecurityLevel::HW_SECURE_ALL) + 1);
- Status status = drmPlugin->setSecurityLevel(session, level);
- EXPECT_EQ(Status::BAD_VALUE, status);
- closeSession(session);
-}
-
-/**
- * Test that attempting to set security level on an invalid
- * (empty) sessionId is prohibited with the documented error
- * code.
- */
-TEST_F(DrmHalClearkeyTest, SetSecurityLevelInvalidSessionId) {
- SessionId session;
- SecurityLevel level = SecurityLevel::SW_SECURE_CRYPTO;
- EXPECT_EQ(Status::BAD_VALUE, drmPlugin->setSecurityLevel(session, level));
-}
-
-/**
* Test metrics are set appropriately for open and close operations.
*/
TEST_F(DrmHalClearkeyTest, GetMetricsSuccess) {