package com.lordofthejars.nosqlunit.infinispan; import static com.lordofthejars.nosqlunit.infinispan.ManagedInfinispan.ManagedInfinispanRuleBuilder.newManagedInfinispanRule; 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.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.List; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; 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 WhenManagedInfinispanLifecycleIsManaged { @Mock private OperatingSystemResolver operatingSystemResolver; @Before public void setUp() { MockitoAnnotations.initMocks(this); } @Test public void managed_infinispan_should_be_registered_and_started_with_default_parameters() throws Throwable { System.setProperty("INFINISPAN_HOME", "/opt/infinispan-5.1.6"); 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); ManagedInfinispan managedInfinispan = newManagedInfinispanRule().build(); managedInfinispan.managedInfinispanLifecycleManager.setCommandLineExecutor(commandLineExecutor); managedInfinispan.managedInfinispanLifecycleManager.setOperatingSystemResolver(operatingSystemResolver); managedInfinispan.before(); assertThat(ConnectionManagement.getInstance().isConnectionRegistered("127.0.0.1", ManagedInfinispanLifecycleManager.DEFAULT_PORT), is(true)); managedInfinispan.after(); assertThat(ConnectionManagement.getInstance().isConnectionRegistered("127.0.0.1", ManagedInfinispanLifecycleManager.DEFAULT_PORT), is(false)); System.clearProperty("INFINISPAN_HOME"); } @Test public void infinispan_should_be_started_in_Linux() throws Throwable { System.setProperty("INFINISPAN_HOME", "/opt/infinispan-5.1.6"); 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); ManagedInfinispan managedInfinispan = newManagedInfinispanRule().build(); managedInfinispan.managedInfinispanLifecycleManager.setCommandLineExecutor(commandLineExecutor); managedInfinispan.managedInfinispanLifecycleManager.setOperatingSystemResolver(operatingSystemResolver); managedInfinispan.before(); List<String> expectedCommand = new ArrayList<String>(); expectedCommand.add("/opt/infinispan-5.1.6"+File.separatorChar+ManagedInfinispanLifecycleManager.INFINISPAN_BINARY_DIRECTORY+File.separatorChar+ManagedInfinispanLifecycleManager.INFINISPAN_EXECUTABLE_X); expectedCommand.add(ManagedInfinispanLifecycleManager.PORT_COMMAND_LINE_ARGUMENT_NAME); expectedCommand.add(Integer.toString(ManagedInfinispanLifecycleManager.DEFAULT_PORT)); expectedCommand.add(ManagedInfinispanLifecycleManager.PROTOCOL_COMMAND_LINE_ARGUMENT_NAME); expectedCommand.add(ManagedInfinispanLifecycleManager.PROTOCOL_COMMAND_LINE_DEFAULT_VALUE); managedInfinispan.after(); verify(commandLineExecutor).startProcessInDirectoryAndArguments( ManagedInfinispanLifecycleManager.DEFAULT_INFINISPAN_TARGET_PATH, expectedCommand); System.clearProperty("INFINISPAN_HOME"); } @Test public void infinispan_should_be_started_in_Linux_with_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); System.clearProperty("INFINISPAN_HOME"); ManagedInfinispan managedInfinispan = newManagedInfinispanRule().infinispanPath("/opt/infinispan-5.1.6").build(); managedInfinispan.managedInfinispanLifecycleManager.setCommandLineExecutor(commandLineExecutor); managedInfinispan.managedInfinispanLifecycleManager.setOperatingSystemResolver(operatingSystemResolver); managedInfinispan.before(); List<String> expectedCommand = new ArrayList<String>(); expectedCommand.add("/opt/infinispan-5.1.6"+File.separatorChar+ManagedInfinispanLifecycleManager.INFINISPAN_BINARY_DIRECTORY+File.separatorChar+ManagedInfinispanLifecycleManager.INFINISPAN_EXECUTABLE_X); expectedCommand.add(ManagedInfinispanLifecycleManager.PORT_COMMAND_LINE_ARGUMENT_NAME); expectedCommand.add(Integer.toString(ManagedInfinispanLifecycleManager.DEFAULT_PORT)); expectedCommand.add(ManagedInfinispanLifecycleManager.PROTOCOL_COMMAND_LINE_ARGUMENT_NAME); expectedCommand.add(ManagedInfinispanLifecycleManager.PROTOCOL_COMMAND_LINE_DEFAULT_VALUE); managedInfinispan.after(); verify(commandLineExecutor).startProcessInDirectoryAndArguments( ManagedInfinispanLifecycleManager.DEFAULT_INFINISPAN_TARGET_PATH, expectedCommand); } @Test public void infinispan_should_be_started_in_MacOsX() throws Throwable { System.setProperty("INFINISPAN_HOME", "/opt/infinispan-5.1.6"); 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); ManagedInfinispan managedInfinispan = newManagedInfinispanRule().build(); managedInfinispan.managedInfinispanLifecycleManager.setCommandLineExecutor(commandLineExecutor); managedInfinispan.managedInfinispanLifecycleManager.setOperatingSystemResolver(operatingSystemResolver); managedInfinispan.before(); List<String> expectedCommand = new ArrayList<String>(); expectedCommand.add("/opt/infinispan-5.1.6"+File.separatorChar+ManagedInfinispanLifecycleManager.INFINISPAN_BINARY_DIRECTORY+File.separatorChar+ManagedInfinispanLifecycleManager.INFINISPAN_EXECUTABLE_X); expectedCommand.add(ManagedInfinispanLifecycleManager.PORT_COMMAND_LINE_ARGUMENT_NAME); expectedCommand.add(Integer.toString(ManagedInfinispanLifecycleManager.DEFAULT_PORT)); expectedCommand.add(ManagedInfinispanLifecycleManager.PROTOCOL_COMMAND_LINE_ARGUMENT_NAME); expectedCommand.add(ManagedInfinispanLifecycleManager.PROTOCOL_COMMAND_LINE_DEFAULT_VALUE); managedInfinispan.after(); verify(commandLineExecutor).startProcessInDirectoryAndArguments( ManagedInfinispanLifecycleManager.DEFAULT_INFINISPAN_TARGET_PATH, expectedCommand); System.clearProperty("INFINISPAN_HOME"); } @Test public void infinispan_should_be_started_in_Windows() throws Throwable { System.setProperty("INFINISPAN_HOME", "C:/infinispan-5.1.6"); 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); ManagedInfinispan managedInfinispan = newManagedInfinispanRule().build(); managedInfinispan.managedInfinispanLifecycleManager.setCommandLineExecutor(commandLineExecutor); managedInfinispan.managedInfinispanLifecycleManager.setOperatingSystemResolver(operatingSystemResolver); managedInfinispan.before(); List<String> expectedCommand = new ArrayList<String>(); expectedCommand.add("C:/infinispan-5.1.6"+File.separatorChar+ManagedInfinispanLifecycleManager.INFINISPAN_BINARY_DIRECTORY+File.separatorChar+ManagedInfinispanLifecycleManager.INFINISPAN_EXECUTABLE_W); expectedCommand.add(ManagedInfinispanLifecycleManager.PORT_COMMAND_LINE_ARGUMENT_NAME); expectedCommand.add(Integer.toString(ManagedInfinispanLifecycleManager.DEFAULT_PORT)); expectedCommand.add(ManagedInfinispanLifecycleManager.PROTOCOL_COMMAND_LINE_ARGUMENT_NAME); expectedCommand.add(ManagedInfinispanLifecycleManager.PROTOCOL_COMMAND_LINE_DEFAULT_VALUE); managedInfinispan.after(); verify(commandLineExecutor).startProcessInDirectoryAndArguments( ManagedInfinispanLifecycleManager.DEFAULT_INFINISPAN_TARGET_PATH, expectedCommand); System.clearProperty("INFINISPAN_HOME"); } }