package com.lordofthejars.nosqlunit.mongodb;
import com.lordofthejars.nosqlunit.core.CommandLineExecutor;
import com.lordofthejars.nosqlunit.core.OperatingSystem;
import com.lordofthejars.nosqlunit.core.OperatingSystemResolver;
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 java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static com.lordofthejars.nosqlunit.mongodb.ManagedMongoDb.MongoServerRuleBuilder.newManagedMongoDbRule;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyList;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.*;
public class WhenMongoDbIsRemoteManaged {
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_data_directory_should_be_deleted_when_server_is_stopped() throws IOException {
when(operatingSystemResolver.currentOperatingSystem()).thenReturn(
OperatingSystem.MAC_OSX);
CommandLineExecutor commandLineExecutor = mock(CommandLineExecutor.class);
MongoDbLowLevelOps mongoDbChecker = mock(MongoDbLowLevelOps.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());
File targetPath = temporaryFolder.newFolder();
createDbPathDirectory(targetPath);
ManagedMongoDb managedMongoDb = newManagedMongoDbRule()
.targetPath(targetPath.toString()).mongodPath(MONGODB_LOCATION)
.build();
managedMongoDb.managedMongoDbLifecycleManager.setCommandLineExecutor(commandLineExecutor);
managedMongoDb.managedMongoDbLifecycleManager.setOperatingSystemResolver(operatingSystemResolver);
managedMongoDb.managedMongoDbLifecycleManager.setMongoDbLowLevelOps(mongoDbChecker);
managedMongoDb.after();
File dbPath = new File(targetPath.toString() + File.separatorChar + ManagedMongoDbLifecycleManager.DEFAULT_MONGO_DBPATH);
assertThat(dbPath.exists(), is(false));
}
private File createDbPathDirectory(File targetPath) {
File dataDirectory = new File(targetPath.toString() + File.separatorChar + ManagedMongoDbLifecycleManager.DEFAULT_MONGO_DBPATH);
dataDirectory.mkdirs();
return dataDirectory;
}
@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_7);
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());
File targetPath = temporaryFolder.newFolder();
ManagedMongoDb managedMongoDb = newManagedMongoDbRule()
.targetPath(targetPath.toString()).mongodPath(MONGODB_LOCATION)
.appendCommandLineArguments("myArgument", "myValue").build();
managedMongoDb.managedMongoDbLifecycleManager.setCommandLineExecutor(commandLineExecutor);
managedMongoDb.managedMongoDbLifecycleManager.setOperatingSystemResolver(operatingSystemResolver);
managedMongoDb.managedMongoDbLifecycleManager.setMongoDbLowLevelOps(mongoDbChecker);
managedMongoDb.before();
List<String> expectedCommand = new ArrayList<String>();
expectedCommand.add(MONGODB_LOCATION + File.separatorChar
+ ManagedMongoDbLifecycleManager.MONGODB_BINARY_DIRECTORY + File.separatorChar
+ ManagedMongoDbLifecycleManager.MONGODB_EXECUTABLE_W);
expectedCommand.add(ManagedMongoDbLifecycleManager.DBPATH_ARGUMENT_NAME);
expectedCommand.add(ManagedMongoDbLifecycleManager.DEFAULT_MONGO_DBPATH);
expectedCommand.add(ManagedMongoDbLifecycleManager.PORT_ARGUMENT_NAME);
expectedCommand.add(27017+"");
expectedCommand.add(ManagedMongoDbLifecycleManager.LOGPATH_ARGUMENT_NAME);
expectedCommand.add(ManagedMongoDbLifecycleManager.DEFAULT_MONGO_LOGPATH);
expectedCommand.add(ManagedMongoDbLifecycleManager.NONE_JOURNALING_ENABLED);
expectedCommand.add("myArgument");
expectedCommand.add("myValue");
managedMongoDb.after();
verify(commandLineExecutor).startProcessInDirectoryAndArguments(
targetPath.toString(), expectedCommand);
}
@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());
File targetPath = temporaryFolder.newFolder();
ManagedMongoDb managedMongoDb = newManagedMongoDbRule()
.targetPath(targetPath.toString()).mongodPath(MONGODB_LOCATION)
.appendCommandLineArguments("myArgument", "myValue").build();
managedMongoDb.managedMongoDbLifecycleManager.setCommandLineExecutor(commandLineExecutor);
managedMongoDb.managedMongoDbLifecycleManager.setOperatingSystemResolver(operatingSystemResolver);
managedMongoDb.managedMongoDbLifecycleManager.setMongoDbLowLevelOps(mongoDbChecker);
managedMongoDb.before();
List<String> expectedCommand = new ArrayList<String>();
expectedCommand.add(MONGODB_LOCATION + File.separatorChar
+ ManagedMongoDbLifecycleManager.MONGODB_BINARY_DIRECTORY + File.separatorChar
+ ManagedMongoDbLifecycleManager.MONGODB_EXECUTABLE_X);
expectedCommand.add(ManagedMongoDbLifecycleManager.DBPATH_ARGUMENT_NAME);
expectedCommand.add(ManagedMongoDbLifecycleManager.DEFAULT_MONGO_DBPATH);
expectedCommand.add(ManagedMongoDbLifecycleManager.PORT_ARGUMENT_NAME);
expectedCommand.add(27017+"");
expectedCommand.add(ManagedMongoDbLifecycleManager.LOGPATH_ARGUMENT_NAME);
expectedCommand.add(ManagedMongoDbLifecycleManager.DEFAULT_MONGO_LOGPATH);
expectedCommand.add(ManagedMongoDbLifecycleManager.NONE_JOURNALING_ENABLED);
expectedCommand.add("myArgument");
expectedCommand.add("myValue");
managedMongoDb.after();
verify(commandLineExecutor).startProcessInDirectoryAndArguments(
targetPath.toString(), expectedCommand);
}
@Test
public void mongodb_should_start_mongodb_instance_in_Mac() throws Throwable {
MongoDbLowLevelOps mongoDbChecker = mock(MongoDbLowLevelOps.class);
when(mongoDbChecker.assertThatConnectionIsPossible(anyString(), anyInt())).thenReturn(true);
when(operatingSystemResolver.currentOperatingSystem()).thenReturn(
OperatingSystem.MAC_OSX);
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());
File targetPath = temporaryFolder.newFolder();
ManagedMongoDb managedMongoDb = newManagedMongoDbRule()
.targetPath(targetPath.toString()).mongodPath(MONGODB_LOCATION)
.appendCommandLineArguments("myArgument", "myValue").build();
managedMongoDb.managedMongoDbLifecycleManager.setCommandLineExecutor(commandLineExecutor);
managedMongoDb.managedMongoDbLifecycleManager.setOperatingSystemResolver(operatingSystemResolver);
managedMongoDb.managedMongoDbLifecycleManager.setMongoDbLowLevelOps(mongoDbChecker);
managedMongoDb.before();
List<String> expectedCommand = new ArrayList<String>();
expectedCommand.add(MONGODB_LOCATION + File.separatorChar
+ ManagedMongoDbLifecycleManager.MONGODB_BINARY_DIRECTORY + File.separatorChar
+ ManagedMongoDbLifecycleManager.MONGODB_EXECUTABLE_X);
expectedCommand.add(ManagedMongoDbLifecycleManager.DBPATH_ARGUMENT_NAME);
expectedCommand.add(ManagedMongoDbLifecycleManager.DEFAULT_MONGO_DBPATH);
expectedCommand.add(ManagedMongoDbLifecycleManager.PORT_ARGUMENT_NAME);
expectedCommand.add(27017+"");
expectedCommand.add(ManagedMongoDbLifecycleManager.LOGPATH_ARGUMENT_NAME);
expectedCommand.add(ManagedMongoDbLifecycleManager.DEFAULT_MONGO_LOGPATH);
expectedCommand.add(ManagedMongoDbLifecycleManager.NONE_JOURNALING_ENABLED);
expectedCommand.add("myArgument");
expectedCommand.add("myValue");
managedMongoDb.after();
verify(commandLineExecutor).startProcessInDirectoryAndArguments(
targetPath.toString(), expectedCommand);
}
}