Add a unit test to Ignorable manfiest record (#4964)
Summary: https://github.com/facebook/rocksdb/pull/4960 introduced ignorable manfiest record. Adding a test to it. Pull Request resolved: https://github.com/facebook/rocksdb/pull/4964 Differential Revision: D14012667 Pulled By: siying fbshipit-source-id: e5f10ecc68dec2716e178d44f0fe2b76c3d857ef
This commit is contained in:
parent
08809f5e6c
commit
5d9a623e2c
@ -229,6 +229,10 @@ class VersionEdit {
|
||||
|
||||
uint64_t log_number() { return log_number_; }
|
||||
|
||||
bool has_next_file_number() const { return has_next_file_number_; }
|
||||
|
||||
uint64_t next_file_number() const { return next_file_number_; }
|
||||
|
||||
// Add the specified file at the specified number.
|
||||
// REQUIRES: This version has not been saved (see VersionSet::SaveTo)
|
||||
// REQUIRES: "smallest" and "largest" are smallest and largest keys in file
|
||||
|
@ -8,6 +8,7 @@
|
||||
// found in the LICENSE file. See the AUTHORS file for names of contributors.
|
||||
|
||||
#include "db/version_edit.h"
|
||||
#include "util/coding.h"
|
||||
#include "util/sync_point.h"
|
||||
#include "util/testharness.h"
|
||||
|
||||
@ -197,6 +198,47 @@ TEST_F(VersionEditTest, AtomicGroupTest) {
|
||||
TestEncodeDecode(edit);
|
||||
}
|
||||
|
||||
TEST_F(VersionEditTest, IgnorableField) {
|
||||
VersionEdit ve;
|
||||
std::string encoded;
|
||||
|
||||
// Size of ignorable field is too large
|
||||
PutVarint32Varint64(&encoded, 2 /* kLogNumber */, 66);
|
||||
// This is a customized ignorable tag
|
||||
PutVarint32Varint64(&encoded,
|
||||
0x2710 /* A field with kTagSafeIgnoreMask set */,
|
||||
5 /* fieldlength 5 */);
|
||||
encoded += "abc"; // Only fills 3 bytes,
|
||||
ASSERT_NOK(ve.DecodeFrom(encoded));
|
||||
|
||||
encoded.clear();
|
||||
// Error when seeing unidentified tag that is not ignorable
|
||||
PutVarint32Varint64(&encoded, 2 /* kLogNumber */, 66);
|
||||
// This is a customized ignorable tag
|
||||
PutVarint32Varint64(&encoded, 666 /* A field with kTagSafeIgnoreMask unset */,
|
||||
3 /* fieldlength 3 */);
|
||||
encoded += "abc"; // Fill 3 bytes
|
||||
PutVarint32Varint64(&encoded, 3 /* next file number */, 88);
|
||||
ASSERT_NOK(ve.DecodeFrom(encoded));
|
||||
|
||||
// Safely ignore an identified but safely ignorable entry
|
||||
encoded.clear();
|
||||
PutVarint32Varint64(&encoded, 2 /* kLogNumber */, 66);
|
||||
// This is a customized ignorable tag
|
||||
PutVarint32Varint64(&encoded,
|
||||
0x2710 /* A field with kTagSafeIgnoreMask set */,
|
||||
3 /* fieldlength 3 */);
|
||||
encoded += "abc"; // Fill 3 bytes
|
||||
PutVarint32Varint64(&encoded, 3 /* kNextFileNumber */, 88);
|
||||
|
||||
ASSERT_OK(ve.DecodeFrom(encoded));
|
||||
|
||||
ASSERT_TRUE(ve.has_log_number());
|
||||
ASSERT_TRUE(ve.has_next_file_number());
|
||||
ASSERT_EQ(66, ve.log_number());
|
||||
ASSERT_EQ(88, ve.next_file_number());
|
||||
}
|
||||
|
||||
} // namespace rocksdb
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
|
Loading…
Reference in New Issue
Block a user