summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/databases_cloner_test.cpp
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2016-12-27 14:59:25 -0500
committerBenety Goh <benety@mongodb.com>2016-12-29 11:49:12 -0500
commit03510b1b55475fbbd8c710c70511c6397ca846e9 (patch)
tree28fdb3156c7f2c91a9a944396b6677f5d42eba8d /src/mongo/db/repl/databases_cloner_test.cpp
parent3f64fb082c4e2a3c5750a2f0bb8dfffbabe4d06e (diff)
downloadmongo-03510b1b55475fbbd8c710c70511c6397ca846e9.tar.gz
SERVER-25966 added CollectionCloner tests for metadata retries
Diffstat (limited to 'src/mongo/db/repl/databases_cloner_test.cpp')
-rw-r--r--src/mongo/db/repl/databases_cloner_test.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/mongo/db/repl/databases_cloner_test.cpp b/src/mongo/db/repl/databases_cloner_test.cpp
index 81552201485..366e8c04a7c 100644
--- a/src/mongo/db/repl/databases_cloner_test.cpp
+++ b/src/mongo/db/repl/databases_cloner_test.cpp
@@ -472,6 +472,36 @@ TEST_F(DBsClonerTest, FailsOnListDatabases) {
ASSERT_EQ(result, expectedResult);
}
+TEST_F(DBsClonerTest, DatabasesClonerResendsListDatabasesRequestOnRetriableError) {
+ Status result{Status::OK()};
+ DatabasesCloner cloner{&getStorage(),
+ &getExecutor(),
+ &getDbWorkThreadPool(),
+ HostAndPort{"local:1234"},
+ [](const BSONObj&) { return true; },
+ [](const Status&) {}};
+ ON_BLOCK_EXIT([this] { getExecutor().shutdown(); });
+
+ ASSERT_OK(cloner.startup());
+ ASSERT_TRUE(cloner.isActive());
+
+ auto net = getNet();
+ executor::NetworkInterfaceMock::InNetworkGuard guard(net);
+
+ // Respond to first listDatabases request with a retriable error.
+ assertRemoteCommandNameEquals("listDatabases",
+ net->scheduleErrorResponse(Status(ErrorCodes::HostNotFound, "")));
+ net->runReadyNetworkOperations();
+
+ // DatabasesCloner stays active because it resends the listDatabases request.
+ ASSERT_TRUE(cloner.isActive());
+
+ // DatabasesCloner should resend listDatabases request.
+ auto noi = net->getNextReadyRequest();
+ assertRemoteCommandNameEquals("listDatabases", noi->getRequest());
+ net->blackHole(noi);
+}
+
TEST_F(DBsClonerTest, DatabasesClonerReturnsCallbackCanceledIfShutdownDuringListDatabasesCommand) {
Status result{Status::OK()};
DatabasesCloner cloner{&getStorage(),