package com.lordofthejars.nosqlunit.mongodb.integration; import static ch.lambdaj.Lambda.having; import static ch.lambdaj.Lambda.on; import static ch.lambdaj.Lambda.selectFirst; import static com.lordofthejars.nosqlunit.mongodb.ManagedMongoDbLifecycleManagerBuilder.newManagedMongoDbLifecycle; import static com.lordofthejars.nosqlunit.mongodb.replicaset.ReplicaSetBuilder.replicaSet; import static com.lordofthejars.nosqlunit.mongodb.shard.ManagedMongosLifecycleManagerBuilder.newManagedMongosLifecycle; import static com.lordofthejars.nosqlunit.mongodb.shard.ShardedGroupBuilder.shardedGroup; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import java.net.UnknownHostException; import org.bson.Document; import org.junit.AfterClass; import org.junit.ClassRule; import org.junit.Test; import com.lordofthejars.nosqlunit.mongodb.MongoDbCommands; import com.lordofthejars.nosqlunit.mongodb.shard.ShardedManagedMongoDb; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObjectBuilder; import com.mongodb.CommandResult; import com.mongodb.DBObject; import com.mongodb.MongoClient; public class WhenReplicaSetShardingIsRequired { static { System.setProperty("MONGO_HOME", "/opt/mongo"); } @ClassRule public static ShardedManagedMongoDb shardedManagedMongoDb = shardedGroup() .replicaSet(replicaSet("rs-test-1") .eligible( newManagedMongoDbLifecycle().port(27007).dbRelativePath("rs-0").logRelativePath("log-0").get() ) .get()) .replicaSet(replicaSet("rs-test-2") .eligible( newManagedMongoDbLifecycle().port(27009).dbRelativePath("rs-0").logRelativePath("log-0").get() ) .get()) .config(newManagedMongoDbLifecycle().port(27020).dbRelativePath("rs-3").logRelativePath("log-3").get()) .mongos(newManagedMongosLifecycle().configServer(27020).get()) .get(); @AfterClass public static void tearDown() { System.clearProperty("MONGO_HOME"); } @Test public void sharded_replica_set_should_be_started() throws UnknownHostException { MongoClient mongoClient = new MongoClient("localhost", 27017); Document listShards = MongoDbCommands.listShards(mongoClient); assertThat((String)listShards.get("serverUsed"), is("localhost/127.0.0.1:27017")); BasicDBList shards = (BasicDBList) listShards.get("shards"); DBObject replicaSet1 = selectFirst(shards, having(on(DBObject.class).get("_id"), is("rs-test-2"))); assertThat(replicaSet1, is(createShardDbObject("rs-test-2", "rs-test-2/localhost:27009"))); DBObject replicaSet2 = selectFirst(shards, having(on(DBObject.class).get("_id"), is("rs-test-1"))); assertThat(replicaSet2, is(createShardDbObject("rs-test-1", "rs-test-1/localhost:27007"))); } private DBObject createShardDbObject(String id, String host) { BasicDBObjectBuilder basicDBObjectBuilder = new BasicDBObjectBuilder(); return basicDBObjectBuilder.append("_id", id).append("host", host).get(); } }