summaryrefslogtreecommitdiff
path: root/src/mongo/s/catalog_cache_test_fixture.cpp
diff options
context:
space:
mode:
authorJack Mulrow <jack.mulrow@mongodb.com>2018-03-15 14:02:50 -0400
committerJack Mulrow <jack.mulrow@mongodb.com>2018-03-20 23:41:44 -0400
commit81466a3ec4c9f90ab1e6805a38a5dfc7eb98dafb (patch)
treeb6f349bff449c2b549eb01960d81a1138cc69407 /src/mongo/s/catalog_cache_test_fixture.cpp
parentdae21a5cdb07d2a98e99682be6bf9259232b61fd (diff)
downloadmongo-81466a3ec4c9f90ab1e6805a38a5dfc7eb98dafb.tar.gz
SERVER-33028 Make cluster find retry on snapshot errors
Diffstat (limited to 'src/mongo/s/catalog_cache_test_fixture.cpp')
-rw-r--r--src/mongo/s/catalog_cache_test_fixture.cpp63
1 files changed, 60 insertions, 3 deletions
diff --git a/src/mongo/s/catalog_cache_test_fixture.cpp b/src/mongo/s/catalog_cache_test_fixture.cpp
index 63598b1d7dc..a38afbbf727 100644
--- a/src/mongo/s/catalog_cache_test_fixture.cpp
+++ b/src/mongo/s/catalog_cache_test_fixture.cpp
@@ -35,6 +35,7 @@
#include "mongo/s/catalog_cache_test_fixture.h"
+#include "mongo/client/remote_command_targeter_factory_mock.h"
#include "mongo/client/remote_command_targeter_mock.h"
#include "mongo/db/client.h"
#include "mongo/db/query/collation/collator_factory_mock.h"
@@ -75,11 +76,19 @@ void CatalogCacheTestFixture::setupNShards(int numShards) {
setupShards([&]() {
std::vector<ShardType> shards;
for (int i = 0; i < numShards; i++) {
- ShardType shard;
- shard.setName(str::stream() << i);
- shard.setHost(str::stream() << "Host" << i << ":12345");
+ ShardId name(str::stream() << i);
+ HostAndPort host(str::stream() << "Host" << i << ":12345");
+ ShardType shard;
+ shard.setName(name.toString());
+ shard.setHost(host.toString());
shards.emplace_back(std::move(shard));
+
+ std::unique_ptr<RemoteCommandTargeterMock> targeter(
+ stdx::make_unique<RemoteCommandTargeterMock>());
+ targeter->setConnectionStringReturnValue(ConnectionString(host));
+ targeter->setFindHostReturnValue(host);
+ targeterFactory()->addTargeterToReturn(ConnectionString(host), std::move(targeter));
}
return shards;
@@ -150,4 +159,52 @@ std::shared_ptr<ChunkManager> CatalogCacheTestFixture::makeChunkManager(
return routingInfo->cm();
}
+void CatalogCacheTestFixture::expectGetDatabase(NamespaceString nss) {
+ expectFindSendBSONObjVector(kConfigHostAndPort, [&]() {
+ DatabaseType db(nss.db().toString(), {"0"}, true);
+ return std::vector<BSONObj>{db.toBSON()};
+ }());
+}
+
+void CatalogCacheTestFixture::expectGetCollection(NamespaceString nss,
+ OID epoch,
+ const ShardKeyPattern& shardKeyPattern) {
+ expectFindSendBSONObjVector(kConfigHostAndPort, [&]() {
+ CollectionType collType;
+ collType.setNs(nss);
+ collType.setEpoch(epoch);
+ collType.setKeyPattern(shardKeyPattern.toBSON());
+ collType.setUnique(false);
+
+ return std::vector<BSONObj>{collType.toBSON()};
+ }());
+}
+
+void CatalogCacheTestFixture::loadRoutingTableWithTwoChunksAndTwoShards(NamespaceString nss) {
+ const OID epoch = OID::gen();
+ const ShardKeyPattern shardKeyPattern(BSON("_id" << 1));
+
+ auto future = scheduleRoutingInfoRefresh(nss);
+
+ // Mock the expected config server queries.
+ expectGetDatabase(nss);
+ expectGetCollection(nss, epoch, shardKeyPattern);
+ expectGetCollection(nss, epoch, shardKeyPattern);
+ expectFindSendBSONObjVector(kConfigHostAndPort, [&]() {
+ ChunkVersion version(1, 0, epoch);
+
+ ChunkType chunk1(
+ nss, {shardKeyPattern.getKeyPattern().globalMin(), BSON("_id" << 0)}, version, {"0"});
+ version.incMinor();
+
+ ChunkType chunk2(
+ nss, {BSON("_id" << 0), shardKeyPattern.getKeyPattern().globalMax()}, version, {"1"});
+ version.incMinor();
+
+ return std::vector<BSONObj>{chunk1.toConfigBSON(), chunk2.toConfigBSON()};
+ }());
+
+ future.timed_get(kFutureTimeout);
+}
+
} // namespace mongo