summaryrefslogtreecommitdiff
path: root/src/mongo/s/comparable_chunk_version_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s/comparable_chunk_version_test.cpp')
-rw-r--r--src/mongo/s/comparable_chunk_version_test.cpp133
1 files changed, 130 insertions, 3 deletions
diff --git a/src/mongo/s/comparable_chunk_version_test.cpp b/src/mongo/s/comparable_chunk_version_test.cpp
index 941d9bad080..8c1fa71fce2 100644
--- a/src/mongo/s/comparable_chunk_version_test.cpp
+++ b/src/mongo/s/comparable_chunk_version_test.cpp
@@ -29,8 +29,7 @@
#include "mongo/platform/basic.h"
-#include "mongo/s/catalog_cache.h"
-#include "mongo/s/chunk_version.h"
+#include "mongo/s/chunk_manager.h"
#include "mongo/unittest/unittest.h"
namespace mongo {
@@ -95,9 +94,15 @@ TEST(ComparableChunkVersionTest, VersionLessSameEpoch) {
ASSERT_FALSE(version2 > version3);
}
+TEST(ComparableChunkVersionTest, DefaultConstructedVersionsAreEqual) {
+ const ComparableChunkVersion defaultVersion1{}, defaultVersion2{};
+ ASSERT(defaultVersion1 == defaultVersion2);
+ ASSERT_FALSE(defaultVersion1 < defaultVersion2);
+ ASSERT_FALSE(defaultVersion1 > defaultVersion2);
+}
+
TEST(ComparableChunkVersionTest, DefaultConstructedVersionIsAlwaysLess) {
const ComparableChunkVersion defaultVersion{};
- ASSERT_EQ(defaultVersion.getLocalSequenceNum(), 0);
const auto version1 =
ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion(0, 0, OID::gen()));
ASSERT(defaultVersion != version1);
@@ -105,5 +110,127 @@ TEST(ComparableChunkVersionTest, DefaultConstructedVersionIsAlwaysLess) {
ASSERT_FALSE(defaultVersion > version1);
}
+TEST(ComparableChunkVersionTest, DefaultConstructedVersionIsAlwaysLessThanUnsharded) {
+ const ComparableChunkVersion defaultVersion{};
+ const auto version1 =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion::UNSHARDED());
+ ASSERT(defaultVersion != version1);
+ ASSERT(defaultVersion < version1);
+ ASSERT_FALSE(defaultVersion > version1);
+}
+
+TEST(ComparableChunkVersionTest, DefaultConstructedVersionIsAlwaysLessThanDropped) {
+ const ComparableChunkVersion defaultVersion{};
+ const auto version1 =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion::DROPPED());
+ ASSERT(defaultVersion != version1);
+ ASSERT(defaultVersion < version1);
+ ASSERT_FALSE(defaultVersion > version1);
+}
+
+TEST(ComparableChunkVersionTest, UnshardedAndDroppedAreEqual) {
+ const auto version1 =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion::UNSHARDED());
+ const auto version2 =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion::DROPPED());
+ const auto version3 =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion::UNSHARDED());
+ const auto version4 =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion::DROPPED());
+ ASSERT(version1 == version2);
+ ASSERT(version1 == version3);
+ ASSERT(version2 == version4);
+}
+
+TEST(ComparableChunkVersionTest, NoChunksAreDifferent) {
+ const auto oid = OID::gen();
+ const auto version1 =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion(0, 0, oid));
+ const auto version2 =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion(0, 0, oid));
+ ASSERT(version1 != version2);
+ ASSERT(version1 < version2);
+ ASSERT_FALSE(version1 > version2);
+}
+
+TEST(ComparableChunkVersionTest, NoChunksCompareBySequenceNum) {
+ const auto oid = OID::gen();
+ const auto version1 =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion(1, 0, oid));
+ const auto noChunkSV1 =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion(0, 0, oid));
+
+ ASSERT(version1 != noChunkSV1);
+ ASSERT(noChunkSV1 > version1);
+
+ const auto noChunkSV2 =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion(0, 0, oid));
+
+ ASSERT(noChunkSV1 != noChunkSV2);
+ ASSERT_FALSE(noChunkSV1 > noChunkSV2);
+ ASSERT(noChunkSV2 > noChunkSV1);
+
+ const auto version2 =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion(2, 0, oid));
+
+ ASSERT(version2 != noChunkSV2);
+ ASSERT(version2 > noChunkSV2);
+}
+
+TEST(ComparableChunkVersionTest, NoChunksGreaterThanUnshardedBySequenceNum) {
+ const auto unsharded =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion::UNSHARDED());
+ const auto noChunkSV =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion(0, 0, OID::gen()));
+
+ ASSERT(noChunkSV != unsharded);
+ ASSERT(noChunkSV > unsharded);
+}
+
+TEST(ComparableChunkVersionTest, UnshardedGreaterThanNoChunksBySequenceNum) {
+ const auto noChunkSV =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion(0, 0, OID::gen()));
+ const auto unsharded =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion::UNSHARDED());
+
+ ASSERT(noChunkSV != unsharded);
+ ASSERT(unsharded > noChunkSV);
+}
+
+TEST(ComparableChunkVersionTest, NoChunksGreaterThanDefault) {
+ const auto noChunkSV =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion(0, 0, OID::gen()));
+ const ComparableChunkVersion defaultVersion{};
+
+ ASSERT(noChunkSV != defaultVersion);
+ ASSERT(noChunkSV > defaultVersion);
+}
+
+TEST(ComparableChunkVersionTest, ForcedRefreshSequenceNumber) {
+ auto oid = OID::gen();
+ const ComparableChunkVersion defaultVersionBeforeForce;
+ const auto versionBeforeForce =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion(100, 0, oid));
+
+ const auto forcedRefreshVersion =
+ ComparableChunkVersion::makeComparableChunkVersionForForcedRefresh();
+
+ const auto versionAfterForce =
+ ComparableChunkVersion::makeComparableChunkVersion(ChunkVersion(100, 0, oid));
+ const ComparableChunkVersion defaultVersionAfterForce;
+
+ ASSERT(defaultVersionBeforeForce != forcedRefreshVersion);
+ ASSERT(defaultVersionBeforeForce < forcedRefreshVersion);
+
+ ASSERT(versionBeforeForce != forcedRefreshVersion);
+ ASSERT(versionBeforeForce < forcedRefreshVersion);
+
+ ASSERT(versionAfterForce != forcedRefreshVersion);
+ ASSERT(versionAfterForce > forcedRefreshVersion);
+
+ ASSERT(defaultVersionAfterForce != forcedRefreshVersion);
+ ASSERT(defaultVersionAfterForce < forcedRefreshVersion);
+}
+
} // namespace
} // namespace mongo