Index: dm-bht_unittest.cc |
diff --git a/dm-bht_unittest.cc b/dm-bht_unittest.cc |
index bf8c74c442e82418d36f4b3d1aa4c1bf6f289e6a..96323b4527e705efcd56d6c2438249df7a0637d3 100644 |
--- a/dm-bht_unittest.cc |
+++ b/dm-bht_unittest.cc |
@@ -107,9 +107,7 @@ class MemoryBhtTest : public ::testing::Test { |
const char *digest_algorithm) { |
NewBht(depth, total_blocks, digest_algorithm); |
- u8 data[PAGE_SIZE]; |
- // Store all the block hashes of blocks of 0. |
- memset(reinterpret_cast<void *>(data), 0, sizeof(data)); |
+ u8 data[PAGE_SIZE] = { 0 }; |
unsigned int blocks = total_blocks; |
do { |
EXPECT_EQ(dm_bht_store_block(bht_.get(), blocks - 1, data), 0); |
@@ -151,16 +149,8 @@ TEST_F(MemoryBhtTest, CreateThenVerifyOk) { |
// Set the root hash for a 0-filled image |
static const char kRootDigest[] = |
"45d65d6f9e5a962f4d80b5f1bd7a918152251c27bdad8c5f52b590c129833372"; |
- // This should match what dm_bht_store_block computed earlier. |
- static const char kZeroDigest[] = |
- "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7"; |
- u8 digest[(sizeof(kZeroDigest) - 1) >> 1]; |
- // TODO(wad) write a test for hex_to_bin and bin_to_hex |
- unsigned int digest_size = strlen(kZeroDigest) >> 1; |
- |
- dm_bht_hex_to_bin(digest, |
- reinterpret_cast<const u8 *>(kZeroDigest), |
- digest_size); |
+ // A page of all zeros |
+ static const char kZeroPage[PAGE_SIZE] = { 0 }; |
SetupBht(2, total_blocks, "sha256"); |
dm_bht_set_root_hexdigest(bht_.get(), |
@@ -168,7 +158,7 @@ TEST_F(MemoryBhtTest, CreateThenVerifyOk) { |
for (unsigned int blocks = 0; blocks < total_blocks; ++blocks) { |
DLOG(INFO) << "verifying block: " << blocks; |
- EXPECT_EQ(0, dm_bht_verify_block(bht_.get(), blocks, digest, digest_size)); |
+ EXPECT_EQ(0, dm_bht_verify_block(bht_.get(), blocks, kZeroPage)); |
} |
EXPECT_EQ(0, dm_bht_destroy(bht_.get())); |
@@ -179,16 +169,8 @@ TEST_F(MemoryBhtTest, CreateThenVerifyMultipleLevels) { |
// Set the root hash for a 0-filled image |
static const char kRootDigest[] = |
"c86619624d3456f711dbb94d4ad79a4b029f6fd3b5a4a90b155c856bf5b3409b"; |
- // This should match what dm_bht_store_block computed earlier. |
- static const char kZeroDigest[] = |
- "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7"; |
- u8 digest[(sizeof(kZeroDigest) - 1) >> 1]; |
- // TODO(wad) write a test for hex_to_bin and bin_to_hex |
- unsigned int digest_size = strlen(kZeroDigest) >> 1; |
- |
- dm_bht_hex_to_bin(digest, |
- reinterpret_cast<const u8 *>(kZeroDigest), |
- digest_size); |
+ // A page of all zeros |
+ static const char kZeroPage[PAGE_SIZE] = { 0 }; |
SetupBht(4, total_blocks, "sha256"); |
dm_bht_set_root_hexdigest(bht_.get(), |
@@ -196,7 +178,7 @@ TEST_F(MemoryBhtTest, CreateThenVerifyMultipleLevels) { |
for (unsigned int blocks = 0; blocks < total_blocks; ++blocks) { |
DLOG(INFO) << "verifying block: " << blocks; |
- EXPECT_EQ(0, dm_bht_verify_block(bht_.get(), blocks, digest, digest_size)); |
+ EXPECT_EQ(0, dm_bht_verify_block(bht_.get(), blocks, kZeroPage)); |
} |
EXPECT_EQ(0, dm_bht_destroy(bht_.get())); |
@@ -207,16 +189,8 @@ TEST_F(MemoryBhtTest, CreateThenVerifyOddCount) { |
// Set the root hash for a 0-filled image |
static const char kRootDigest[] = |
"c78d187c430465bd7831fe4908247b6ab5107e3a826d933b71e85aa9a932e03c"; |
- // This should match what dm_bht_store_block computed earlier. |
- static const char kZeroDigest[] = |
- "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7"; |
- u8 digest[(sizeof(kZeroDigest) - 1) >> 1]; |
- // TODO(wad) write a test for hex_to_bin and bin_to_hex |
- unsigned int digest_size = strlen(kZeroDigest) >> 1; |
- |
- dm_bht_hex_to_bin(digest, |
- reinterpret_cast<const u8 *>(kZeroDigest), |
- digest_size); |
+ // A page of all zeros |
+ static const char kZeroPage[PAGE_SIZE] = { 0 }; |
SetupBht(4, total_blocks, "sha256"); |
dm_bht_set_root_hexdigest(bht_.get(), |
@@ -224,15 +198,17 @@ TEST_F(MemoryBhtTest, CreateThenVerifyOddCount) { |
for (unsigned int blocks = 0; blocks < total_blocks; ++blocks) { |
DLOG(INFO) << "verifying block: " << blocks; |
- EXPECT_EQ(0, dm_bht_verify_block(bht_.get(), blocks, digest, digest_size)); |
+ EXPECT_EQ(0, dm_bht_verify_block(bht_.get(), blocks, kZeroPage)); |
} |
EXPECT_EQ(0, dm_bht_destroy(bht_.get())); |
} |
-TEST_F(MemoryBhtTest, CreateThenVerifyBad) { |
+TEST_F(MemoryBhtTest, CreateThenVerifyBadHashBlock) { |
static const unsigned int total_blocks = 16384; |
SetupBht(2, total_blocks, "sha256"); |
+ // A page of all zeros |
+ static const char kZeroPage[PAGE_SIZE] = { 0 }; |
// Set the root hash for a 0-filled image |
static const char kRootDigest[] = |
"45d65d6f9e5a962f4d80b5f1bd7a918152251c27bdad8c5f52b590c129833372"; |
@@ -241,43 +217,51 @@ TEST_F(MemoryBhtTest, CreateThenVerifyBad) { |
// TODO(wad) add tests for partial tree validity/verification |
- // Corrupt one block value |
+ // Corrupt one has hblock |
static const unsigned int kBadBlock = 256; |
u8 data[PAGE_SIZE]; |
memset(reinterpret_cast<void *>(data), 'A', sizeof(data)); |
EXPECT_EQ(dm_bht_store_block(bht_.get(), kBadBlock, data), 0); |
- // This should match what dm_bht_store_block computed earlier. |
- static const char kZeroDigest[] = |
- "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7"; |
- u8 digest[(sizeof(kZeroDigest) - 1) >> 1]; |
- // TODO(wad) write a test for hex_to_bin and bin_to_hex |
- unsigned int digest_size = strlen(kZeroDigest) >> 1; |
- dm_bht_hex_to_bin(digest, |
- reinterpret_cast<const u8 *>(kZeroDigest), |
- digest_size); |
- |
// Attempt to verify both the bad block and all the neighbors. |
- EXPECT_LT(dm_bht_verify_block(bht_.get(), kBadBlock + 1, digest, digest_size), |
- 0); |
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), kBadBlock + 1, kZeroPage), 0); |
- EXPECT_LT(dm_bht_verify_block(bht_.get(), kBadBlock + 2, digest, digest_size), |
- 0); |
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), kBadBlock + 2, kZeroPage), 0); |
EXPECT_LT(dm_bht_verify_block(bht_.get(), kBadBlock + (bht_->node_count / 2), |
- digest, digest_size), |
+ kZeroPage), |
0); |
- EXPECT_LT(dm_bht_verify_block(bht_.get(), kBadBlock, digest, digest_size), 0); |
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), kBadBlock, kZeroPage), 0); |
// Verify that the prior entry is untouched and still safe |
- EXPECT_EQ(dm_bht_verify_block(bht_.get(), kBadBlock - 1, digest, digest_size), |
- 0); |
+ EXPECT_EQ(dm_bht_verify_block(bht_.get(), kBadBlock - 1, kZeroPage), 0); |
// Same for the next entry |
EXPECT_EQ(dm_bht_verify_block(bht_.get(), kBadBlock + bht_->node_count, |
- digest, digest_size), |
+ kZeroPage), |
0); |
EXPECT_EQ(0, dm_bht_destroy(bht_.get())); |
} |
+ |
+TEST_F(MemoryBhtTest, CreateThenVerifyBadDataBlock) { |
+ static const unsigned int total_blocks = 384; |
+ SetupBht(2, total_blocks, "sha256"); |
+ // Set the root hash for a 0-filled image |
+ static const char kRootDigest[] = |
+ "45d65d6f9e5a962f4d80b5f1bd7a918152251c27bdad8c5f52b590c129833372"; |
+ dm_bht_set_root_hexdigest(bht_.get(), |
+ reinterpret_cast<const u8 *>(kRootDigest)); |
+ // A corrupt page |
+ static const u8 kBadPage[PAGE_SIZE] = { 'A' }; |
+ |
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), 0, kBadPage), 0); |
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), 127, kBadPage), 0); |
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), 128, kBadPage), 0); |
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), 255, kBadPage), 0); |
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), 256, kBadPage), 0); |
+ EXPECT_LT(dm_bht_verify_block(bht_.get(), 383, kBadPage), 0); |
+ |
+ EXPECT_EQ(0, dm_bht_destroy(bht_.get())); |
+} |