package com.lordofthejars.nosqlunit.cassandra.integration; import static com.lordofthejars.nosqlunit.cassandra.ManagedCassandra.ManagedCassandraRuleBuilder.newManagedCassandraRule; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.anyList; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import me.prettyprint.cassandra.service.CassandraHost; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import com.lordofthejars.nosqlunit.cassandra.ManagedCassandra; import com.lordofthejars.nosqlunit.cassandra.ManagedCassandraLifecycleManager; import com.lordofthejars.nosqlunit.core.CommandLineExecutor; import com.lordofthejars.nosqlunit.core.ConnectionManagement; import com.lordofthejars.nosqlunit.core.OperatingSystem; import com.lordofthejars.nosqlunit.core.OperatingSystemResolver; public class WhenManagedCassandraLifecycleIsManaged { @Mock private OperatingSystemResolver operatingSystemResolver; @Before public void setUp() { MockitoAnnotations.initMocks(this); } @Test public void managed_cassandra_should_be_registered_and_started_with_default_parameters() throws Throwable { System.setProperty("CASSANDRA_HOME", "/opt/cassandra"); 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); ManagedCassandra managedCassandra = newManagedCassandraRule().build(); managedCassandra.getManagedCassandraLifecycleManager().setCommandLineExecutor(commandLineExecutor); managedCassandra.before(); assertThat(ConnectionManagement.getInstance().isConnectionRegistered("127.0.0.1", CassandraHost.DEFAULT_PORT), is(true)); managedCassandra.after(); assertThat(ConnectionManagement.getInstance().isConnectionRegistered("127.0.0.1", CassandraHost.DEFAULT_PORT), is(false)); System.clearProperty("CASSANDRA_HOME"); } @Test public void managed_cassandra_should_be_registered_and_started_with_custom_parameters() throws Throwable { System.setProperty("CASSANDRA_HOME", "/opt/cassandra"); 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); ManagedCassandra managedCassandra = newManagedCassandraRule().port(9191).build(); managedCassandra.getManagedCassandraLifecycleManager().setCommandLineExecutor(commandLineExecutor); managedCassandra.before(); assertThat(ConnectionManagement.getInstance().isConnectionRegistered("127.0.0.1", 9191), is(true)); managedCassandra.after(); assertThat(ConnectionManagement.getInstance().isConnectionRegistered("127.0.0.1", 9191), is(false)); System.clearProperty("CASSANDRA_HOME"); } @Test public void simulataneous_cassandra_should_start_only_one_instance() throws Throwable { System.setProperty("CASSANDRA_HOME", "/opt/cassandra"); 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); ManagedCassandra managedCassandra = newManagedCassandraRule().port(9191).build(); managedCassandra.getManagedCassandraLifecycleManager().setCommandLineExecutor(commandLineExecutor); managedCassandra.before(); assertThat(ConnectionManagement.getInstance().isConnectionRegistered("127.0.0.1", 9191), is(true)); ManagedCassandra managedCassandra2 = newManagedCassandraRule().port(9191).build(); managedCassandra2.getManagedCassandraLifecycleManager().setCommandLineExecutor(commandLineExecutor); managedCassandra2.before(); assertThat(ConnectionManagement.getInstance().isConnectionRegistered("127.0.0.1", 9191), is(true)); managedCassandra2.after(); assertThat(ConnectionManagement.getInstance().isConnectionRegistered("127.0.0.1", 9191), is(true)); managedCassandra.after(); assertThat(ConnectionManagement.getInstance().isConnectionRegistered("127.0.0.1", 9191), is(false)); System.clearProperty("CASSANDRA_HOME"); } @Test public void cassandra_should_be_started_using_java() throws Throwable { System.setProperty("CASSANDRA_HOME", "/opt/cassandra"); 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); ManagedCassandra managedCassandra = newManagedCassandraRule().port(9191).build(); managedCassandra.getManagedCassandraLifecycleManager().setCommandLineExecutor(commandLineExecutor); managedCassandra.before(); managedCassandra.after(); verify(commandLineExecutor).startProcessInDirectoryAndArguments(eq(ManagedCassandraLifecycleManager.DEFAULT_CASSANDRA_TARGET_PATH), anyList()); System.clearProperty("CASSANDRA_HOME"); } @Test public void cassandra_should_be_started_using_java_from_custom_location() throws Throwable { 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); ManagedCassandra managedCassandra = newManagedCassandraRule().cassandraPath("/opt/cassandra").port(9191) .build(); managedCassandra.getManagedCassandraLifecycleManager().setCommandLineExecutor(commandLineExecutor); managedCassandra.before(); managedCassandra.after(); verify(commandLineExecutor).startProcessInDirectoryAndArguments(eq(ManagedCassandraLifecycleManager.DEFAULT_CASSANDRA_TARGET_PATH), anyList()); } private List<String> getExpectedCommand() { List<String> expectedCommand = new ArrayList<String>(); String javaHome = System.getProperty("java.home"); expectedCommand.add(javaHome + "/bin/java"); expectedCommand.add("-ea"); expectedCommand.add("-javaagent:\"/opt/cassandra/lib/jamm-0.2.5.jar\""); expectedCommand.add("-Xms1G"); expectedCommand.add("-Xmx1G"); expectedCommand.add("-Dcassandra-foreground=yes"); expectedCommand.add("-cp"); expectedCommand .add("\"/opt/cassandra/conf\";\"/opt/cassandra/lib/high-scale-lib-1.1.2.jar\";\"/opt/cassandra/lib/avro-1.4.0-fixes.jar\";\"/opt/cassandra/lib/json-simple-1.1.jar\";\"/opt/cassandra/lib/servlet-api-2.5-20081211.jar\";\"/opt/cassandra/lib/compress-lzf-0.8.4.jar\";\"/opt/cassandra/lib/slf4j-log4j12-1.6.1.jar\";\"/opt/cassandra/lib/libthrift-0.7.0.jar\";\"/opt/cassandra/lib/snakeyaml-1.6.jar\";\"/opt/cassandra/lib/snappy-java-1.0.4.1.jar\";\"/opt/cassandra/lib/avro-1.4.0-sources-fixes.jar\";\"/opt/cassandra/lib/guava-r08.jar\";\"/opt/cassandra/lib/apache-cassandra-thrift-1.1.5.jar\";\"/opt/cassandra/lib/commons-lang-2.4.jar\";\"/opt/cassandra/lib/antlr-3.2.jar\";\"/opt/cassandra/lib/jackson-mapper-asl-1.9.2.jar\";\"/opt/cassandra/lib/jackson-core-asl-1.9.2.jar\";\"/opt/cassandra/lib/apache-cassandra-1.1.5.jar\";\"/opt/cassandra/lib/log4j-1.2.16.jar\";\"/opt/cassandra/lib/slf4j-api-1.6.1.jar\";\"/opt/cassandra/lib/jline-0.9.94.jar\";\"/opt/cassandra/lib/snaptree-0.1.jar\";\"/opt/cassandra/lib/jamm-0.2.5.jar\";\"/opt/cassandra/lib/concurrentlinkedhashmap-lru-1.3.jar\";\"/opt/cassandra/lib/commons-cli-1.1.jar\";\"/opt/cassandra/lib/metrics-core-2.0.3.jar\";\"/opt/cassandra/lib/commons-codec-1.2.jar\";\"/opt/cassandra/lib/apache-cassandra-clientutil-1.1.5.jar\""); expectedCommand.add("org.apache.cassandra.thrift.CassandraDaemon"); return expectedCommand; } }