last_status is the MemBlock's last status it is going to reach other than MemBlockStatus::DISABLED.
| 37 | // last_status is the MemBlock's last status it is going to reach other than |
| 38 | // MemBlockStatus::DISABLED. |
| 39 | void DiskFileTest::ValidateMemBlockStatus(MemBlockStatus last_status) { |
| 40 | const int block_id = 0; |
| 41 | const int64_t block_size = 1024; |
| 42 | bool expect_reserved = last_status >= MemBlockStatus::RESERVED; |
| 43 | bool expect_alloc = last_status >= MemBlockStatus::ALLOC; |
| 44 | bool reserved = false; |
| 45 | bool alloc = false; |
| 46 | MemBlock block(block_id); |
| 47 | ASSERT_TRUE(block.data() == nullptr); |
| 48 | ASSERT_TRUE(block.IsStatus(MemBlockStatus::UNINIT)); |
| 49 | if (last_status == MemBlockStatus::UNINIT) goto end; |
| 50 | block.SetStatus(MemBlockStatus::RESERVED); |
| 51 | ASSERT_TRUE(block.IsStatus(MemBlockStatus::RESERVED)); |
| 52 | if (last_status == MemBlockStatus::RESERVED) goto end; |
| 53 | { |
| 54 | unique_lock<SpinLock> read_buffer_lock(*(block.GetLock())); |
| 55 | EXPECT_OK(block.AllocLocked(read_buffer_lock, block_size)); |
| 56 | } |
| 57 | ASSERT_TRUE(block.IsStatus(MemBlockStatus::ALLOC)); |
| 58 | ASSERT_TRUE(block.data() != nullptr); |
| 59 | if (last_status == MemBlockStatus::ALLOC) goto end; |
| 60 | ASSERT_EQ(last_status, MemBlockStatus::WRITTEN); |
| 61 | memset(block.data(), 1, block_size); |
| 62 | block.SetStatus(MemBlockStatus::WRITTEN); |
| 63 | ASSERT_TRUE(block.IsStatus(MemBlockStatus::WRITTEN)); |
| 64 | for (int i = 0; i < block_size; i++) { |
| 65 | EXPECT_EQ(block.data()[i], 1); |
| 66 | } |
| 67 | end: |
| 68 | block.Delete(&reserved, &alloc); |
| 69 | ASSERT_EQ(reserved, expect_reserved); |
| 70 | ASSERT_EQ(alloc, expect_alloc); |
| 71 | ASSERT_TRUE(block.IsStatus(MemBlockStatus::DISABLED)); |
| 72 | ASSERT_TRUE(block.data() == nullptr); |
| 73 | } |
| 74 | |
| 75 | void DiskFileTest::ValidateMemBlockStatusTransition(MemBlock& block, |
| 76 | MemBlockStatus old_status, MemBlockStatus new_status, bool expect_success) { |