summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/replica_set_tag_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/repl/replica_set_tag_test.cpp')
-rw-r--r--src/mongo/db/repl/replica_set_tag_test.cpp238
1 files changed, 119 insertions, 119 deletions
diff --git a/src/mongo/db/repl/replica_set_tag_test.cpp b/src/mongo/db/repl/replica_set_tag_test.cpp
index 1a2bdf9e120..1d70ee39bbe 100644
--- a/src/mongo/db/repl/replica_set_tag_test.cpp
+++ b/src/mongo/db/repl/replica_set_tag_test.cpp
@@ -33,129 +33,129 @@ namespace mongo {
namespace repl {
namespace {
- template <typename T>
- class StreamPutter {
- public:
- StreamPutter(const ReplicaSetTagConfig& tagConfig, const T& item) :
- _tagConfig(&tagConfig), _item(&item) {}
- void put(std::ostream& os) const {
- _tagConfig->put(*_item, os);
- }
-
- private:
- const ReplicaSetTagConfig* _tagConfig;
- const T* _item;
- };
-
- template <typename T>
- StreamPutter<T> streamput(const ReplicaSetTagConfig& tagConfig, const T& item) {
- return StreamPutter<T>(tagConfig, item);
+template <typename T>
+class StreamPutter {
+public:
+ StreamPutter(const ReplicaSetTagConfig& tagConfig, const T& item)
+ : _tagConfig(&tagConfig), _item(&item) {}
+ void put(std::ostream& os) const {
+ _tagConfig->put(*_item, os);
}
- template <typename T>
- std::ostream& operator<<(std::ostream& os, const StreamPutter<T>& putter) {
- putter.put(os);
- return os;
+private:
+ const ReplicaSetTagConfig* _tagConfig;
+ const T* _item;
+};
+
+template <typename T>
+StreamPutter<T> streamput(const ReplicaSetTagConfig& tagConfig, const T& item) {
+ return StreamPutter<T>(tagConfig, item);
+}
+
+template <typename T>
+std::ostream& operator<<(std::ostream& os, const StreamPutter<T>& putter) {
+ putter.put(os);
+ return os;
+}
+
+TEST(ReplicaSetTagConfigTest, MakeAndFindTags) {
+ ReplicaSetTagConfig tagConfig;
+ ReplicaSetTag dcNY = tagConfig.makeTag("dc", "ny");
+ ReplicaSetTag dcRI = tagConfig.makeTag("dc", "ri");
+ ReplicaSetTag rack1 = tagConfig.makeTag("rack", "1");
+ ReplicaSetTag rack2 = tagConfig.makeTag("rack", "2");
+ ASSERT_TRUE(dcNY.isValid());
+ ASSERT_EQUALS("dc", tagConfig.getTagKey(dcNY));
+ ASSERT_EQUALS("ny", tagConfig.getTagValue(dcNY));
+ ASSERT_EQUALS("dc", tagConfig.getTagKey(dcRI));
+ ASSERT_EQUALS("ri", tagConfig.getTagValue(dcRI));
+ ASSERT_EQUALS("rack", tagConfig.getTagKey(rack1));
+ ASSERT_EQUALS("1", tagConfig.getTagValue(rack1));
+ ASSERT_EQUALS("rack", tagConfig.getTagKey(rack2));
+ ASSERT_EQUALS("2", tagConfig.getTagValue(rack2));
+
+ ASSERT_EQUALS(rack1.getKeyIndex(), rack2.getKeyIndex());
+ ASSERT_NOT_EQUALS(rack1.getKeyIndex(), dcRI.getKeyIndex());
+ ASSERT_NOT_EQUALS(rack1.getValueIndex(), rack2.getValueIndex());
+
+ ASSERT_TRUE(rack1 == tagConfig.makeTag("rack", "1"));
+ ASSERT_TRUE(rack1 == tagConfig.findTag("rack", "1"));
+ ASSERT_FALSE(tagConfig.findTag("rack", "7").isValid());
+ ASSERT_FALSE(tagConfig.findTag("country", "us").isValid());
+}
+
+class ReplicaSetTagMatchTest : public unittest::Test {
+public:
+ void setUp() {
+ dcNY = tagConfig.makeTag("dc", "ny");
+ dcVA = tagConfig.makeTag("dc", "va");
+ dcRI = tagConfig.makeTag("dc", "ri");
+ rack1 = tagConfig.makeTag("rack", "1");
+ rack2 = tagConfig.makeTag("rack", "2");
+ rack3 = tagConfig.makeTag("rack", "3");
+ rack4 = tagConfig.makeTag("rack", "4");
}
- TEST(ReplicaSetTagConfigTest, MakeAndFindTags) {
- ReplicaSetTagConfig tagConfig;
- ReplicaSetTag dcNY = tagConfig.makeTag("dc", "ny");
- ReplicaSetTag dcRI = tagConfig.makeTag("dc", "ri");
- ReplicaSetTag rack1 = tagConfig.makeTag("rack", "1");
- ReplicaSetTag rack2 = tagConfig.makeTag("rack", "2");
- ASSERT_TRUE(dcNY.isValid());
- ASSERT_EQUALS("dc", tagConfig.getTagKey(dcNY));
- ASSERT_EQUALS("ny", tagConfig.getTagValue(dcNY));
- ASSERT_EQUALS("dc", tagConfig.getTagKey(dcRI));
- ASSERT_EQUALS("ri", tagConfig.getTagValue(dcRI));
- ASSERT_EQUALS("rack", tagConfig.getTagKey(rack1));
- ASSERT_EQUALS("1", tagConfig.getTagValue(rack1));
- ASSERT_EQUALS("rack", tagConfig.getTagKey(rack2));
- ASSERT_EQUALS("2", tagConfig.getTagValue(rack2));
-
- ASSERT_EQUALS(rack1.getKeyIndex(), rack2.getKeyIndex());
- ASSERT_NOT_EQUALS(rack1.getKeyIndex(), dcRI.getKeyIndex());
- ASSERT_NOT_EQUALS(rack1.getValueIndex(), rack2.getValueIndex());
-
- ASSERT_TRUE(rack1 == tagConfig.makeTag("rack", "1"));
- ASSERT_TRUE(rack1 == tagConfig.findTag("rack", "1"));
- ASSERT_FALSE(tagConfig.findTag("rack", "7").isValid());
- ASSERT_FALSE(tagConfig.findTag("country", "us").isValid());
- }
-
- class ReplicaSetTagMatchTest : public unittest::Test {
- public:
- void setUp() {
- dcNY = tagConfig.makeTag("dc", "ny");
- dcVA = tagConfig.makeTag("dc", "va");
- dcRI = tagConfig.makeTag("dc", "ri");
- rack1 = tagConfig.makeTag("rack", "1");
- rack2 = tagConfig.makeTag("rack", "2");
- rack3 = tagConfig.makeTag("rack", "3");
- rack4 = tagConfig.makeTag("rack", "4");
- }
-
- protected:
- ReplicaSetTagConfig tagConfig;
- ReplicaSetTag dcNY;
- ReplicaSetTag dcVA;
- ReplicaSetTag dcRI;
- ReplicaSetTag rack1;
- ReplicaSetTag rack2;
- ReplicaSetTag rack3;
- ReplicaSetTag rack4;
- };
-
- TEST_F(ReplicaSetTagMatchTest, EmptyPatternAlwaysSatisfied) {
- ReplicaSetTagPattern pattern = tagConfig.makePattern();
- ASSERT_TRUE(ReplicaSetTagMatch(pattern).isSatisfied());
- ASSERT_OK(tagConfig.addTagCountConstraintToPattern(&pattern, "dc", 0));
- ASSERT_TRUE(ReplicaSetTagMatch(pattern).isSatisfied());
- }
-
- TEST_F(ReplicaSetTagMatchTest, SingleTagConstraint) {
- ReplicaSetTagPattern pattern = tagConfig.makePattern();
- ASSERT_OK(tagConfig.addTagCountConstraintToPattern(&pattern, "dc", 2));
- ReplicaSetTagMatch matcher(pattern);
- ASSERT_FALSE(matcher.isSatisfied());
- ASSERT_FALSE(matcher.update(dcVA)); // One DC alone won't satisfy "dc: 2".
- ASSERT_FALSE(matcher.update(rack2)); // Adding one rack won't satisfy.
- ASSERT_FALSE(matcher.update(rack3)); // Two racks won't satisfy "dc: 2".
- ASSERT_FALSE(matcher.update(dcVA)); // Same tag twice won't satisfy.
- ASSERT_TRUE(matcher.update(dcRI)); // Two DCs satisfies.
- ASSERT_TRUE(matcher.isSatisfied());
- ASSERT_TRUE(matcher.update(dcNY)); // Three DCs satisfies.
- ASSERT_TRUE(matcher.update(rack1)); // Once matcher is satisfied, it stays satisfied.
- }
-
- TEST_F(ReplicaSetTagMatchTest, MaskingConstraints) {
- // The highest count constraint for a tag key is the only one that matters.
- ReplicaSetTagPattern pattern = tagConfig.makePattern();
- ASSERT_OK(tagConfig.addTagCountConstraintToPattern(&pattern, "rack", 2));
- ASSERT_OK(tagConfig.addTagCountConstraintToPattern(&pattern, "rack", 3));
- ReplicaSetTagMatch matcher(pattern);
- ASSERT_FALSE(matcher.isSatisfied());
- ASSERT_FALSE(matcher.update(rack2));
- ASSERT_FALSE(matcher.update(rack3));
- ASSERT_FALSE(matcher.update(rack2));
- ASSERT_TRUE(matcher.update(rack1));
- }
-
- TEST_F(ReplicaSetTagMatchTest, MultipleConstraints) {
- ReplicaSetTagPattern pattern = tagConfig.makePattern();
- ASSERT_OK(tagConfig.addTagCountConstraintToPattern(&pattern, "dc", 3));
- ASSERT_OK(tagConfig.addTagCountConstraintToPattern(&pattern, "rack", 2));
- ReplicaSetTagMatch matcher(pattern);
- ASSERT_FALSE(matcher.isSatisfied());
- ASSERT_FALSE(matcher.update(dcVA));
- ASSERT_FALSE(matcher.update(rack2));
- ASSERT_FALSE(matcher.update(rack3));
- ASSERT_FALSE(matcher.update(dcVA));
- ASSERT_FALSE(matcher.update(dcRI));
- ASSERT_TRUE(matcher.update(dcNY));
- ASSERT_TRUE(matcher.isSatisfied());
- }
+protected:
+ ReplicaSetTagConfig tagConfig;
+ ReplicaSetTag dcNY;
+ ReplicaSetTag dcVA;
+ ReplicaSetTag dcRI;
+ ReplicaSetTag rack1;
+ ReplicaSetTag rack2;
+ ReplicaSetTag rack3;
+ ReplicaSetTag rack4;
+};
+
+TEST_F(ReplicaSetTagMatchTest, EmptyPatternAlwaysSatisfied) {
+ ReplicaSetTagPattern pattern = tagConfig.makePattern();
+ ASSERT_TRUE(ReplicaSetTagMatch(pattern).isSatisfied());
+ ASSERT_OK(tagConfig.addTagCountConstraintToPattern(&pattern, "dc", 0));
+ ASSERT_TRUE(ReplicaSetTagMatch(pattern).isSatisfied());
+}
+
+TEST_F(ReplicaSetTagMatchTest, SingleTagConstraint) {
+ ReplicaSetTagPattern pattern = tagConfig.makePattern();
+ ASSERT_OK(tagConfig.addTagCountConstraintToPattern(&pattern, "dc", 2));
+ ReplicaSetTagMatch matcher(pattern);
+ ASSERT_FALSE(matcher.isSatisfied());
+ ASSERT_FALSE(matcher.update(dcVA)); // One DC alone won't satisfy "dc: 2".
+ ASSERT_FALSE(matcher.update(rack2)); // Adding one rack won't satisfy.
+ ASSERT_FALSE(matcher.update(rack3)); // Two racks won't satisfy "dc: 2".
+ ASSERT_FALSE(matcher.update(dcVA)); // Same tag twice won't satisfy.
+ ASSERT_TRUE(matcher.update(dcRI)); // Two DCs satisfies.
+ ASSERT_TRUE(matcher.isSatisfied());
+ ASSERT_TRUE(matcher.update(dcNY)); // Three DCs satisfies.
+ ASSERT_TRUE(matcher.update(rack1)); // Once matcher is satisfied, it stays satisfied.
+}
+
+TEST_F(ReplicaSetTagMatchTest, MaskingConstraints) {
+ // The highest count constraint for a tag key is the only one that matters.
+ ReplicaSetTagPattern pattern = tagConfig.makePattern();
+ ASSERT_OK(tagConfig.addTagCountConstraintToPattern(&pattern, "rack", 2));
+ ASSERT_OK(tagConfig.addTagCountConstraintToPattern(&pattern, "rack", 3));
+ ReplicaSetTagMatch matcher(pattern);
+ ASSERT_FALSE(matcher.isSatisfied());
+ ASSERT_FALSE(matcher.update(rack2));
+ ASSERT_FALSE(matcher.update(rack3));
+ ASSERT_FALSE(matcher.update(rack2));
+ ASSERT_TRUE(matcher.update(rack1));
+}
+
+TEST_F(ReplicaSetTagMatchTest, MultipleConstraints) {
+ ReplicaSetTagPattern pattern = tagConfig.makePattern();
+ ASSERT_OK(tagConfig.addTagCountConstraintToPattern(&pattern, "dc", 3));
+ ASSERT_OK(tagConfig.addTagCountConstraintToPattern(&pattern, "rack", 2));
+ ReplicaSetTagMatch matcher(pattern);
+ ASSERT_FALSE(matcher.isSatisfied());
+ ASSERT_FALSE(matcher.update(dcVA));
+ ASSERT_FALSE(matcher.update(rack2));
+ ASSERT_FALSE(matcher.update(rack3));
+ ASSERT_FALSE(matcher.update(dcVA));
+ ASSERT_FALSE(matcher.update(dcRI));
+ ASSERT_TRUE(matcher.update(dcNY));
+ ASSERT_TRUE(matcher.isSatisfied());
+}
} // namespace
} // namespace repl