diff options
Diffstat (limited to 'src/mongo/db/storage/mmap_v1/record_access_tracker_test.cpp')
-rw-r--r-- | src/mongo/db/storage/mmap_v1/record_access_tracker_test.cpp | 198 |
1 files changed, 99 insertions, 99 deletions
diff --git a/src/mongo/db/storage/mmap_v1/record_access_tracker_test.cpp b/src/mongo/db/storage/mmap_v1/record_access_tracker_test.cpp index 92147a24c55..7cc766f2b13 100644 --- a/src/mongo/db/storage/mmap_v1/record_access_tracker_test.cpp +++ b/src/mongo/db/storage/mmap_v1/record_access_tracker_test.cpp @@ -35,108 +35,108 @@ using namespace mongo; namespace { - const void* pointerOf(int data) { - return reinterpret_cast<const void*>(data); - } - - TEST(RecordAccessTrackerTest, TouchRecordTwice) { - RecordAccessTracker tracker; - tracker.disableSystemBlockInMemCheck(); - - const void* record = pointerOf(0x10003); - - ASSERT_FALSE(tracker.checkAccessedAndMark(record)); - ASSERT_TRUE(tracker.checkAccessedAndMark(record)); - } - - TEST(RecordAccessTrackerTest, TouchPageTwice) { - RecordAccessTracker tracker; - tracker.disableSystemBlockInMemCheck(); - - const void* firstRecord = pointerOf(0x10003); - const void* secondRecord = pointerOf(0x10004); - - ASSERT_FALSE(tracker.checkAccessedAndMark(firstRecord)); - ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecord)); - ASSERT_TRUE(tracker.checkAccessedAndMark(firstRecord)); - ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecord)); - } - - TEST(RecordAccessTrackerTest, TouchTwoPagesTwice) { - RecordAccessTracker tracker; - tracker.disableSystemBlockInMemCheck(); - - const void* firstRecordFirstPage = pointerOf(0x11000); - const void* secondRecordFirstPage = pointerOf(0x11100); - - const void* firstRecordSecondPage = pointerOf(0x12000); - const void* secondRecordSecondPage = pointerOf(0x12100); - - ASSERT_FALSE(tracker.checkAccessedAndMark(firstRecordFirstPage)); - ASSERT_FALSE(tracker.checkAccessedAndMark(firstRecordSecondPage)); - ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecordFirstPage)); - ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecordSecondPage)); - } - - // Tests RecordAccessTracker::reset(). - TEST(RecordAccessTrackerTest, TouchTwoPagesTwiceWithReset) { - RecordAccessTracker tracker; - tracker.disableSystemBlockInMemCheck(); - - const void* firstRecordFirstPage = pointerOf(0x11000); - const void* secondRecordFirstPage = pointerOf(0x11100); - - const void* firstRecordSecondPage = pointerOf(0x12000); - const void* secondRecordSecondPage = pointerOf(0x12100); - - ASSERT_FALSE(tracker.checkAccessedAndMark(firstRecordFirstPage)); - ASSERT_FALSE(tracker.checkAccessedAndMark(firstRecordSecondPage)); - ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecordFirstPage)); - ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecordSecondPage)); - - // Now reset and make sure things look as though we have a fresh RecordAccessTracker. - tracker.reset(); - ASSERT_FALSE(tracker.checkAccessedAndMark(firstRecordFirstPage)); - ASSERT_FALSE(tracker.checkAccessedAndMark(firstRecordSecondPage)); - ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecordFirstPage)); - ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecordSecondPage)); +const void* pointerOf(int data) { + return reinterpret_cast<const void*>(data); +} + +TEST(RecordAccessTrackerTest, TouchRecordTwice) { + RecordAccessTracker tracker; + tracker.disableSystemBlockInMemCheck(); + + const void* record = pointerOf(0x10003); + + ASSERT_FALSE(tracker.checkAccessedAndMark(record)); + ASSERT_TRUE(tracker.checkAccessedAndMark(record)); +} + +TEST(RecordAccessTrackerTest, TouchPageTwice) { + RecordAccessTracker tracker; + tracker.disableSystemBlockInMemCheck(); + + const void* firstRecord = pointerOf(0x10003); + const void* secondRecord = pointerOf(0x10004); + + ASSERT_FALSE(tracker.checkAccessedAndMark(firstRecord)); + ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecord)); + ASSERT_TRUE(tracker.checkAccessedAndMark(firstRecord)); + ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecord)); +} + +TEST(RecordAccessTrackerTest, TouchTwoPagesTwice) { + RecordAccessTracker tracker; + tracker.disableSystemBlockInMemCheck(); + + const void* firstRecordFirstPage = pointerOf(0x11000); + const void* secondRecordFirstPage = pointerOf(0x11100); + + const void* firstRecordSecondPage = pointerOf(0x12000); + const void* secondRecordSecondPage = pointerOf(0x12100); + + ASSERT_FALSE(tracker.checkAccessedAndMark(firstRecordFirstPage)); + ASSERT_FALSE(tracker.checkAccessedAndMark(firstRecordSecondPage)); + ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecordFirstPage)); + ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecordSecondPage)); +} + +// Tests RecordAccessTracker::reset(). +TEST(RecordAccessTrackerTest, TouchTwoPagesTwiceWithReset) { + RecordAccessTracker tracker; + tracker.disableSystemBlockInMemCheck(); + + const void* firstRecordFirstPage = pointerOf(0x11000); + const void* secondRecordFirstPage = pointerOf(0x11100); + + const void* firstRecordSecondPage = pointerOf(0x12000); + const void* secondRecordSecondPage = pointerOf(0x12100); + + ASSERT_FALSE(tracker.checkAccessedAndMark(firstRecordFirstPage)); + ASSERT_FALSE(tracker.checkAccessedAndMark(firstRecordSecondPage)); + ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecordFirstPage)); + ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecordSecondPage)); + + // Now reset and make sure things look as though we have a fresh RecordAccessTracker. + tracker.reset(); + ASSERT_FALSE(tracker.checkAccessedAndMark(firstRecordFirstPage)); + ASSERT_FALSE(tracker.checkAccessedAndMark(firstRecordSecondPage)); + ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecordFirstPage)); + ASSERT_TRUE(tracker.checkAccessedAndMark(secondRecordSecondPage)); +} + +// Tests RecordAccessTracker::markAccessed(). +TEST(RecordAccessTrackerTest, AccessTest) { + RecordAccessTracker tracker; + tracker.disableSystemBlockInMemCheck(); + + // Mark the first page in superpage 3 as accessed. + const void* record = pointerOf(0x30000); + tracker.markAccessed(record); + + // Test that all remaining addresses in the page give true when asked whether they are + // recently accessed. + for (int i = 0x30001; i < 0x31000; i++) { + const void* touchedPageRecord = pointerOf(i); + ASSERT_TRUE(tracker.checkAccessedAndMark(touchedPageRecord)); } - - // Tests RecordAccessTracker::markAccessed(). - TEST(RecordAccessTrackerTest, AccessTest) { - RecordAccessTracker tracker; - tracker.disableSystemBlockInMemCheck(); - - // Mark the first page in superpage 3 as accessed. - const void* record = pointerOf(0x30000); - tracker.markAccessed(record); - - // Test that all remaining addresses in the page give true when asked whether they are - // recently accessed. - for (int i = 0x30001; i < 0x31000; i++) { - const void* touchedPageRecord = pointerOf(i); - ASSERT_TRUE(tracker.checkAccessedAndMark(touchedPageRecord)); - } +} + +// Touch pages in 128 separate superpages, and make sure that they all are reported as +// recently accessed. +TEST(RecordAccessTrackerTest, Access128Superpages) { + RecordAccessTracker tracker; + tracker.disableSystemBlockInMemCheck(); + + // Touch the pages. + for (int i = 0x00000; i < 0x800000; i += 0x10000) { + const void* touchedPageRecord = pointerOf(i); + tracker.markAccessed(touchedPageRecord); } - // Touch pages in 128 separate superpages, and make sure that they all are reported as - // recently accessed. - TEST(RecordAccessTrackerTest, Access128Superpages) { - RecordAccessTracker tracker; - tracker.disableSystemBlockInMemCheck(); - - // Touch the pages. - for (int i = 0x00000; i < 0x800000; i += 0x10000) { - const void* touchedPageRecord = pointerOf(i); - tracker.markAccessed(touchedPageRecord); - } - - // Ensure we know that the pages have all been touched. - for (int i = 0x00000; i < 0x800000; i += 0x10000) { - // It should be fine if there is an offset of, say, 0xA, into the page. - const void* touchedPageRecord = pointerOf(i + 0xA); - ASSERT_TRUE(tracker.checkAccessedAndMark(touchedPageRecord)); - } + // Ensure we know that the pages have all been touched. + for (int i = 0x00000; i < 0x800000; i += 0x10000) { + // It should be fine if there is an offset of, say, 0xA, into the page. + const void* touchedPageRecord = pointerOf(i + 0xA); + ASSERT_TRUE(tracker.checkAccessedAndMark(touchedPageRecord)); } +} } // namespace |