summaryrefslogtreecommitdiff
path: root/src/mongo/dbtests/mock_replica_set_test.cpp
diff options
context:
space:
mode:
authorSpencer T Brody <spencer@mongodb.com>2014-11-18 19:10:13 -0500
committerSpencer T Brody <spencer@mongodb.com>2014-11-20 11:38:11 -0500
commit13577a48b51202aabd2e55ef95404439aaa4a0c3 (patch)
treefc39effb51783448ce01d782ca1e767e97b583e6 /src/mongo/dbtests/mock_replica_set_test.cpp
parent42d802af32f99663bc1c66456b2d57749010bed5 (diff)
downloadmongo-13577a48b51202aabd2e55ef95404439aaa4a0c3.tar.gz
SERVER-15496 Update old unit tests to use new ReplicaSetConfig
Diffstat (limited to 'src/mongo/dbtests/mock_replica_set_test.cpp')
-rw-r--r--src/mongo/dbtests/mock_replica_set_test.cpp49
1 files changed, 43 insertions, 6 deletions
diff --git a/src/mongo/dbtests/mock_replica_set_test.cpp b/src/mongo/dbtests/mock_replica_set_test.cpp
index 40aa16f600b..6cda455fd3d 100644
--- a/src/mongo/dbtests/mock_replica_set_test.cpp
+++ b/src/mongo/dbtests/mock_replica_set_test.cpp
@@ -32,12 +32,16 @@
#include <set>
#include <string>
+using mongo::BSONArrayBuilder;
using mongo::BSONElement;
using mongo::BSONObj;
+using mongo::BSONObjBuilder;
using mongo::BSONObjIterator;
using mongo::ConnectionString;
+using mongo::HostAndPort;
using mongo::MockRemoteDBServer;
using mongo::MockReplicaSet;
+using mongo::repl::ReplicaSetConfig;
using std::set;
using std::string;
@@ -255,13 +259,45 @@ namespace mongo_test {
ASSERT(expectedMembers == memberList);
}
+namespace {
+ /**
+ * Takes a ReplicaSetConfig and a node to remove and returns a new config with equivalent
+ * members minus the one specified to be removed. NOTE: Does not copy over properties of the
+ * members other than their id and host.
+ */
+ ReplicaSetConfig _getConfigWithMemberRemoved(
+ const ReplicaSetConfig& oldConfig, const HostAndPort& toRemove) {
+ BSONObjBuilder newConfigBuilder;
+ newConfigBuilder.append("_id", oldConfig.getReplSetName());
+ newConfigBuilder.append("version", oldConfig.getConfigVersion());
+
+ BSONArrayBuilder membersBuilder(newConfigBuilder.subarrayStart("members"));
+ for (ReplicaSetConfig::MemberIterator member = oldConfig.membersBegin();
+ member != oldConfig.membersEnd(); ++member) {
+ if (member->getHostAndPort() == toRemove) {
+ continue;
+ }
+
+ membersBuilder.append(BSON("_id" << member->getId() <<
+ "host" << member->getHostAndPort().toString()));
+ }
+
+ membersBuilder.done();
+ ReplicaSetConfig newConfig;
+ ASSERT_OK(newConfig.initialize(newConfigBuilder.obj()));
+ ASSERT_OK(newConfig.validate());
+ return newConfig;
+ }
+} // namespace
+
TEST(MockReplicaSetTest, IsMasterReconfigNodeRemoved) {
MockReplicaSet replSet("n", 3);
- MockReplicaSet::ReplConfigMap config = replSet.getReplConfig();
+ ReplicaSetConfig oldConfig = replSet.getReplConfig();
const string hostToRemove("$n1:27017");
- config.erase(hostToRemove);
- replSet.setConfig(config);
+ ReplicaSetConfig newConfig = _getConfigWithMemberRemoved(oldConfig,
+ HostAndPort(hostToRemove));
+ replSet.setConfig(newConfig);
{
// Check isMaster for node still in set
@@ -309,10 +345,11 @@ namespace mongo_test {
TEST(MockReplicaSetTest, replSetGetStatusReconfigNodeRemoved) {
MockReplicaSet replSet("n", 3);
- MockReplicaSet::ReplConfigMap config = replSet.getReplConfig();
+ ReplicaSetConfig oldConfig = replSet.getReplConfig();
const string hostToRemove("$n1:27017");
- config.erase(hostToRemove);
- replSet.setConfig(config);
+ ReplicaSetConfig newConfig = _getConfigWithMemberRemoved(oldConfig,
+ HostAndPort(hostToRemove));
+ replSet.setConfig(newConfig);
{
// Check replSetGetStatus for node still in set