diff options
author | Benety Goh <benety@mongodb.com> | 2016-03-30 12:04:23 -0400 |
---|---|---|
committer | Benety Goh <benety@mongodb.com> | 2016-04-08 10:27:51 -0400 |
commit | 11132f69c93a279ebe7f0ccb71929d4cd2b8675d (patch) | |
tree | 21eebd96010805a9cacffb0e02b7ac8befba90a6 /src/mongo/client/fetcher_test.cpp | |
parent | 12d251318b76936c9655f317fd29ce46cb5e862b (diff) | |
download | mongo-11132f69c93a279ebe7f0ccb71929d4cd2b8675d.tar.gz |
SERVER-22774 Copied BackgroundSync::_fetcherCallback logic to OplogFetcher
Diffstat (limited to 'src/mongo/client/fetcher_test.cpp')
-rw-r--r-- | src/mongo/client/fetcher_test.cpp | 91 |
1 files changed, 66 insertions, 25 deletions
diff --git a/src/mongo/client/fetcher_test.cpp b/src/mongo/client/fetcher_test.cpp index e6b4519ab12..42fa4324a7f 100644 --- a/src/mongo/client/fetcher_test.cpp +++ b/src/mongo/client/fetcher_test.cpp @@ -34,6 +34,7 @@ #include "mongo/db/jsobj.h" #include "mongo/executor/thread_pool_task_executor_test_fixture.h" #include "mongo/executor/network_interface_mock.h" +#include "mongo/rpc/metadata.h" #include "mongo/unittest/unittest.h" @@ -43,7 +44,7 @@ using namespace mongo; using executor::NetworkInterfaceMock; using executor::TaskExecutor; -const HostAndPort target("localhost", -1); +const HostAndPort source("localhost", -1); const BSONObj findCmdObj = BSON("find" << "coll"); @@ -92,15 +93,15 @@ FetcherTest::FetcherTest() void FetcherTest::setUp() { executor::ThreadPoolExecutorTest::setUp(); clear(); - fetcher.reset(new Fetcher(&getExecutor(), - target, - "db", - findCmdObj, - stdx::bind(&FetcherTest::_callback, - this, - stdx::placeholders::_1, - stdx::placeholders::_2, - stdx::placeholders::_3))); + fetcher = stdx::make_unique<Fetcher>(&getExecutor(), + source, + "db", + findCmdObj, + stdx::bind(&FetcherTest::_callback, + this, + stdx::placeholders::_1, + stdx::placeholders::_2, + stdx::placeholders::_3)); launchExecutorThread(); } @@ -206,28 +207,42 @@ void FetcherTest::_callback(const StatusWith<Fetcher::QueryResponse>& result, } } -void unusedFetcherCallback(const StatusWith<Fetcher::QueryResponse>& fetchResult, - Fetcher::NextAction* nextAction, - BSONObjBuilder* getMoreBob) { +void unreachableCallback(const StatusWith<Fetcher::QueryResponse>& fetchResult, + Fetcher::NextAction* nextAction, + BSONObjBuilder* getMoreBob) { FAIL("should not reach here"); } +void doNothingCallback(const StatusWith<Fetcher::QueryResponse>& fetchResult, + Fetcher::NextAction* nextAction, + BSONObjBuilder* getMoreBob) {} + TEST_F(FetcherTest, InvalidConstruction) { TaskExecutor& executor = getExecutor(); // Null executor. - ASSERT_THROWS(Fetcher(nullptr, target, "db", findCmdObj, unusedFetcherCallback), UserException); + ASSERT_THROWS_CODE_AND_WHAT(Fetcher(nullptr, source, "db", findCmdObj, unreachableCallback), + UserException, + ErrorCodes::BadValue, + "null task executor"); // Empty database name. - ASSERT_THROWS(Fetcher(&executor, target, "", findCmdObj, unusedFetcherCallback), UserException); + ASSERT_THROWS_CODE_AND_WHAT(Fetcher(&executor, source, "", findCmdObj, unreachableCallback), + UserException, + ErrorCodes::BadValue, + "database name cannot be empty"); // Empty command object. - ASSERT_THROWS(Fetcher(&executor, target, "db", BSONObj(), unusedFetcherCallback), - UserException); + ASSERT_THROWS_CODE_AND_WHAT(Fetcher(&executor, source, "db", BSONObj(), unreachableCallback), + UserException, + ErrorCodes::BadValue, + "command object cannot be empty"); // Callback function cannot be null. - ASSERT_THROWS(Fetcher(&executor, target, "db", findCmdObj, Fetcher::CallbackFn()), - UserException); + ASSERT_THROWS_CODE_AND_WHAT(Fetcher(&executor, source, "db", findCmdObj, Fetcher::CallbackFn()), + UserException, + ErrorCodes::BadValue, + "callback function cannot be null"); } // Command object can refer to any command that returns a cursor. This @@ -236,18 +251,44 @@ TEST_F(FetcherTest, NonFindCommand) { TaskExecutor& executor = getExecutor(); Fetcher(&executor, - target, + source, "db", BSON("listIndexes" << "coll"), - unusedFetcherCallback); - Fetcher(&executor, target, "db", BSON("listCollections" << 1), unusedFetcherCallback); - Fetcher(&executor, target, "db", BSON("a" << 1), unusedFetcherCallback); + unreachableCallback); + Fetcher(&executor, source, "db", BSON("listCollections" << 1), unreachableCallback); + Fetcher(&executor, source, "db", BSON("a" << 1), unreachableCallback); +} + +TEST_F(FetcherTest, RemoteCommandRequestShouldContainCommandParametersPassedToConstructor) { + auto metadataObj = BSON("x" << 1); + Milliseconds timeout(8000); + + fetcher = stdx::make_unique<Fetcher>( + &getExecutor(), source, "db", findCmdObj, doNothingCallback, metadataObj, timeout); + + ASSERT_EQUALS(source, fetcher->getSource()); + ASSERT_EQUALS(findCmdObj, fetcher->getCommandObject()); + ASSERT_EQUALS(metadataObj, fetcher->getMetadataObject()); + ASSERT_EQUALS(timeout, fetcher->getTimeout()); + + ASSERT_OK(fetcher->schedule()); + + auto net = getNet(); + net->enterNetwork(); + ASSERT_TRUE(net->hasReadyRequests()); + auto noi = net->getNextReadyRequest(); + auto request = noi->getRequest(); + net->exitNetwork(); + + ASSERT_EQUALS(source, request.target); + ASSERT_EQUALS(findCmdObj, request.cmdObj); + ASSERT_EQUALS(metadataObj, request.metadata); + ASSERT_EQUALS(timeout, request.timeout); } TEST_F(FetcherTest, GetDiagnosticString) { - Fetcher fetcher(&getExecutor(), target, "db", findCmdObj, unusedFetcherCallback); - ASSERT_FALSE(fetcher.getDiagnosticString().empty()); + ASSERT_FALSE(fetcher->getDiagnosticString().empty()); } TEST_F(FetcherTest, IsActiveAfterSchedule) { |