diff options
author | Howard Chen <howardsoc@google.com> | 2018-01-10 17:26:13 +0800 |
---|---|---|
committer | Howard Chen <howardsoc@google.com> | 2018-01-19 10:25:03 +0800 |
commit | 280fa6ba39fc21b1e3c6f3193a91eb6590d3feff (patch) | |
tree | ad11840850fdd61325a27589d2a7137426d8b530 /libhidlcache | |
parent | 5a1767d7b6154ce2d26ecf3f282255593e1445a3 (diff) | |
download | libhidl-280fa6ba39fc21b1e3c6f3193a91eb6590d3feff.tar.gz |
Add test cases for MemoryDealer
Test memory allocate, deallocate and required alignment.
Test: hidl_cache_test/ internal master/ sailfish
Bug: 70309364
Change-Id: Id96eeac5e55cddf80588fb64a974a9bd7c57d2e5
Diffstat (limited to 'libhidlcache')
-rw-r--r-- | libhidlcache/libhidlcache_test.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/libhidlcache/libhidlcache_test.cpp b/libhidlcache/libhidlcache_test.cpp index ce21c6f..e514460 100644 --- a/libhidlcache/libhidlcache_test.cpp +++ b/libhidlcache/libhidlcache_test.cpp @@ -20,6 +20,7 @@ #include <android/hidl/memory/1.0/IMemory.h> #include <android/hidl/memory/token/1.0/IMemoryToken.h> #include <gtest/gtest.h> +#include <hidlcache/MemoryDealer.h> #include <hidlcache/mapping.h> #include <hidlmemory/HidlMemoryToken.h> #include <hidlmemory/mapping.h> @@ -105,6 +106,51 @@ TEST_F(HidlCacheTest, TestAll) { hardware::HidlCacheWhiteBoxTest(); } +TEST_F(HidlCacheTest, MemoryDealer) { + using ::android::hardware::HidlMemory; + using ::android::hardware::hidl_memory; + using ::android::hardware::HidlMemoryDealer; + using ::android::hidl::allocator::V1_0::IAllocator; + using ::android::hidl::memory::block::V1_0::MemoryBlock; + + sp<IAllocator> ashmemAllocator; + + ashmemAllocator = IAllocator::getService("ashmem"); + sp<HidlMemory> m1; + sp<HidlMemory> m2; + // test MemoryDealer + EXPECT_OK(ashmemAllocator->allocate(2048, [&m1](bool success, const hidl_memory& mem) { + ASSERT_TRUE(success); + m1 = HidlMemory::getInstance(mem); + })); + + EXPECT_OK(ashmemAllocator->allocate(4096, [&m2](bool success, const hidl_memory& mem) { + ASSERT_TRUE(success); + m2 = HidlMemory::getInstance(mem); + })); + + sp<HidlMemoryDealer> dealer; + + // m1 does not statisfy the alignment requirement and should fail. + dealer = HidlMemoryDealer::getInstance(*m1); + EXPECT_EQ(nullptr, dealer.get()); + + dealer = HidlMemoryDealer::getInstance(*m2); + EXPECT_NE(nullptr, dealer.get()); + + EXPECT_EQ(dealer->heap()->getSize(), 4096ULL); + MemoryBlock blk = dealer->allocate(1024); + EXPECT_TRUE(HidlMemoryDealer::isOk(blk)); + MemoryBlock blk2 = dealer->allocate(2048); + EXPECT_TRUE(HidlMemoryDealer::isOk(blk2)); + + MemoryBlock blk3 = dealer->allocate(2048); + EXPECT_FALSE(HidlMemoryDealer::isOk(blk3)); + dealer->deallocate(blk2.offset); + blk3 = dealer->allocate(2048); + EXPECT_TRUE(HidlMemoryDealer::isOk(blk3)); +} + int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); |