diff options
author | Benety Goh <benety@mongodb.com> | 2016-12-27 14:59:25 -0500 |
---|---|---|
committer | Benety Goh <benety@mongodb.com> | 2016-12-29 11:49:12 -0500 |
commit | 03510b1b55475fbbd8c710c70511c6397ca846e9 (patch) | |
tree | 28fdb3156c7f2c91a9a944396b6677f5d42eba8d /src/mongo/db/repl/databases_cloner_test.cpp | |
parent | 3f64fb082c4e2a3c5750a2f0bb8dfffbabe4d06e (diff) | |
download | mongo-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.cpp | 30 |
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(), |