diff options
author | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2018-06-20 19:34:16 -0400 |
---|---|---|
committer | Kaloian Manassiev <kaloian.manassiev@mongodb.com> | 2018-06-22 14:04:18 -0400 |
commit | 5dabb36c0b930f03f8da5cc1b572f3edcf4cff58 (patch) | |
tree | 8360063842d5e14cc82b21d370dcde8499df10b9 /src/mongo/s/chunk_version_test.cpp | |
parent | cfb0b9ff7ca1a20c3c37edd2baf6e5c509c65aca (diff) | |
download | mongo-5dabb36c0b930f03f8da5cc1b572f3edcf4cff58.tar.gz |
SERVER-35691 Cleanup the ChunkVersion serialization/deserialization code
Diffstat (limited to 'src/mongo/s/chunk_version_test.cpp')
-rw-r--r-- | src/mongo/s/chunk_version_test.cpp | 93 |
1 files changed, 74 insertions, 19 deletions
diff --git a/src/mongo/s/chunk_version_test.cpp b/src/mongo/s/chunk_version_test.cpp index 4bea7f466bd..38512c0df38 100644 --- a/src/mongo/s/chunk_version_test.cpp +++ b/src/mongo/s/chunk_version_test.cpp @@ -28,45 +28,100 @@ #include "mongo/platform/basic.h" -#include "mongo/db/jsobj.h" #include "mongo/s/chunk_version.h" #include "mongo/unittest/unittest.h" namespace mongo { namespace { -TEST(Parsing, EpochIsOptional) { +using unittest::assertGet; + +TEST(ChunkVersionParsing, ToFromBSONRoundtrip) { + ChunkVersion version(1, 2, OID::gen()); + const auto roundTripVersion = assertGet(ChunkVersion::parseWithField( + [&] { + BSONObjBuilder builder; + version.appendWithField(&builder, "testVersionField"); + return builder.obj(); + }(), + "testVersionField")); + + ASSERT_EQ(version, roundTripVersion); +} + +TEST(ChunkVersionParsing, ToFromBSONLegacyRoundtrip) { + ChunkVersion version(1, 2, OID::gen()); + const auto roundTripVersion = assertGet(ChunkVersion::parseLegacyWithField( + [&] { + BSONObjBuilder builder; + version.appendLegacyWithField(&builder, "testVersionField"); + return builder.obj(); + }(), + "testVersionField")); + + ASSERT_EQ(version, roundTripVersion); +} + +TEST(ChunkVersionParsing, FromBSON) { + const OID oid = OID::gen(); + ChunkVersion chunkVersionComplete = assertGet(ChunkVersion::parseWithField( + BSON("testVersionField" << BSON_ARRAY(Timestamp(Seconds(2), 3) << oid)), + "testVersionField")); + + ASSERT(chunkVersionComplete.epoch().isSet()); + ASSERT_EQ(oid, chunkVersionComplete.epoch()); + ASSERT_EQ(2, chunkVersionComplete.majorVersion()); + ASSERT_EQ(3, chunkVersionComplete.minorVersion()); +} + +TEST(ChunkVersionParsing, FromBSONMissingEpoch) { + ASSERT_THROWS_CODE( + uassertStatusOK(ChunkVersion::parseWithField( + BSON("testVersionField" << BSON_ARRAY(Timestamp(Seconds(2), 3))), "testVersionField")), + AssertionException, + ErrorCodes::TypeMismatch); +} + +TEST(ChunkVersionParsing, FromBSONMissingTimestamp) { const OID oid = OID::gen(); - bool canParse = false; + ASSERT_THROWS_CODE(uassertStatusOK(ChunkVersion::parseWithField(BSON("testVersionField" << oid), + "testVersionField")), + AssertionException, + ErrorCodes::TypeMismatch); +} + +TEST(ChunkVersionParsing, FromBSONLegacy) { + const OID oid = OID::gen(); + ChunkVersion chunkVersionComplete = assertGet(ChunkVersion::parseLegacyWithField( + BSON("lastmod" << Timestamp(Seconds(2), 3) << "lastmodEpoch" << oid), "lastmod")); - ChunkVersion chunkVersionComplete = ChunkVersion::fromBSON( - BSON("lastmod" << Timestamp(Seconds(2), 3) << "lastmodEpoch" << oid), "lastmod", &canParse); - ASSERT(canParse); ASSERT(chunkVersionComplete.epoch().isSet()); - ASSERT(chunkVersionComplete.epoch() == oid); + ASSERT_EQ(oid, chunkVersionComplete.epoch()); ASSERT_EQ(2, chunkVersionComplete.majorVersion()); ASSERT_EQ(3, chunkVersionComplete.minorVersion()); +} + +TEST(ChunkVersionParsing, FromBSONLegacyEpochIsOptional) { + ChunkVersion chunkVersionNoEpoch = assertGet( + ChunkVersion::parseLegacyWithField(BSON("lastmod" << Timestamp(Seconds(3), 4)), "lastmod")); - canParse = false; - ChunkVersion chunkVersionNoEpoch = - ChunkVersion::fromBSON(BSON("lastmod" << Timestamp(Seconds(3), 4)), "lastmod", &canParse); - ASSERT(canParse); ASSERT(!chunkVersionNoEpoch.epoch().isSet()); ASSERT_EQ(3, chunkVersionNoEpoch.majorVersion()); ASSERT_EQ(4, chunkVersionNoEpoch.minorVersion()); } -TEST(Comparison, StrictEqual) { +TEST(ChunkVersionComparison, EqualityOperators) { OID epoch = OID::gen(); - ASSERT(ChunkVersion(3, 1, epoch).isStrictlyEqualTo(ChunkVersion(3, 1, epoch))); - ASSERT(!ChunkVersion(3, 1, epoch).isStrictlyEqualTo(ChunkVersion(3, 1, OID()))); - ASSERT(!ChunkVersion(3, 1, OID()).isStrictlyEqualTo(ChunkVersion(3, 1, epoch))); - ASSERT(ChunkVersion(3, 1, OID()).isStrictlyEqualTo(ChunkVersion(3, 1, OID()))); - ASSERT(!ChunkVersion(4, 2, epoch).isStrictlyEqualTo(ChunkVersion(4, 1, epoch))); + ASSERT_EQ(ChunkVersion(3, 1, epoch), ChunkVersion(3, 1, epoch)); + ASSERT_EQ(ChunkVersion(3, 1, OID()), ChunkVersion(3, 1, OID())); + + ASSERT_NE(ChunkVersion(3, 1, epoch), ChunkVersion(3, 1, OID())); + ASSERT_NE(ChunkVersion(3, 1, OID()), ChunkVersion(3, 1, epoch)); + ASSERT_NE(ChunkVersion(4, 2, epoch), ChunkVersion(4, 1, epoch)); } -TEST(Comparison, OlderThan) { +TEST(ChunkVersionComparison, OlderThan) { OID epoch = OID::gen(); ASSERT(ChunkVersion(3, 1, epoch).isOlderThan(ChunkVersion(4, 1, epoch))); @@ -83,5 +138,5 @@ TEST(Comparison, OlderThan) { ASSERT(!ChunkVersion(3, 1, epoch).isOlderThan(ChunkVersion(3, 1, epoch))); } -} // unnamed namespace +} // namespace } // namespace mongo |