diff options
Diffstat (limited to 'src/mongo/client/dbclient_rs_test.cpp')
-rw-r--r-- | src/mongo/client/dbclient_rs_test.cpp | 223 |
1 files changed, 85 insertions, 138 deletions
diff --git a/src/mongo/client/dbclient_rs_test.cpp b/src/mongo/client/dbclient_rs_test.cpp index 2bbbc78858a..7053d8fe623 100644 --- a/src/mongo/client/dbclient_rs_test.cpp +++ b/src/mongo/client/dbclient_rs_test.cpp @@ -152,57 +152,16 @@ void assertNodeSelected(MockReplicaSet* replSet, ReadPreference rp, StringData h assertOneOfNodesSelected(replSet, rp, std::vector<std::string>{host.toString()}); } -/** - * Runs a find operation against 'replConn' using both the modern 'find()' API and the deprecated - * API. In both cases, verifies the results by passing the resulting cursor to 'assertionFunc'. - * - * The operation is a simple find command against the given NamespaceString with no arguments other - * than 'readPref'. - */ -void assertWithBothQueryApis(DBClientReplicaSet& replConn, - const NamespaceString& nss, - ReadPreference readPref, - std::function<void(std::unique_ptr<DBClientCursor>)> assertionFunc) { - std::unique_ptr<DBClientCursor> cursor = - replConn.find(FindCommandRequest{nss}, ReadPreferenceSetting{readPref}); - assertionFunc(std::move(cursor)); - - client_deprecated::Query readPrefHolder; - readPrefHolder.readPref(readPref, BSONArray{}); - cursor = replConn.query_DEPRECATED(nss, BSONObj{}, readPrefHolder); - assertionFunc(std::move(cursor)); -} - -/** - * Runs a find operation against 'replConn' using both the modern 'find()' API and the deprecated - * API. In both cases, verifies that the find operation throws an exception. - * - * The operation is a simple find command against the given NamespaceString with no arguments other - * than 'readPref'. - */ -void assertBothQueryApisThrow(DBClientReplicaSet& replConn, - const NamespaceString& nss, - ReadPreference readPref) { - ASSERT_THROWS(replConn.find(FindCommandRequest{nss}, ReadPreferenceSetting{readPref}), - AssertionException); - - client_deprecated::Query readPrefHolder; - readPrefHolder.readPref(readPref, BSONArray{}); - ASSERT_THROWS(replConn.query_DEPRECATED(nss, BSONObj{}, readPrefHolder), AssertionException); -} - TEST_F(BasicRS, QueryPrimary) { MockReplicaSet* replSet = getReplSet(); DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); // Note: IdentityNS contains the name of the server. - assertWithBothQueryApis(replConn, - NamespaceString{IdentityNS}, - ReadPreference::PrimaryOnly, - [&](std::unique_ptr<DBClientCursor> cursor) { - BSONObj doc = cursor->next(); - ASSERT_EQUALS(replSet->getPrimary(), doc[HostField.name()].str()); - }); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + auto cursor = + replConn.find(std::move(findCmd), ReadPreferenceSetting{ReadPreference::PrimaryOnly}); + BSONObj doc = cursor->next(); + ASSERT_EQUALS(replSet->getPrimary(), doc[HostField.name()].str()); } TEST_F(BasicRS, CommandPrimary) { @@ -214,14 +173,11 @@ TEST_F(BasicRS, QuerySecondaryOnly) { DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); // Note: IdentityNS contains the name of the server. - assertWithBothQueryApis(replConn, - NamespaceString{IdentityNS}, - ReadPreference::SecondaryOnly, - [&](std::unique_ptr<DBClientCursor> cursor) { - BSONObj doc = cursor->next(); - ASSERT_EQUALS(replSet->getSecondaries().front(), - doc[HostField.name()].str()); - }); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + auto cursor = + replConn.find(std::move(findCmd), ReadPreferenceSetting{ReadPreference::SecondaryOnly}); + BSONObj doc = cursor->next(); + ASSERT_EQUALS(replSet->getSecondaries().front(), doc[HostField.name()].str()); } TEST_F(BasicRS, CommandSecondaryOnly) { @@ -234,13 +190,11 @@ TEST_F(BasicRS, QueryPrimaryPreferred) { DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); // Note: IdentityNS contains the name of the server. - assertWithBothQueryApis(replConn, - NamespaceString{IdentityNS}, - ReadPreference::PrimaryPreferred, - [&](std::unique_ptr<DBClientCursor> cursor) { - BSONObj doc = cursor->next(); - ASSERT_EQUALS(replSet->getPrimary(), doc[HostField.name()].str()); - }); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + auto cursor = + replConn.find(std::move(findCmd), ReadPreferenceSetting{ReadPreference::PrimaryPreferred}); + BSONObj doc = cursor->next(); + ASSERT_EQUALS(replSet->getPrimary(), doc[HostField.name()].str()); } TEST_F(BasicRS, CommandPrimaryPreferred) { @@ -252,14 +206,11 @@ TEST_F(BasicRS, QuerySecondaryPreferred) { DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); // Note: IdentityNS contains the name of the server. - assertWithBothQueryApis(replConn, - NamespaceString{IdentityNS}, - ReadPreference::SecondaryPreferred, - [&](std::unique_ptr<DBClientCursor> cursor) { - BSONObj doc = cursor->next(); - ASSERT_EQUALS(replSet->getSecondaries().front(), - doc[HostField.name()].str()); - }); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + auto cursor = replConn.find(std::move(findCmd), + ReadPreferenceSetting{ReadPreference::SecondaryPreferred}); + BSONObj doc = cursor->next(); + ASSERT_EQUALS(replSet->getSecondaries().front(), doc[HostField.name()].str()); } TEST_F(BasicRS, CommandSecondaryPreferred) { @@ -319,7 +270,10 @@ TEST_F(AllNodesDown, QueryPrimary) { MockReplicaSet* replSet = getReplSet(); DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); - assertBothQueryApisThrow(replConn, NamespaceString{IdentityNS}, ReadPreference::PrimaryOnly); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + ASSERT_THROWS( + replConn.find(std::move(findCmd), ReadPreferenceSetting{ReadPreference::PrimaryOnly}), + AssertionException); } TEST_F(AllNodesDown, CommandPrimary) { @@ -330,7 +284,10 @@ TEST_F(AllNodesDown, QuerySecondaryOnly) { MockReplicaSet* replSet = getReplSet(); DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); - assertBothQueryApisThrow(replConn, NamespaceString{IdentityNS}, ReadPreference::SecondaryOnly); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + ASSERT_THROWS( + replConn.find(std::move(findCmd), ReadPreferenceSetting{ReadPreference::SecondaryOnly}), + AssertionException); } TEST_F(AllNodesDown, CommandSecondaryOnly) { @@ -341,8 +298,10 @@ TEST_F(AllNodesDown, QueryPrimaryPreferred) { MockReplicaSet* replSet = getReplSet(); DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); - assertBothQueryApisThrow( - replConn, NamespaceString{IdentityNS}, ReadPreference::PrimaryPreferred); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + ASSERT_THROWS( + replConn.find(std::move(findCmd), ReadPreferenceSetting{ReadPreference::PrimaryPreferred}), + AssertionException); } TEST_F(AllNodesDown, CommandPrimaryPreferred) { @@ -353,8 +312,10 @@ TEST_F(AllNodesDown, QuerySecondaryPreferred) { MockReplicaSet* replSet = getReplSet(); DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); - assertBothQueryApisThrow( - replConn, NamespaceString{IdentityNS}, ReadPreference::SecondaryPreferred); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + ASSERT_THROWS(replConn.find(std::move(findCmd), + ReadPreferenceSetting{ReadPreference::SecondaryPreferred}), + AssertionException); } TEST_F(AllNodesDown, CommandSecondaryPreferred) { @@ -365,7 +326,9 @@ TEST_F(AllNodesDown, QueryNearest) { MockReplicaSet* replSet = getReplSet(); DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); - assertBothQueryApisThrow(replConn, NamespaceString{IdentityNS}, ReadPreference::Nearest); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + ASSERT_THROWS(replConn.find(std::move(findCmd), ReadPreferenceSetting{ReadPreference::Nearest}), + AssertionException); } TEST_F(AllNodesDown, CommandNearest) { @@ -409,7 +372,10 @@ TEST_F(PrimaryDown, QueryPrimary) { MockReplicaSet* replSet = getReplSet(); DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); - assertBothQueryApisThrow(replConn, NamespaceString{IdentityNS}, ReadPreference::PrimaryOnly); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + ASSERT_THROWS( + replConn.find(std::move(findCmd), ReadPreferenceSetting{ReadPreference::PrimaryOnly}), + AssertionException); } TEST_F(PrimaryDown, CommandPrimary) { @@ -421,14 +387,11 @@ TEST_F(PrimaryDown, QuerySecondaryOnly) { DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); // Note: IdentityNS contains the name of the server. - assertWithBothQueryApis(replConn, - NamespaceString{IdentityNS}, - ReadPreference::SecondaryOnly, - [&](std::unique_ptr<DBClientCursor> cursor) { - BSONObj doc = cursor->next(); - ASSERT_EQUALS(replSet->getSecondaries().front(), - doc[HostField.name()].str()); - }); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + auto cursor = + replConn.find(std::move(findCmd), ReadPreferenceSetting{ReadPreference::SecondaryOnly}); + BSONObj doc = cursor->next(); + ASSERT_EQUALS(replSet->getSecondaries().front(), doc[HostField.name()].str()); } TEST_F(PrimaryDown, CommandSecondaryOnly) { @@ -441,14 +404,11 @@ TEST_F(PrimaryDown, QueryPrimaryPreferred) { DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); // Note: IdentityNS contains the name of the server. - assertWithBothQueryApis(replConn, - NamespaceString{IdentityNS}, - ReadPreference::PrimaryPreferred, - [&](std::unique_ptr<DBClientCursor> cursor) { - BSONObj doc = cursor->next(); - ASSERT_EQUALS(replSet->getSecondaries().front(), - doc[HostField.name()].str()); - }); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + auto cursor = + replConn.find(std::move(findCmd), ReadPreferenceSetting{ReadPreference::PrimaryPreferred}); + BSONObj doc = cursor->next(); + ASSERT_EQUALS(replSet->getSecondaries().front(), doc[HostField.name()].str()); } TEST_F(PrimaryDown, CommandPrimaryPreferred) { @@ -461,14 +421,11 @@ TEST_F(PrimaryDown, QuerySecondaryPreferred) { DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); // Note: IdentityNS contains the name of the server. - assertWithBothQueryApis(replConn, - NamespaceString{IdentityNS}, - ReadPreference::SecondaryPreferred, - [&](std::unique_ptr<DBClientCursor> cursor) { - BSONObj doc = cursor->next(); - ASSERT_EQUALS(replSet->getSecondaries().front(), - doc[HostField.name()].str()); - }); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + auto cursor = replConn.find(std::move(findCmd), + ReadPreferenceSetting{ReadPreference::SecondaryPreferred}); + BSONObj doc = cursor->next(); + ASSERT_EQUALS(replSet->getSecondaries().front(), doc[HostField.name()].str()); } TEST_F(PrimaryDown, CommandSecondaryPreferred) { @@ -480,14 +437,10 @@ TEST_F(PrimaryDown, Nearest) { MockReplicaSet* replSet = getReplSet(); DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); - assertWithBothQueryApis(replConn, - NamespaceString{IdentityNS}, - ReadPreference::Nearest, - [&](std::unique_ptr<DBClientCursor> cursor) { - BSONObj doc = cursor->next(); - ASSERT_EQUALS(replSet->getSecondaries().front(), - doc[HostField.name()].str()); - }); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + auto cursor = replConn.find(std::move(findCmd), ReadPreferenceSetting{ReadPreference::Nearest}); + BSONObj doc = cursor->next(); + ASSERT_EQUALS(replSet->getSecondaries().front(), doc[HostField.name()].str()); } /** @@ -529,13 +482,11 @@ TEST_F(SecondaryDown, QueryPrimary) { DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); // Note: IdentityNS contains the name of the server. - assertWithBothQueryApis(replConn, - NamespaceString{IdentityNS}, - ReadPreference::PrimaryOnly, - [&](std::unique_ptr<DBClientCursor> cursor) { - BSONObj doc = cursor->next(); - ASSERT_EQUALS(replSet->getPrimary(), doc[HostField.name()].str()); - }); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + auto cursor = + replConn.find(std::move(findCmd), ReadPreferenceSetting{ReadPreference::PrimaryOnly}); + BSONObj doc = cursor->next(); + ASSERT_EQUALS(replSet->getPrimary(), doc[HostField.name()].str()); } TEST_F(SecondaryDown, CommandPrimary) { @@ -546,7 +497,10 @@ TEST_F(SecondaryDown, QuerySecondaryOnly) { MockReplicaSet* replSet = getReplSet(); DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); - assertBothQueryApisThrow(replConn, NamespaceString{IdentityNS}, ReadPreference::SecondaryOnly); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + ASSERT_THROWS( + replConn.find(std::move(findCmd), ReadPreferenceSetting{ReadPreference::SecondaryOnly}), + AssertionException); } TEST_F(SecondaryDown, CommandSecondaryOnly) { @@ -558,13 +512,11 @@ TEST_F(SecondaryDown, QueryPrimaryPreferred) { DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); // Note: IdentityNS contains the name of the server. - assertWithBothQueryApis(replConn, - NamespaceString{IdentityNS}, - ReadPreference::PrimaryPreferred, - [&](std::unique_ptr<DBClientCursor> cursor) { - BSONObj doc = cursor->next(); - ASSERT_EQUALS(replSet->getPrimary(), doc[HostField.name()].str()); - }); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + auto cursor = + replConn.find(std::move(findCmd), ReadPreferenceSetting{ReadPreference::PrimaryPreferred}); + BSONObj doc = cursor->next(); + ASSERT_EQUALS(replSet->getPrimary(), doc[HostField.name()].str()); } TEST_F(SecondaryDown, CommandPrimaryPreferred) { @@ -575,13 +527,11 @@ TEST_F(SecondaryDown, QuerySecondaryPreferred) { MockReplicaSet* replSet = getReplSet(); DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); - assertWithBothQueryApis(replConn, - NamespaceString{IdentityNS}, - ReadPreference::SecondaryPreferred, - [&](std::unique_ptr<DBClientCursor> cursor) { - BSONObj doc = cursor->next(); - ASSERT_EQUALS(replSet->getPrimary(), doc[HostField.name()].str()); - }); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + auto cursor = replConn.find(std::move(findCmd), + ReadPreferenceSetting{ReadPreference::SecondaryPreferred}); + BSONObj doc = cursor->next(); + ASSERT_EQUALS(replSet->getPrimary(), doc[HostField.name()].str()); } TEST_F(SecondaryDown, CommandSecondaryPreferred) { @@ -592,13 +542,10 @@ TEST_F(SecondaryDown, QueryNearest) { MockReplicaSet* replSet = getReplSet(); DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts(), StringData()); - assertWithBothQueryApis(replConn, - NamespaceString{IdentityNS}, - ReadPreference::Nearest, - [&](std::unique_ptr<DBClientCursor> cursor) { - BSONObj doc = cursor->next(); - ASSERT_EQUALS(replSet->getPrimary(), doc[HostField.name()].str()); - }); + FindCommandRequest findCmd{NamespaceString{IdentityNS}}; + auto cursor = replConn.find(std::move(findCmd), ReadPreferenceSetting{ReadPreference::Nearest}); + BSONObj doc = cursor->next(); + ASSERT_EQUALS(replSet->getPrimary(), doc[HostField.name()].str()); } TEST_F(SecondaryDown, CommandNearest) { |