diff --git a/cas/1.0/vts/functional/Android.bp b/cas/1.0/vts/functional/Android.bp index 872bb2c55a..e1e09e9ce8 100644 --- a/cas/1.0/vts/functional/Android.bp +++ b/cas/1.0/vts/functional/Android.bp @@ -25,5 +25,8 @@ cc_test { "android.hidl.memory@1.0", "libhidlmemory", ], + shared_libs: [ + "libbinder", + ], } diff --git a/cas/1.0/vts/functional/VtsHalCasV1_0TargetTest.cpp b/cas/1.0/vts/functional/VtsHalCasV1_0TargetTest.cpp index 062ee2038e..4a6ccd7645 100644 --- a/cas/1.0/vts/functional/VtsHalCasV1_0TargetTest.cpp +++ b/cas/1.0/vts/functional/VtsHalCasV1_0TargetTest.cpp @@ -25,12 +25,10 @@ #include #include #include -#include -#include +#include #include #include #include -#include #include #include @@ -69,9 +67,9 @@ using android::hardware::hidl_handle; using android::hardware::hidl_memory; using android::hardware::Return; using android::hardware::cas::V1_0::Status; -using android::hidl::allocator::V1_0::IAllocator; -using android::hidl::memory::V1_0::IMemory; -using android::hidl::memory::V1_0::IMapper; +using android::IMemory; +using android::IMemoryHeap; +using android::MemoryDealer; using android::Mutex; using android::sp; @@ -230,7 +228,7 @@ class MediaCasHidlTest : public ::testing::VtsHalHidlTargetTestBase { ::testing::AssertionResult openCasSession(std::vector* sessionId); ::testing::AssertionResult descrambleTestInputBuffer(const sp& descrambler, Status* descrambleStatus, - hidl_memory* hidlInMemory); + sp* hidlInMemory); }; ::testing::AssertionResult MediaCasHidlTest::createCasPlugin(int32_t caSystemId) { @@ -271,34 +269,48 @@ class MediaCasHidlTest : public ::testing::VtsHalHidlTargetTestBase { } ::testing::AssertionResult MediaCasHidlTest::descrambleTestInputBuffer( - const sp& descrambler, Status* descrambleStatus, hidl_memory* hidlInMemory) { + const sp& descrambler, Status* descrambleStatus, sp* inMemory) { hidl_vec hidlSubSamples; hidlSubSamples.setToExternal(const_cast(kSubSamples), (sizeof(kSubSamples) / sizeof(SubSample)), false /*own*/); - sp allocator = IAllocator::getService("ashmem"); - if (nullptr == allocator.get()) { + + sp dealer = new MemoryDealer(sizeof(kInBinaryBuffer), "vts-cas"); + if (nullptr == dealer.get()) { + ALOGE("couldn't get MemoryDealer!"); return ::testing::AssertionFailure(); } - bool allocateStatus; - auto returnStatus = - allocator->allocate(sizeof(kInBinaryBuffer), [&](bool status, hidl_memory const& mem) { - allocateStatus = status; - *hidlInMemory = mem; - }); - if (!returnStatus.isOk() || !allocateStatus) { + sp mem = dealer->allocate(sizeof(kInBinaryBuffer)); + if (nullptr == mem.get()) { + ALOGE("couldn't allocate IMemory!"); return ::testing::AssertionFailure(); } - android::sp inMemory = mapMemory(*hidlInMemory); - if (nullptr == inMemory.get()) { + *inMemory = mem; + + // build hidl_memory from memory heap + ssize_t offset; + size_t size; + sp heap = mem->getMemory(&offset, &size); + if (nullptr == heap.get()) { + ALOGE("couldn't get memory heap!"); return ::testing::AssertionFailure(); } - uint8_t* ipBuffer = static_cast(static_cast(inMemory->getPointer())); + native_handle_t* nativeHandle = native_handle_create(1, 0); + if (!nativeHandle) { + ALOGE("failed to create native handle!"); + return ::testing::AssertionFailure(); + } + nativeHandle->data[0] = heap->getHeapID(); + + uint8_t* ipBuffer = static_cast(static_cast(mem->pointer())); memcpy(ipBuffer, kInBinaryBuffer, sizeof(kInBinaryBuffer)); SharedBuffer srcBuffer = { - .heapBase = *hidlInMemory, .offset = (uint64_t)0, .size = sizeof(kInBinaryBuffer)}; + .heapBase = hidl_memory("ashmem", hidl_handle(nativeHandle), heap->getSize()), + .offset = (uint64_t) offset, + .size = (uint64_t) size + }; DestinationBuffer dstBuffer; dstBuffer.type = BufferType::SHARED_MEMORY; @@ -461,14 +473,13 @@ TEST_F(MediaCasHidlTest, TestClearKeyApis) { ASSERT_NE(descrambler, nullptr); Status descrambleStatus = Status::OK; - hidl_memory hidlDataMemory; + sp dataMemory; - ASSERT_TRUE(descrambleTestInputBuffer(descrambler, &descrambleStatus, &hidlDataMemory)); + ASSERT_TRUE(descrambleTestInputBuffer(descrambler, &descrambleStatus, &dataMemory)); EXPECT_EQ(Status::OK, descrambleStatus); - android::sp outMemory = mapMemory(hidlDataMemory); - ASSERT_NE(nullptr, outMemory.get()); - uint8_t* opBuffer = static_cast(static_cast(outMemory->getPointer())); + ASSERT_NE(nullptr, dataMemory.get()); + uint8_t* opBuffer = static_cast(static_cast(dataMemory->pointer())); int compareResult = memcmp(static_cast(opBuffer), static_cast(kOutRefBinaryBuffer), @@ -572,9 +583,9 @@ TEST_F(MediaCasHidlTest, TestClearKeyErrors) { ASSERT_NE(descrambler, nullptr); Status descrambleStatus = Status::OK; - hidl_memory hidlInMemory; + sp dataMemory; - ASSERT_TRUE(descrambleTestInputBuffer(descrambler, &descrambleStatus, &hidlInMemory)); + ASSERT_TRUE(descrambleTestInputBuffer(descrambler, &descrambleStatus, &dataMemory)); EXPECT_EQ(Status::ERROR_CAS_DECRYPT_UNIT_NOT_INITIALIZED, descrambleStatus); // Now set a valid session, should still fail because no valid ecm is processed @@ -582,7 +593,7 @@ TEST_F(MediaCasHidlTest, TestClearKeyErrors) { EXPECT_TRUE(returnStatus.isOk()); EXPECT_EQ(Status::OK, returnStatus); - ASSERT_TRUE(descrambleTestInputBuffer(descrambler, &descrambleStatus, &hidlInMemory)); + ASSERT_TRUE(descrambleTestInputBuffer(descrambler, &descrambleStatus, &dataMemory)); EXPECT_EQ(Status::ERROR_CAS_DECRYPT, descrambleStatus); }