Browse Source

[2850] Add CREATE over corrupted file testcase

Mukund Sivaraman 12 years ago
parent
commit
eda6761d26
1 changed files with 40 additions and 0 deletions
  1. 40 0
      src/lib/datasrc/tests/memory/zone_table_segment_mapped_unittest.cc

+ 40 - 0
src/lib/datasrc/tests/memory/zone_table_segment_mapped_unittest.cc

@@ -480,6 +480,46 @@ TEST_F(ZoneTableSegmentMappedTest, resetFailedMissingHeader) {
     EXPECT_TRUE(verifyData(ztable_segment_->getMemorySegment()));
 }
 
+TEST_F(ZoneTableSegmentMappedTest, resetCreateOverCorruptedFile) {
+    setupMappedFiles();
+
+    // Corrupt mapped file 1.
+    scoped_ptr<MemorySegmentMapped> segment
+        (new MemorySegmentMapped(mapped_file,
+                                 MemorySegmentMapped::OPEN_OR_CREATE));
+    EXPECT_TRUE(verifyData(*segment));
+    corruptChecksum(*segment);
+    segment.reset();
+
+    // Resetting mapped file 1 in CREATE mode over a corrupted file
+    // should pass.
+    EXPECT_NO_THROW(ztable_segment_->reset(ZoneTableSegment::CREATE,
+                                           config_params_));
+
+    // Check for the old data in the segment. It should not be present
+    // (as we opened the segment in CREATE mode).
+    EXPECT_FALSE(verifyData(ztable_segment_->getMemorySegment()));
+
+    // Now try the same with missing checksum.
+    setupMappedFiles();
+
+    // Corrupt mapped file 1.
+    segment.reset(new MemorySegmentMapped(mapped_file,
+                                          MemorySegmentMapped::OPEN_OR_CREATE));
+    EXPECT_TRUE(verifyData(*segment));
+    deleteChecksum(*segment);
+    segment.reset();
+
+    // Resetting mapped file 1 in CREATE mode over a file missing
+    // checksum should pass.
+    EXPECT_NO_THROW(ztable_segment_->reset(ZoneTableSegment::CREATE,
+                                           config_params_));
+
+    // Check for the old data in the segment. It should not be present
+    // (as we opened the segment in CREATE mode).
+    EXPECT_FALSE(verifyData(ztable_segment_->getMemorySegment()));
+}
+
 TEST_F(ZoneTableSegmentMappedTest, resetHeaderUninitialized) {
     // This should throw as we haven't called reset() yet.
     EXPECT_THROW(ztable_segment_->resetHeader(), isc::InvalidOperation);