diff options
Diffstat (limited to 'libunwindstack/tests/MemoryBufferTest.cpp')
-rw-r--r-- | libunwindstack/tests/MemoryBufferTest.cpp | 61 |
1 files changed, 42 insertions, 19 deletions
diff --git a/libunwindstack/tests/MemoryBufferTest.cpp b/libunwindstack/tests/MemoryBufferTest.cpp index 91b20dd..d375f0f 100644 --- a/libunwindstack/tests/MemoryBufferTest.cpp +++ b/libunwindstack/tests/MemoryBufferTest.cpp @@ -27,14 +27,12 @@ namespace unwindstack { class MemoryBufferTest : public ::testing::Test { protected: - void SetUp() override { - ResetLogs(); - memory_.reset(new MemoryBuffer); - } + void SetUp() override { ResetLogs(); } std::unique_ptr<MemoryBuffer> memory_; }; TEST_F(MemoryBufferTest, empty) { + memory_.reset(new MemoryBuffer(0)); ASSERT_EQ(0U, memory_->Size()); std::vector<uint8_t> buffer(1024); ASSERT_FALSE(memory_->ReadFully(0, buffer.data(), 1)); @@ -43,7 +41,7 @@ TEST_F(MemoryBufferTest, empty) { } TEST_F(MemoryBufferTest, write_read) { - ASSERT_TRUE(memory_->Resize(256)); + memory_.reset(new MemoryBuffer(256)); ASSERT_EQ(256U, memory_->Size()); ASSERT_TRUE(memory_->GetPtr(0) != nullptr); ASSERT_TRUE(memory_->GetPtr(1) != nullptr); @@ -63,7 +61,8 @@ TEST_F(MemoryBufferTest, write_read) { } TEST_F(MemoryBufferTest, read_failures) { - ASSERT_TRUE(memory_->Resize(100)); + memory_.reset(new MemoryBuffer(100)); + ASSERT_EQ(100U, memory_->Size()); std::vector<uint8_t> buffer(200); ASSERT_FALSE(memory_->ReadFully(0, buffer.data(), 101)); ASSERT_FALSE(memory_->ReadFully(100, buffer.data(), 1)); @@ -73,14 +72,14 @@ TEST_F(MemoryBufferTest, read_failures) { } TEST_F(MemoryBufferTest, read_failure_overflow) { - ASSERT_TRUE(memory_->Resize(100)); + memory_.reset(new MemoryBuffer(100)); + ASSERT_EQ(100U, memory_->Size()); std::vector<uint8_t> buffer(200); - ASSERT_FALSE(memory_->ReadFully(UINT64_MAX - 100, buffer.data(), 200)); } -TEST_F(MemoryBufferTest, Read) { - ASSERT_TRUE(memory_->Resize(256)); +TEST_F(MemoryBufferTest, read_checks) { + memory_.reset(new MemoryBuffer(256)); ASSERT_EQ(256U, memory_->Size()); ASSERT_TRUE(memory_->GetPtr(0) != nullptr); ASSERT_TRUE(memory_->GetPtr(1) != nullptr); @@ -99,19 +98,43 @@ TEST_F(MemoryBufferTest, Read) { } } -TEST_F(MemoryBufferTest, Resize) { - ASSERT_TRUE(memory_->Resize(256)); - - ASSERT_TRUE(memory_->Resize(1024)); +TEST_F(MemoryBufferTest, resize_too_large) { + memory_.reset(new MemoryBuffer(SIZE_MAX)); + ASSERT_EQ(0U, memory_->Size()); } -extern "C" void __hwasan_init() __attribute__((weak)); +TEST_F(MemoryBufferTest, read_checks_non_zero_offset) { + memory_.reset(new MemoryBuffer(256, 1000)); + ASSERT_EQ(256U, memory_->Size()); + ASSERT_TRUE(memory_->GetPtr(0) == nullptr); + ASSERT_TRUE(memory_->GetPtr(1) == nullptr); + ASSERT_TRUE(memory_->GetPtr(999) == nullptr); + ASSERT_TRUE(memory_->GetPtr(1000) != nullptr); + ASSERT_TRUE(memory_->GetPtr(1255) != nullptr); + ASSERT_TRUE(memory_->GetPtr(1256) == nullptr); + + uint8_t* data = memory_->GetPtr(1000); + for (size_t i = 0; i < memory_->Size(); i++) { + data[i] = i; + } -TEST_F(MemoryBufferTest, Resize_too_large) { - if (&__hwasan_init != 0) { - GTEST_SKIP() << "Tests fails hwasan allocation size too large check."; + std::vector<uint8_t> buffer(memory_->Size()); + ASSERT_EQ(128U, memory_->Read(1128, buffer.data(), buffer.size())); + for (size_t i = 0; i < 128; i++) { + ASSERT_EQ(128 + i, buffer[i]) << "Failed at byte " << i; } - ASSERT_FALSE(memory_->Resize(SIZE_MAX)); +} + +TEST_F(MemoryBufferTest, reads_non_zero_offset) { + memory_.reset(new MemoryBuffer(256, 1000)); + ASSERT_EQ(256U, memory_->Size()); + std::vector<uint8_t> buffer(256); + ASSERT_EQ(0U, memory_->Read(900, buffer.data(), buffer.size())); + ASSERT_EQ(0U, memory_->Read(999, buffer.data(), buffer.size())); + ASSERT_EQ(256U, memory_->Read(1000, buffer.data(), buffer.size())); + ASSERT_EQ(246U, memory_->Read(1010, buffer.data(), buffer.size())); + ASSERT_EQ(1U, memory_->Read(1255, buffer.data(), buffer.size())); + ASSERT_EQ(0U, memory_->Read(1256, buffer.data(), buffer.size())); } } // namespace unwindstack |