summaryrefslogtreecommitdiff
path: root/libunwindstack/tests/MemoryBufferTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libunwindstack/tests/MemoryBufferTest.cpp')
-rw-r--r--libunwindstack/tests/MemoryBufferTest.cpp61
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