diff --git a/drm/aidl/vts/drm_hal_common.cpp b/drm/aidl/vts/drm_hal_common.cpp index de7dc288ec..7de81670ab 100644 --- a/drm/aidl/vts/drm_hal_common.cpp +++ b/drm/aidl/vts/drm_hal_common.cpp @@ -73,6 +73,7 @@ std::string HalBaseName(const std::string& fullname) { } const char* kDrmIface = "android.hardware.drm.IDrmFactory"; +const int MAX_OPEN_SESSION_ATTEMPTS = 3; std::string HalFullName(const std::string& iface, const std::string& basename) { return iface + '/' + basename; @@ -328,9 +329,19 @@ SessionId DrmHalTest::openSession(SecurityLevel level, Status* err) { */ SessionId DrmHalTest::openSession() { SessionId sessionId; - auto ret = drmPlugin->openSession(SecurityLevel::DEFAULT, &sessionId); - EXPECT_OK(ret); - EXPECT_NE(0u, sessionId.size()); + + int attmpt = 0; + while (attmpt++ < MAX_OPEN_SESSION_ATTEMPTS) { + auto ret = drmPlugin->openSession(SecurityLevel::DEFAULT, &sessionId); + if(DrmErr(ret) == Status::ERROR_DRM_NOT_PROVISIONED) { + provision(); + } else { + EXPECT_OK(ret); + EXPECT_NE(0u, sessionId.size()); + break; + } + } + return sessionId; }