package com.lordofthejars.nosqlunit.mongodb.shard;
import static com.lordofthejars.nosqlunit.mongodb.shard.ManagedMongosLifecycleManagerBuilder.newManagedMongosLifecycle;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyList;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import com.lordofthejars.nosqlunit.core.CommandLineExecutor;
import com.lordofthejars.nosqlunit.core.OperatingSystem;
import com.lordofthejars.nosqlunit.core.OperatingSystemResolver;
import com.lordofthejars.nosqlunit.mongodb.MongoDbLowLevelOps;
public class WhenMongosIsRemoteManaged {
private static final String MONGODB_LOCATION = "/Users/alex/Applications/mongodb-osx-x86_64-2.0.5";
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Mock
private OperatingSystemResolver operatingSystemResolver;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void mongodb_should_start_mongodb_instance_in_Linux()
throws Throwable {
MongoDbLowLevelOps mongoDbChecker = mock(MongoDbLowLevelOps.class);
when(
mongoDbChecker.assertThatConnectionIsPossible(anyString(),
anyInt())).thenReturn(true);
when(operatingSystemResolver.currentOperatingSystem()).thenReturn(
OperatingSystem.LINUX_OS);
CommandLineExecutor commandLineExecutor = mock(CommandLineExecutor.class);
Process mockProcess = mock(Process.class);
when(mockProcess.exitValue()).thenReturn(0);
when(
commandLineExecutor.startProcessInDirectoryAndArguments(
anyString(), anyList())).thenReturn(mockProcess);
when(commandLineExecutor.getConsoleOutput(mockProcess)).thenReturn(
Collections.<String> emptyList());
ManagedMongosLifecycleManager managedMongosLifecycleManager = newManagedMongosLifecycle()
.mongosPath(MONGODB_LOCATION).configServer("localhost", 27020)
.configServer("localhost", 27021).get();
managedMongosLifecycleManager
.setCommandLineExecutor(commandLineExecutor);
managedMongosLifecycleManager
.setOperatingSystemResolver(operatingSystemResolver);
managedMongosLifecycleManager.setMongoDbLowLevelOps(mongoDbChecker);
managedMongosLifecycleManager.startEngine();
List<String> expectedCommand = new ArrayList<String>();
expectedCommand.add(MONGODB_LOCATION + File.separatorChar
+ ManagedMongosLifecycleManager.MONGODB_BINARY_DIRECTORY
+ File.separatorChar
+ ManagedMongosLifecycleManager.MONGOS_EXECUTABLE_X);
expectedCommand.add(ManagedMongosLifecycleManager.PORT_ARGUMENT_NAME);
expectedCommand.add(27017 + "");
expectedCommand
.add(ManagedMongosLifecycleManager.LOGPATH_ARGUMENT_NAME);
expectedCommand
.add(ManagedMongosLifecycleManager.DEFAULT_MONGO_LOGPATH);
expectedCommand
.add(ManagedMongosLifecycleManager.CHUNK_SIZE_ARGUMENT_NAME);
expectedCommand.add(ManagedMongosLifecycleManager.DEFAULT_CHUNK_SIZE
+ "");
expectedCommand
.add(ManagedMongosLifecycleManager.CONFIG_DB_ARGUMENT_NAME);
expectedCommand.add("localhost:27020, localhost:27021");
managedMongosLifecycleManager.stopEngine();
verify(commandLineExecutor).startProcessInDirectoryAndArguments(
"target/mongo-temp", expectedCommand);
}
@Test
public void mongodb_should_start_mongodb_instance_in_Windows()
throws Throwable {
MongoDbLowLevelOps mongoDbChecker = mock(MongoDbLowLevelOps.class);
when(
mongoDbChecker.assertThatConnectionIsPossible(anyString(),
anyInt())).thenReturn(true);
when(operatingSystemResolver.currentOperatingSystem()).thenReturn(
OperatingSystem.WINDOWS_2008);
CommandLineExecutor commandLineExecutor = mock(CommandLineExecutor.class);
Process mockProcess = mock(Process.class);
when(mockProcess.exitValue()).thenReturn(0);
when(
commandLineExecutor.startProcessInDirectoryAndArguments(
anyString(), anyList())).thenReturn(mockProcess);
when(commandLineExecutor.getConsoleOutput(mockProcess)).thenReturn(
Collections.<String> emptyList());
ManagedMongosLifecycleManager managedMongosLifecycleManager = newManagedMongosLifecycle()
.mongosPath(MONGODB_LOCATION).configServer("localhost", 27020)
.configServer("localhost", 27021).get();
managedMongosLifecycleManager
.setCommandLineExecutor(commandLineExecutor);
managedMongosLifecycleManager
.setOperatingSystemResolver(operatingSystemResolver);
managedMongosLifecycleManager.setMongoDbLowLevelOps(mongoDbChecker);
managedMongosLifecycleManager.startEngine();
List<String> expectedCommand = new ArrayList<String>();
expectedCommand.add(MONGODB_LOCATION + File.separatorChar
+ ManagedMongosLifecycleManager.MONGODB_BINARY_DIRECTORY
+ File.separatorChar
+ ManagedMongosLifecycleManager.MONGOS_EXECUTABLE_W);
expectedCommand.add(ManagedMongosLifecycleManager.PORT_ARGUMENT_NAME);
expectedCommand.add(27017 + "");
expectedCommand
.add(ManagedMongosLifecycleManager.LOGPATH_ARGUMENT_NAME);
expectedCommand
.add(ManagedMongosLifecycleManager.DEFAULT_MONGO_LOGPATH);
expectedCommand
.add(ManagedMongosLifecycleManager.CHUNK_SIZE_ARGUMENT_NAME);
expectedCommand.add(ManagedMongosLifecycleManager.DEFAULT_CHUNK_SIZE
+ "");
expectedCommand
.add(ManagedMongosLifecycleManager.CONFIG_DB_ARGUMENT_NAME);
expectedCommand.add("localhost:27020, localhost:27021");
managedMongosLifecycleManager.stopEngine();
verify(commandLineExecutor).startProcessInDirectoryAndArguments(
"target/mongo-temp", expectedCommand);
}
}