Loading cas/1.0/vts/functional/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ cc_test { srcs: ["VtsHalCasV1_0TargetTest.cpp"], static_libs: [ "android.hardware.cas@1.0", "android.hardware.cas@1.1", "android.hardware.cas@1.2", "android.hardware.cas.native@1.0", "android.hidl.allocator@1.0", "android.hidl.memory@1.0", Loading cas/1.0/vts/functional/VtsHalCasV1_0TargetTest.cpp +180 −180 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <android/hardware/cas/1.0/IDescramblerBase.h> #include <android/hardware/cas/1.0/IMediaCasService.h> #include <android/hardware/cas/1.0/types.h> #include <android/hardware/cas/1.2/IMediaCasService.h> #include <android/hardware/cas/native/1.0/IDescrambler.h> #include <android/hardware/cas/native/1.0/types.h> #include <binder/MemoryDealer.h> Loading Loading @@ -212,6 +213,10 @@ void MediaCasListener::testEventEcho(sp<ICas>& mediaCas, int32_t& event, int32_t class MediaCasHidlTest : public testing::TestWithParam<std::string> { public: virtual void SetUp() override { if (android::hardware::cas::V1_2::IMediaCasService::getService(GetParam()) == nullptr) { ALOGI("Descrambler is need to be tested before cas@1.2."); mIsTestDescrambler = true; } mService = IMediaCasService::getService(GetParam()); ASSERT_NE(mService, nullptr); } Loading @@ -226,6 +231,7 @@ class MediaCasHidlTest : public testing::TestWithParam<std::string> { sp<ICas> mMediaCas; sp<IDescramblerBase> mDescramblerBase; sp<MediaCasListener> mCasListener; bool mIsTestDescrambler = false; typedef struct _OobInputTestParams { const SubSample* subSamples; uint32_t numSubSamples; Loading Loading @@ -270,8 +276,14 @@ class MediaCasHidlTest : public testing::TestWithParam<std::string> { auto descramblerStatus = mService->createDescrambler(caSystemId); if (!descramblerStatus.isOk()) { if (mIsTestDescrambler) { return ::testing::AssertionFailure(); } else { ALOGI("Skip Descrambler test since it's not required in cas@1.2."); return ::testing::AssertionSuccess(); } } mIsTestDescrambler = true; mDescramblerBase = descramblerStatus; return ::testing::AssertionResult(mDescramblerBase != nullptr); } Loading Loading @@ -494,7 +506,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApis) { returnStatus = mMediaCas->setSessionPrivateData(streamSessionId, hidlPvtData); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { returnStatus = mDescramblerBase->setMediaCasSession(sessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); Loading @@ -502,6 +514,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApis) { returnStatus = mDescramblerBase->setMediaCasSession(streamSessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } hidl_vec<uint8_t> hidlNullPtr; hidlNullPtr.setToExternal(static_cast<uint8_t*>(nullptr), 0); Loading Loading @@ -543,6 +556,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApis) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { EXPECT_FALSE(mDescramblerBase->requiresSecureDecoderComponent("video/avc")); sp<IDescrambler> descrambler; Loading @@ -556,16 +570,18 @@ TEST_P(MediaCasHidlTest, TestClearKeyApis) { EXPECT_EQ(Status::OK, descrambleStatus); ASSERT_NE(nullptr, dataMemory.get()); uint8_t* opBuffer = static_cast<uint8_t*>(static_cast<void*>(dataMemory->unsecurePointer())); uint8_t* opBuffer = static_cast<uint8_t*>(static_cast<void*>(dataMemory->unsecurePointer())); int compareResult = memcmp(static_cast<const void*>(opBuffer), static_cast<const void*>(kOutRefBinaryBuffer), sizeof(kOutRefBinaryBuffer)); memcmp(static_cast<const void*>(opBuffer), static_cast<const void*>(kOutRefBinaryBuffer), sizeof(kOutRefBinaryBuffer)); EXPECT_EQ(0, compareResult); returnStatus = mDescramblerBase->release(); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } returnStatus = mMediaCas->release(); EXPECT_TRUE(returnStatus.isOk()); Loading @@ -590,6 +606,7 @@ TEST_P(MediaCasHidlTest, TestClearKeySessionClosedAfterRelease) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { returnStatus = mDescramblerBase->setMediaCasSession(sessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::ERROR_CAS_SESSION_NOT_OPENED, returnStatus); Loading @@ -598,6 +615,7 @@ TEST_P(MediaCasHidlTest, TestClearKeySessionClosedAfterRelease) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::ERROR_CAS_SESSION_NOT_OPENED, returnStatus); } } TEST_P(MediaCasHidlTest, TestClearKeyErrors) { description("Test that invalid call sequences fail with expected error codes"); Loading Loading @@ -654,6 +672,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyErrors) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::ERROR_CAS_UNKNOWN, returnStatus); if (mIsTestDescrambler) { /* * Test MediaDescrambler error codes */ Loading Loading @@ -687,6 +706,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyErrors) { // Verify that requiresSecureDecoderComponent handles invalid mime EXPECT_FALSE(mDescramblerBase->requiresSecureDecoderComponent("bad")); } } TEST_P(MediaCasHidlTest, TestClearKeyOobFails) { description("Test that oob descramble request fails with expected error"); Loading @@ -700,9 +720,11 @@ TEST_P(MediaCasHidlTest, TestClearKeyOobFails) { std::vector<uint8_t> sessionId; ASSERT_TRUE(openCasSession(&sessionId)); if (mIsTestDescrambler) { returnStatus = mDescramblerBase->setMediaCasSession(sessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } hidl_vec<uint8_t> hidlEcm; hidlEcm.setToExternal(const_cast<uint8_t*>(kEcmBinaryBuffer), sizeof(kEcmBinaryBuffer)); Loading @@ -710,126 +732,104 @@ TEST_P(MediaCasHidlTest, TestClearKeyOobFails) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { sp<IDescrambler> descrambler = IDescrambler::castFrom(mDescramblerBase); ASSERT_NE(nullptr, descrambler.get()); Status descrambleStatus = Status::OK; // test invalid src buffer offset ASSERT_TRUE(descrambleTestOobInput( descrambler, &descrambleStatus, { .subSamples = kSubSamples, ASSERT_TRUE( descrambleTestOobInput(descrambler, &descrambleStatus, {.subSamples = kSubSamples, .numSubSamples = sizeof(kSubSamples) / sizeof(SubSample), .imemSizeActual = sizeof(kInBinaryBuffer), .imemOffset = 0xcccccc, .imemSize = sizeof(kInBinaryBuffer), .srcOffset = 0, .dstOffset = 0 })); .dstOffset = 0})); EXPECT_EQ(Status::BAD_VALUE, descrambleStatus); // test invalid src buffer size ASSERT_TRUE(descrambleTestOobInput( descrambler, &descrambleStatus, { .subSamples = kSubSamples, ASSERT_TRUE( descrambleTestOobInput(descrambler, &descrambleStatus, {.subSamples = kSubSamples, .numSubSamples = sizeof(kSubSamples) / sizeof(SubSample), .imemSizeActual = sizeof(kInBinaryBuffer), .imemOffset = 0, .imemSize = 0xcccccc, .srcOffset = 0, .dstOffset = 0 })); .dstOffset = 0})); EXPECT_EQ(Status::BAD_VALUE, descrambleStatus); // test invalid src buffer size ASSERT_TRUE(descrambleTestOobInput( descrambler, &descrambleStatus, { .subSamples = kSubSamples, ASSERT_TRUE( descrambleTestOobInput(descrambler, &descrambleStatus, {.subSamples = kSubSamples, .numSubSamples = sizeof(kSubSamples) / sizeof(SubSample), .imemSizeActual = sizeof(kInBinaryBuffer), .imemOffset = 1, .imemSize = (uint64_t)-1, .srcOffset = 0, .dstOffset = 0 })); .dstOffset = 0})); EXPECT_EQ(Status::BAD_VALUE, descrambleStatus); // test invalid srcOffset ASSERT_TRUE(descrambleTestOobInput( descrambler, &descrambleStatus, { .subSamples = kSubSamples, ASSERT_TRUE( descrambleTestOobInput(descrambler, &descrambleStatus, {.subSamples = kSubSamples, .numSubSamples = sizeof(kSubSamples) / sizeof(SubSample), .imemSizeActual = sizeof(kInBinaryBuffer), .imemOffset = 0, .imemSize = sizeof(kInBinaryBuffer), .srcOffset = 0xcccccc, .dstOffset = 0 })); .dstOffset = 0})); EXPECT_EQ(Status::BAD_VALUE, descrambleStatus); // test invalid dstOffset ASSERT_TRUE(descrambleTestOobInput( descrambler, &descrambleStatus, { .subSamples = kSubSamples, ASSERT_TRUE( descrambleTestOobInput(descrambler, &descrambleStatus, {.subSamples = kSubSamples, .numSubSamples = sizeof(kSubSamples) / sizeof(SubSample), .imemSizeActual = sizeof(kInBinaryBuffer), .imemOffset = 0, .imemSize = sizeof(kInBinaryBuffer), .srcOffset = 0, .dstOffset = 0xcccccc })); .dstOffset = 0xcccccc})); EXPECT_EQ(Status::BAD_VALUE, descrambleStatus); // test detection of oob subsample sizes const SubSample invalidSubSamples1[] = {{162, 0}, {0, 184}, {0, 0xdddddd}}; const SubSample invalidSubSamples1[] = {{162, 0}, {0, 184}, {0, 0xdddddd}}; ASSERT_TRUE(descrambleTestOobInput( descrambler, &descrambleStatus, { .subSamples = invalidSubSamples1, descrambler, &descrambleStatus, {.subSamples = invalidSubSamples1, .numSubSamples = sizeof(invalidSubSamples1) / sizeof(SubSample), .imemSizeActual = sizeof(kInBinaryBuffer), .imemOffset = 0, .imemSize = sizeof(kInBinaryBuffer), .srcOffset = 0, .dstOffset = 0 })); .dstOffset = 0})); EXPECT_EQ(Status::BAD_VALUE, descrambleStatus); // test detection of overflowing subsample sizes const SubSample invalidSubSamples2[] = {{162, 0}, {0, 184}, {2, (uint32_t)-1}}; const SubSample invalidSubSamples2[] = {{162, 0}, {0, 184}, {2, (uint32_t)-1}}; ASSERT_TRUE(descrambleTestOobInput( descrambler, &descrambleStatus, { .subSamples = invalidSubSamples2, descrambler, &descrambleStatus, {.subSamples = invalidSubSamples2, .numSubSamples = sizeof(invalidSubSamples2) / sizeof(SubSample), .imemSizeActual = sizeof(kInBinaryBuffer), .imemOffset = 0, .imemSize = sizeof(kInBinaryBuffer), .srcOffset = 0, .dstOffset = 0 })); .dstOffset = 0})); EXPECT_EQ(Status::BAD_VALUE, descrambleStatus); returnStatus = mDescramblerBase->release(); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } returnStatus = mMediaCas->release(); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); Loading cas/1.1/vts/functional/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ cc_test { static_libs: [ "android.hardware.cas@1.0", "android.hardware.cas@1.1", "android.hardware.cas@1.2", "android.hardware.cas.native@1.0", "android.hidl.allocator@1.0", "android.hidl.memory@1.0", Loading cas/1.1/vts/functional/VtsHalCasV1_1TargetTest.cpp +41 −24 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <android/hardware/cas/1.1/ICas.h> #include <android/hardware/cas/1.1/ICasListener.h> #include <android/hardware/cas/1.1/IMediaCasService.h> #include <android/hardware/cas/1.2/IMediaCasService.h> #include <android/hardware/cas/native/1.0/IDescrambler.h> #include <android/hardware/cas/native/1.0/types.h> #include <binder/MemoryDealer.h> Loading Loading @@ -255,6 +256,10 @@ void MediaCasListener::testSessionEventEcho(sp<ICas>& mediaCas, const hidl_vec<u class MediaCasHidlTest : public testing::TestWithParam<std::string> { public: virtual void SetUp() override { if (android::hardware::cas::V1_2::IMediaCasService::getService(GetParam()) == nullptr) { ALOGI("Descrambler is need to be tested before cas@1.2."); mIsTestDescrambler = true; } mService = IMediaCasService::getService(GetParam()); ASSERT_NE(mService, nullptr); } Loading @@ -269,6 +274,7 @@ class MediaCasHidlTest : public testing::TestWithParam<std::string> { sp<ICas> mMediaCas; sp<IDescramblerBase> mDescramblerBase; sp<MediaCasListener> mCasListener; bool mIsTestDescrambler = false; typedef struct _OobInputTestParams { const SubSample* subSamples; uint32_t numSubSamples; Loading Loading @@ -311,8 +317,15 @@ class MediaCasHidlTest : public testing::TestWithParam<std::string> { auto descramblerStatus = mService->createDescrambler(caSystemId); if (!descramblerStatus.isOk()) { if (mIsTestDescrambler) { return ::testing::AssertionFailure(); } else { ALOGI("Skip Descrambler test since it's not required in cas@1.2."); return ::testing::AssertionSuccess(); } } mIsTestDescrambler = true; mDescramblerBase = descramblerStatus; return ::testing::AssertionResult(mDescramblerBase != nullptr); } Loading Loading @@ -468,6 +481,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { returnStatus = mDescramblerBase->setMediaCasSession(sessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); Loading @@ -475,6 +489,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { returnStatus = mDescramblerBase->setMediaCasSession(streamSessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } hidl_vec<uint8_t> hidlNullPtr; hidlNullPtr.setToExternal(static_cast<uint8_t*>(nullptr), 0); Loading Loading @@ -518,6 +533,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { EXPECT_FALSE(mDescramblerBase->requiresSecureDecoderComponent("video/avc")); sp<IDescrambler> descrambler; Loading @@ -541,6 +557,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { returnStatus = mDescramblerBase->release(); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } returnStatus = mMediaCas->release(); EXPECT_TRUE(returnStatus.isOk()); Loading cas/1.2/vts/functional/VtsHalCasV1_2TargetTest.cpp +32 −25 Original line number Diff line number Diff line Loading @@ -311,6 +311,7 @@ class MediaCasHidlTest : public testing::TestWithParam<std::string> { sp<ICas> mMediaCas; sp<IDescramblerBase> mDescramblerBase; sp<MediaCasListener> mCasListener; bool mIsTestDescrambler = false; typedef struct _OobInputTestParams { const SubSample* subSamples; uint32_t numSubSamples; Loading Loading @@ -355,8 +356,11 @@ class MediaCasHidlTest : public testing::TestWithParam<std::string> { auto descramblerStatus = mService->createDescrambler(caSystemId); if (!descramblerStatus.isOk()) { return ::testing::AssertionFailure(); ALOGI("Skip Descrambler test since it's not required in cas@1.2."); return ::testing::AssertionSuccess(); } mIsTestDescrambler = true; mDescramblerBase = descramblerStatus; return ::testing::AssertionResult(mDescramblerBase != nullptr); } Loading Loading @@ -512,6 +516,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { returnStatus = mDescramblerBase->setMediaCasSession(sessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); Loading @@ -519,7 +524,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { returnStatus = mDescramblerBase->setMediaCasSession(streamSessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } hidl_vec<uint8_t> hidlNullPtr; hidlNullPtr.setToExternal(static_cast<uint8_t*>(nullptr), 0); returnStatus = mMediaCas->refreshEntitlements(3, hidlNullPtr); Loading Loading @@ -566,6 +571,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { EXPECT_FALSE(mDescramblerBase->requiresSecureDecoderComponent("video/avc")); sp<IDescrambler> descrambler; Loading @@ -589,6 +595,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { returnStatus = mDescramblerBase->release(); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } returnStatus = mMediaCas->release(); EXPECT_TRUE(returnStatus.isOk()); Loading Loading
cas/1.0/vts/functional/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ cc_test { srcs: ["VtsHalCasV1_0TargetTest.cpp"], static_libs: [ "android.hardware.cas@1.0", "android.hardware.cas@1.1", "android.hardware.cas@1.2", "android.hardware.cas.native@1.0", "android.hidl.allocator@1.0", "android.hidl.memory@1.0", Loading
cas/1.0/vts/functional/VtsHalCasV1_0TargetTest.cpp +180 −180 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <android/hardware/cas/1.0/IDescramblerBase.h> #include <android/hardware/cas/1.0/IMediaCasService.h> #include <android/hardware/cas/1.0/types.h> #include <android/hardware/cas/1.2/IMediaCasService.h> #include <android/hardware/cas/native/1.0/IDescrambler.h> #include <android/hardware/cas/native/1.0/types.h> #include <binder/MemoryDealer.h> Loading Loading @@ -212,6 +213,10 @@ void MediaCasListener::testEventEcho(sp<ICas>& mediaCas, int32_t& event, int32_t class MediaCasHidlTest : public testing::TestWithParam<std::string> { public: virtual void SetUp() override { if (android::hardware::cas::V1_2::IMediaCasService::getService(GetParam()) == nullptr) { ALOGI("Descrambler is need to be tested before cas@1.2."); mIsTestDescrambler = true; } mService = IMediaCasService::getService(GetParam()); ASSERT_NE(mService, nullptr); } Loading @@ -226,6 +231,7 @@ class MediaCasHidlTest : public testing::TestWithParam<std::string> { sp<ICas> mMediaCas; sp<IDescramblerBase> mDescramblerBase; sp<MediaCasListener> mCasListener; bool mIsTestDescrambler = false; typedef struct _OobInputTestParams { const SubSample* subSamples; uint32_t numSubSamples; Loading Loading @@ -270,8 +276,14 @@ class MediaCasHidlTest : public testing::TestWithParam<std::string> { auto descramblerStatus = mService->createDescrambler(caSystemId); if (!descramblerStatus.isOk()) { if (mIsTestDescrambler) { return ::testing::AssertionFailure(); } else { ALOGI("Skip Descrambler test since it's not required in cas@1.2."); return ::testing::AssertionSuccess(); } } mIsTestDescrambler = true; mDescramblerBase = descramblerStatus; return ::testing::AssertionResult(mDescramblerBase != nullptr); } Loading Loading @@ -494,7 +506,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApis) { returnStatus = mMediaCas->setSessionPrivateData(streamSessionId, hidlPvtData); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { returnStatus = mDescramblerBase->setMediaCasSession(sessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); Loading @@ -502,6 +514,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApis) { returnStatus = mDescramblerBase->setMediaCasSession(streamSessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } hidl_vec<uint8_t> hidlNullPtr; hidlNullPtr.setToExternal(static_cast<uint8_t*>(nullptr), 0); Loading Loading @@ -543,6 +556,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApis) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { EXPECT_FALSE(mDescramblerBase->requiresSecureDecoderComponent("video/avc")); sp<IDescrambler> descrambler; Loading @@ -556,16 +570,18 @@ TEST_P(MediaCasHidlTest, TestClearKeyApis) { EXPECT_EQ(Status::OK, descrambleStatus); ASSERT_NE(nullptr, dataMemory.get()); uint8_t* opBuffer = static_cast<uint8_t*>(static_cast<void*>(dataMemory->unsecurePointer())); uint8_t* opBuffer = static_cast<uint8_t*>(static_cast<void*>(dataMemory->unsecurePointer())); int compareResult = memcmp(static_cast<const void*>(opBuffer), static_cast<const void*>(kOutRefBinaryBuffer), sizeof(kOutRefBinaryBuffer)); memcmp(static_cast<const void*>(opBuffer), static_cast<const void*>(kOutRefBinaryBuffer), sizeof(kOutRefBinaryBuffer)); EXPECT_EQ(0, compareResult); returnStatus = mDescramblerBase->release(); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } returnStatus = mMediaCas->release(); EXPECT_TRUE(returnStatus.isOk()); Loading @@ -590,6 +606,7 @@ TEST_P(MediaCasHidlTest, TestClearKeySessionClosedAfterRelease) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { returnStatus = mDescramblerBase->setMediaCasSession(sessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::ERROR_CAS_SESSION_NOT_OPENED, returnStatus); Loading @@ -598,6 +615,7 @@ TEST_P(MediaCasHidlTest, TestClearKeySessionClosedAfterRelease) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::ERROR_CAS_SESSION_NOT_OPENED, returnStatus); } } TEST_P(MediaCasHidlTest, TestClearKeyErrors) { description("Test that invalid call sequences fail with expected error codes"); Loading Loading @@ -654,6 +672,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyErrors) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::ERROR_CAS_UNKNOWN, returnStatus); if (mIsTestDescrambler) { /* * Test MediaDescrambler error codes */ Loading Loading @@ -687,6 +706,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyErrors) { // Verify that requiresSecureDecoderComponent handles invalid mime EXPECT_FALSE(mDescramblerBase->requiresSecureDecoderComponent("bad")); } } TEST_P(MediaCasHidlTest, TestClearKeyOobFails) { description("Test that oob descramble request fails with expected error"); Loading @@ -700,9 +720,11 @@ TEST_P(MediaCasHidlTest, TestClearKeyOobFails) { std::vector<uint8_t> sessionId; ASSERT_TRUE(openCasSession(&sessionId)); if (mIsTestDescrambler) { returnStatus = mDescramblerBase->setMediaCasSession(sessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } hidl_vec<uint8_t> hidlEcm; hidlEcm.setToExternal(const_cast<uint8_t*>(kEcmBinaryBuffer), sizeof(kEcmBinaryBuffer)); Loading @@ -710,126 +732,104 @@ TEST_P(MediaCasHidlTest, TestClearKeyOobFails) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { sp<IDescrambler> descrambler = IDescrambler::castFrom(mDescramblerBase); ASSERT_NE(nullptr, descrambler.get()); Status descrambleStatus = Status::OK; // test invalid src buffer offset ASSERT_TRUE(descrambleTestOobInput( descrambler, &descrambleStatus, { .subSamples = kSubSamples, ASSERT_TRUE( descrambleTestOobInput(descrambler, &descrambleStatus, {.subSamples = kSubSamples, .numSubSamples = sizeof(kSubSamples) / sizeof(SubSample), .imemSizeActual = sizeof(kInBinaryBuffer), .imemOffset = 0xcccccc, .imemSize = sizeof(kInBinaryBuffer), .srcOffset = 0, .dstOffset = 0 })); .dstOffset = 0})); EXPECT_EQ(Status::BAD_VALUE, descrambleStatus); // test invalid src buffer size ASSERT_TRUE(descrambleTestOobInput( descrambler, &descrambleStatus, { .subSamples = kSubSamples, ASSERT_TRUE( descrambleTestOobInput(descrambler, &descrambleStatus, {.subSamples = kSubSamples, .numSubSamples = sizeof(kSubSamples) / sizeof(SubSample), .imemSizeActual = sizeof(kInBinaryBuffer), .imemOffset = 0, .imemSize = 0xcccccc, .srcOffset = 0, .dstOffset = 0 })); .dstOffset = 0})); EXPECT_EQ(Status::BAD_VALUE, descrambleStatus); // test invalid src buffer size ASSERT_TRUE(descrambleTestOobInput( descrambler, &descrambleStatus, { .subSamples = kSubSamples, ASSERT_TRUE( descrambleTestOobInput(descrambler, &descrambleStatus, {.subSamples = kSubSamples, .numSubSamples = sizeof(kSubSamples) / sizeof(SubSample), .imemSizeActual = sizeof(kInBinaryBuffer), .imemOffset = 1, .imemSize = (uint64_t)-1, .srcOffset = 0, .dstOffset = 0 })); .dstOffset = 0})); EXPECT_EQ(Status::BAD_VALUE, descrambleStatus); // test invalid srcOffset ASSERT_TRUE(descrambleTestOobInput( descrambler, &descrambleStatus, { .subSamples = kSubSamples, ASSERT_TRUE( descrambleTestOobInput(descrambler, &descrambleStatus, {.subSamples = kSubSamples, .numSubSamples = sizeof(kSubSamples) / sizeof(SubSample), .imemSizeActual = sizeof(kInBinaryBuffer), .imemOffset = 0, .imemSize = sizeof(kInBinaryBuffer), .srcOffset = 0xcccccc, .dstOffset = 0 })); .dstOffset = 0})); EXPECT_EQ(Status::BAD_VALUE, descrambleStatus); // test invalid dstOffset ASSERT_TRUE(descrambleTestOobInput( descrambler, &descrambleStatus, { .subSamples = kSubSamples, ASSERT_TRUE( descrambleTestOobInput(descrambler, &descrambleStatus, {.subSamples = kSubSamples, .numSubSamples = sizeof(kSubSamples) / sizeof(SubSample), .imemSizeActual = sizeof(kInBinaryBuffer), .imemOffset = 0, .imemSize = sizeof(kInBinaryBuffer), .srcOffset = 0, .dstOffset = 0xcccccc })); .dstOffset = 0xcccccc})); EXPECT_EQ(Status::BAD_VALUE, descrambleStatus); // test detection of oob subsample sizes const SubSample invalidSubSamples1[] = {{162, 0}, {0, 184}, {0, 0xdddddd}}; const SubSample invalidSubSamples1[] = {{162, 0}, {0, 184}, {0, 0xdddddd}}; ASSERT_TRUE(descrambleTestOobInput( descrambler, &descrambleStatus, { .subSamples = invalidSubSamples1, descrambler, &descrambleStatus, {.subSamples = invalidSubSamples1, .numSubSamples = sizeof(invalidSubSamples1) / sizeof(SubSample), .imemSizeActual = sizeof(kInBinaryBuffer), .imemOffset = 0, .imemSize = sizeof(kInBinaryBuffer), .srcOffset = 0, .dstOffset = 0 })); .dstOffset = 0})); EXPECT_EQ(Status::BAD_VALUE, descrambleStatus); // test detection of overflowing subsample sizes const SubSample invalidSubSamples2[] = {{162, 0}, {0, 184}, {2, (uint32_t)-1}}; const SubSample invalidSubSamples2[] = {{162, 0}, {0, 184}, {2, (uint32_t)-1}}; ASSERT_TRUE(descrambleTestOobInput( descrambler, &descrambleStatus, { .subSamples = invalidSubSamples2, descrambler, &descrambleStatus, {.subSamples = invalidSubSamples2, .numSubSamples = sizeof(invalidSubSamples2) / sizeof(SubSample), .imemSizeActual = sizeof(kInBinaryBuffer), .imemOffset = 0, .imemSize = sizeof(kInBinaryBuffer), .srcOffset = 0, .dstOffset = 0 })); .dstOffset = 0})); EXPECT_EQ(Status::BAD_VALUE, descrambleStatus); returnStatus = mDescramblerBase->release(); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } returnStatus = mMediaCas->release(); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); Loading
cas/1.1/vts/functional/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ cc_test { static_libs: [ "android.hardware.cas@1.0", "android.hardware.cas@1.1", "android.hardware.cas@1.2", "android.hardware.cas.native@1.0", "android.hidl.allocator@1.0", "android.hidl.memory@1.0", Loading
cas/1.1/vts/functional/VtsHalCasV1_1TargetTest.cpp +41 −24 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <android/hardware/cas/1.1/ICas.h> #include <android/hardware/cas/1.1/ICasListener.h> #include <android/hardware/cas/1.1/IMediaCasService.h> #include <android/hardware/cas/1.2/IMediaCasService.h> #include <android/hardware/cas/native/1.0/IDescrambler.h> #include <android/hardware/cas/native/1.0/types.h> #include <binder/MemoryDealer.h> Loading Loading @@ -255,6 +256,10 @@ void MediaCasListener::testSessionEventEcho(sp<ICas>& mediaCas, const hidl_vec<u class MediaCasHidlTest : public testing::TestWithParam<std::string> { public: virtual void SetUp() override { if (android::hardware::cas::V1_2::IMediaCasService::getService(GetParam()) == nullptr) { ALOGI("Descrambler is need to be tested before cas@1.2."); mIsTestDescrambler = true; } mService = IMediaCasService::getService(GetParam()); ASSERT_NE(mService, nullptr); } Loading @@ -269,6 +274,7 @@ class MediaCasHidlTest : public testing::TestWithParam<std::string> { sp<ICas> mMediaCas; sp<IDescramblerBase> mDescramblerBase; sp<MediaCasListener> mCasListener; bool mIsTestDescrambler = false; typedef struct _OobInputTestParams { const SubSample* subSamples; uint32_t numSubSamples; Loading Loading @@ -311,8 +317,15 @@ class MediaCasHidlTest : public testing::TestWithParam<std::string> { auto descramblerStatus = mService->createDescrambler(caSystemId); if (!descramblerStatus.isOk()) { if (mIsTestDescrambler) { return ::testing::AssertionFailure(); } else { ALOGI("Skip Descrambler test since it's not required in cas@1.2."); return ::testing::AssertionSuccess(); } } mIsTestDescrambler = true; mDescramblerBase = descramblerStatus; return ::testing::AssertionResult(mDescramblerBase != nullptr); } Loading Loading @@ -468,6 +481,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { returnStatus = mDescramblerBase->setMediaCasSession(sessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); Loading @@ -475,6 +489,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { returnStatus = mDescramblerBase->setMediaCasSession(streamSessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } hidl_vec<uint8_t> hidlNullPtr; hidlNullPtr.setToExternal(static_cast<uint8_t*>(nullptr), 0); Loading Loading @@ -518,6 +533,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { EXPECT_FALSE(mDescramblerBase->requiresSecureDecoderComponent("video/avc")); sp<IDescrambler> descrambler; Loading @@ -541,6 +557,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { returnStatus = mDescramblerBase->release(); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } returnStatus = mMediaCas->release(); EXPECT_TRUE(returnStatus.isOk()); Loading
cas/1.2/vts/functional/VtsHalCasV1_2TargetTest.cpp +32 −25 Original line number Diff line number Diff line Loading @@ -311,6 +311,7 @@ class MediaCasHidlTest : public testing::TestWithParam<std::string> { sp<ICas> mMediaCas; sp<IDescramblerBase> mDescramblerBase; sp<MediaCasListener> mCasListener; bool mIsTestDescrambler = false; typedef struct _OobInputTestParams { const SubSample* subSamples; uint32_t numSubSamples; Loading Loading @@ -355,8 +356,11 @@ class MediaCasHidlTest : public testing::TestWithParam<std::string> { auto descramblerStatus = mService->createDescrambler(caSystemId); if (!descramblerStatus.isOk()) { return ::testing::AssertionFailure(); ALOGI("Skip Descrambler test since it's not required in cas@1.2."); return ::testing::AssertionSuccess(); } mIsTestDescrambler = true; mDescramblerBase = descramblerStatus; return ::testing::AssertionResult(mDescramblerBase != nullptr); } Loading Loading @@ -512,6 +516,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { returnStatus = mDescramblerBase->setMediaCasSession(sessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); Loading @@ -519,7 +524,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { returnStatus = mDescramblerBase->setMediaCasSession(streamSessionId); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } hidl_vec<uint8_t> hidlNullPtr; hidlNullPtr.setToExternal(static_cast<uint8_t*>(nullptr), 0); returnStatus = mMediaCas->refreshEntitlements(3, hidlNullPtr); Loading Loading @@ -566,6 +571,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); if (mIsTestDescrambler) { EXPECT_FALSE(mDescramblerBase->requiresSecureDecoderComponent("video/avc")); sp<IDescrambler> descrambler; Loading @@ -589,6 +595,7 @@ TEST_P(MediaCasHidlTest, TestClearKeyApisWithSession) { returnStatus = mDescramblerBase->release(); EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); } returnStatus = mMediaCas->release(); EXPECT_TRUE(returnStatus.isOk()); Loading