package com.lordofthejars.nosqlunit.mongodb.replicaset;
import com.lordofthejars.nosqlunit.mongodb.ManagedMongoDbLifecycleManager;
import com.mongodb.util.JSON;
import org.bson.Document;
import org.junit.Test;
import java.util.concurrent.TimeUnit;
import static com.lordofthejars.nosqlunit.mongodb.replicaset.ReplicaSetBuilder.replicaSet;
import static com.lordofthejars.nosqlunit.mongodb.replicaset.ReplicaSetConfigurationBuilder.SettingsBuilder.settings;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class WhenReplicaSetConfigurationIsRequired {
@Test
public void eligible_Server_Should_Be_Added() {
ManagedMongoDbLifecycleManager managedInstance = mock(ManagedMongoDbLifecycleManager.class);
when(managedInstance.getHost()).thenReturn("localhost");
when(managedInstance.getPort()).thenReturn(21017);
ReplicaSetManagedMongoDb replicaSetManagedMongoDb = replicaSet("rs0").eligible(managedInstance).get();
Document configuration = replicaSetManagedMongoDb.getConfigurationDocument().getConfiguration();
String serializedConfiguration = JSON.serialize(configuration);
assertThat(
serializedConfiguration,
is("{ \"_id\" : \"rs0\" , \"version\" : 1 , \"members\" : [ { \"_id\" : 0 , \"host\" : \"localhost:21017\"}]}"));
}
@Test
public void secondary_Server_Should_Be_Added() {
ManagedMongoDbLifecycleManager managedInstance = mock(ManagedMongoDbLifecycleManager.class);
when(managedInstance.getHost()).thenReturn("localhost");
when(managedInstance.getPort()).thenReturn(21017);
ReplicaSetManagedMongoDb replicaSetManagedMongoDb = replicaSet("rs0").secondary(managedInstance).get();
Document configuration = replicaSetManagedMongoDb.getConfigurationDocument().getConfiguration();
String serializedConfiguration = JSON.serialize(configuration);
assertThat(
serializedConfiguration,
is("{ \"_id\" : \"rs0\" , \"version\" : 1 , \"members\" : [ { \"_id\" : 0 , \"host\" : \"localhost:21017\" , \"priority\" : 0}]}"));
}
@Test
public void hidden_Server_Should_Be_Added() {
ManagedMongoDbLifecycleManager managedInstance = mock(ManagedMongoDbLifecycleManager.class);
when(managedInstance.getHost()).thenReturn("localhost");
when(managedInstance.getPort()).thenReturn(21017);
ReplicaSetManagedMongoDb replicaSetManagedMongoDb = replicaSet("rs0").hidden(managedInstance).get();
Document configuration = replicaSetManagedMongoDb.getConfigurationDocument().getConfiguration();
String serializedConfiguration = JSON.serialize(configuration);
assertThat(
serializedConfiguration,
is("{ \"_id\" : \"rs0\" , \"version\" : 1 , \"members\" : [ { \"_id\" : 0 , \"host\" : \"localhost:21017\" , \"priority\" : 0 , \"hidden\" : true}]}"));
}
@Test
public void arbiter_Server_Should_Be_Added() {
ManagedMongoDbLifecycleManager managedInstance = mock(ManagedMongoDbLifecycleManager.class);
when(managedInstance.getHost()).thenReturn("localhost");
when(managedInstance.getPort()).thenReturn(21017);
ReplicaSetManagedMongoDb replicaSetManagedMongoDb = replicaSet("rs0").arbiter(managedInstance).get();
Document configuration = replicaSetManagedMongoDb.getConfigurationDocument().getConfiguration();
String serializedConfiguration = JSON.serialize(configuration);
assertThat(
serializedConfiguration,
is("{ \"_id\" : \"rs0\" , \"version\" : 1 , \"members\" : [ { \"_id\" : 0 , \"host\" : \"localhost:21017\" , \"arbiterOnly\" : true}]}"));
}
@Test
public void none_Voter_Server_Should_Be_Added() {
ManagedMongoDbLifecycleManager managedInstance = mock(ManagedMongoDbLifecycleManager.class);
when(managedInstance.getHost()).thenReturn("localhost");
when(managedInstance.getPort()).thenReturn(21017);
ReplicaSetManagedMongoDb replicaSetManagedMongoDb = replicaSet("rs0").noneVoter(managedInstance).get();
Document configuration = replicaSetManagedMongoDb.getConfigurationDocument().getConfiguration();
String serializedConfiguration = JSON.serialize(configuration);
assertThat(
serializedConfiguration,
is("{ \"_id\" : \"rs0\" , \"version\" : 1 , \"members\" : [ { \"_id\" : 0 , \"host\" : \"localhost:21017\" , \"votes\" : 0}]}"));
}
@Test
public void delayed_Server_Should_Be_Added() {
ManagedMongoDbLifecycleManager managedInstance = mock(ManagedMongoDbLifecycleManager.class);
when(managedInstance.getHost()).thenReturn("localhost");
when(managedInstance.getPort()).thenReturn(21017);
ReplicaSetManagedMongoDb replicaSetManagedMongoDb = replicaSet("rs0").delayed(managedInstance, 20,
TimeUnit.MINUTES).get();
Document configuration = replicaSetManagedMongoDb.getConfigurationDocument().getConfiguration();
String serializedConfiguration = JSON.serialize(configuration);
assertThat(
serializedConfiguration,
is("{ \"_id\" : \"rs0\" , \"version\" : 1 , \"members\" : [ { \"_id\" : 0 , \"host\" : \"localhost:21017\" , \"priority\" : 0 , \"slaveDelay\" : 1200}]}"));
}
@Test
public void custom_Server_Should_Be_Added() {
ManagedMongoDbLifecycleManager managedInstance = mock(ManagedMongoDbLifecycleManager.class);
when(managedInstance.getHost()).thenReturn("localhost");
when(managedInstance.getPort()).thenReturn(21017);
ReplicaSetManagedMongoDb replicaSetManagedMongoDb = replicaSet("rs0").server(managedInstance).arbiterOnly()
.buildIndexes().tags("prop1", "val1", "prop2", "val2").configure().get();
Document configuration = replicaSetManagedMongoDb.getConfigurationDocument().getConfiguration();
String serializedConfiguration = JSON.serialize(configuration);
assertThat(
serializedConfiguration,
is("{ \"_id\" : \"rs0\" , \"version\" : 1 , \"members\" : [ { \"_id\" : 0 , \"host\" : \"localhost:21017\" , \"arbiterOnly\" : true , \"buildIndexes\" : true , \"tags\" : { \"prop1\" : \"val1\" , \"prop2\" : \"val2\"}}]}"));
}
@Test
public void settings_Parameters_Should_Be_Added() {
ManagedMongoDbLifecycleManager managedInstance = mock(ManagedMongoDbLifecycleManager.class);
when(managedInstance.getHost()).thenReturn("localhost");
when(managedInstance.getPort()).thenReturn(21017);
ReplicaSetManagedMongoDb replicaSetManagedMongoDb = replicaSet("rs0", settings().getLastErrorModes("{\"DRSafe\":{\"region\":2}}").get()).eligible(managedInstance).get();
Document configuration = replicaSetManagedMongoDb.getConfigurationDocument().getConfiguration();
String serializedConfiguration = JSON.serialize(configuration);
assertThat(
serializedConfiguration,
is("{ \"_id\" : \"rs0\" , \"version\" : 1 , \"members\" : [ { \"_id\" : 0 , \"host\" : \"localhost:21017\"}] , \"settings\" : { \"getLastErrorModes\" : { \"DRSafe\" : { \"region\" : 2}}}}"));
}
@Test
public void complex_Scenarios_Should_Be_Build() {
ManagedMongoDbLifecycleManager managedInstance1 = mock(ManagedMongoDbLifecycleManager.class);
when(managedInstance1.getHost()).thenReturn("localhost");
when(managedInstance1.getPort()).thenReturn(21017);
ManagedMongoDbLifecycleManager managedInstance2 = mock(ManagedMongoDbLifecycleManager.class);
when(managedInstance2.getHost()).thenReturn("localhost");
when(managedInstance2.getPort()).thenReturn(21018);
ReplicaSetManagedMongoDb replicaSetManagedMongoDb = replicaSet("rs0").eligible(managedInstance1).secondary(managedInstance2).get();
Document configuration = replicaSetManagedMongoDb.getConfigurationDocument().getConfiguration();
String serializedConfiguration = JSON.serialize(configuration);
assertThat(
serializedConfiguration,
is("{ \"_id\" : \"rs0\" , \"version\" : 1 , \"members\" : [ { \"_id\" : 0 , \"host\" : \"localhost:21017\"} , { \"_id\" : 1 , \"host\" : \"localhost:21018\" , \"priority\" : 0}]}"));
}
}