diff options
author | Tom Cherry <tomcherry@google.com> | 2020-06-25 15:02:35 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-06-25 15:02:35 +0000 |
commit | 3f1381fbcd170f40f22d8b38e735d795e4a755fa (patch) | |
tree | e0f97b79d0d9fbfe771b1d67813b84a0a6e6cadb /logd/SerializedFlushToStateTest.cpp | |
parent | b3a10e52201e3602bf4c4a4120cace63e0bb2304 (diff) | |
parent | c58d1e4aec4d59b112fa1cc2aa99ed4eb0a25010 (diff) |
Merge changes I9638e90b,Ib2636dfc am: c58d1e4aec
Original change: https://android-review.googlesource.com/c/platform/system/core/+/1349344
Change-Id: I54b5873749ec46f6489d6e6f8224759239b0b25e
Diffstat (limited to 'logd/SerializedFlushToStateTest.cpp')
-rw-r--r-- | logd/SerializedFlushToStateTest.cpp | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/logd/SerializedFlushToStateTest.cpp b/logd/SerializedFlushToStateTest.cpp index a1d21ac138..f4515c8e3b 100644 --- a/logd/SerializedFlushToStateTest.cpp +++ b/logd/SerializedFlushToStateTest.cpp @@ -89,7 +89,6 @@ class SerializedFlushToStateTest : public testing::Test { for (uint32_t mask = 0; mask < max_mask; ++mask) { auto state = SerializedFlushToState{sequence, mask}; state.InitializeLogs(log_chunks_); - state.CheckForNewLogs(); TestReading(sequence, mask, state); } } @@ -109,7 +108,6 @@ class SerializedFlushToStateTest : public testing::Test { state.InitializeLogs(log_chunks_); int loop_count = 0; while (write_logs(loop_count++)) { - state.CheckForNewLogs(); TestReading(sequence, mask, state); sequence_numbers_per_buffer_.clear(); } @@ -149,7 +147,7 @@ class SerializedFlushToStateTest : public testing::Test { // Add a chunk with the given messages to the a given log buffer. Keep track of the sequence // numbers for future validation. Optionally mark the block as having finished writing. - void AddChunkWithMessages(int buffer, bool finish_writing, + void AddChunkWithMessages(bool finish_writing, int buffer, const std::vector<std::string>& messages) { auto chunk = SerializedLogChunk{kChunkSize}; for (const auto& message : messages) { @@ -252,3 +250,41 @@ TEST_F(SerializedFlushToStateTest, future_writes) { TestAllReadingWithFutureMessages(write_logs); } + +TEST_F(SerializedFlushToStateTest, no_dangling_references) { + AddChunkWithMessages(true, 0, {"1st", "2nd"}); + AddChunkWithMessages(true, 0, {"3rd", "4th"}); + + auto state = SerializedFlushToState{1, kLogMaskAll}; + state.InitializeLogs(log_chunks_); + + ASSERT_EQ(log_chunks_[0].size(), 2U); + auto first_chunk = log_chunks_[0].begin(); + auto second_chunk = std::next(first_chunk); + + ASSERT_TRUE(state.HasUnreadLogs()); + auto first_log = state.PopNextUnreadLog(); + EXPECT_STREQ(first_log.entry->msg(), "1st"); + EXPECT_EQ(first_chunk->reader_ref_count(), 1U); + EXPECT_EQ(second_chunk->reader_ref_count(), 0U); + + ASSERT_TRUE(state.HasUnreadLogs()); + auto second_log = state.PopNextUnreadLog(); + EXPECT_STREQ(second_log.entry->msg(), "2nd"); + EXPECT_EQ(first_chunk->reader_ref_count(), 1U); + EXPECT_EQ(second_chunk->reader_ref_count(), 0U); + + ASSERT_TRUE(state.HasUnreadLogs()); + auto third_log = state.PopNextUnreadLog(); + EXPECT_STREQ(third_log.entry->msg(), "3rd"); + EXPECT_EQ(first_chunk->reader_ref_count(), 0U); + EXPECT_EQ(second_chunk->reader_ref_count(), 1U); + + ASSERT_TRUE(state.HasUnreadLogs()); + auto fourth_log = state.PopNextUnreadLog(); + EXPECT_STREQ(fourth_log.entry->msg(), "4th"); + EXPECT_EQ(first_chunk->reader_ref_count(), 0U); + EXPECT_EQ(second_chunk->reader_ref_count(), 1U); + + EXPECT_FALSE(state.HasUnreadLogs()); +}
\ No newline at end of file |