Github user kirklund commented on a diff in the pull request:

    https://github.com/apache/geode/pull/699#discussion_r132592382
  
    --- Diff: 
geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherLocalIntegrationTest.java
 ---
    @@ -14,745 +14,270 @@
      */
     package org.apache.geode.distributed;
     
    -import org.apache.geode.distributed.AbstractLauncher.Status;
    +import static 
org.apache.geode.distributed.AbstractLauncher.Status.NOT_RESPONDING;
    +import static org.apache.geode.distributed.AbstractLauncher.Status.ONLINE;
    +import static org.apache.geode.distributed.AbstractLauncher.Status.STOPPED;
    +import static 
org.apache.geode.distributed.ConfigurationProperties.DISABLE_AUTO_RECONNECT;
    +import static 
org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
    +import static 
org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
    +import static org.apache.geode.distributed.ConfigurationProperties.NAME;
    +import static org.assertj.core.api.Assertions.assertThat;
    +import static org.assertj.core.api.Assertions.assertThatThrownBy;
    +
    +import java.io.File;
    +import java.net.BindException;
    +import java.net.InetAddress;
    +import java.util.Collections;
    +
    +import org.junit.After;
    +import org.junit.Before;
    +import org.junit.Test;
    +import org.junit.experimental.categories.Category;
    +
     import org.apache.geode.distributed.LocatorLauncher.Builder;
     import org.apache.geode.distributed.LocatorLauncher.LocatorState;
     import org.apache.geode.distributed.internal.InternalLocator;
    -import org.apache.geode.internal.*;
    -import org.apache.geode.internal.net.SocketCreatorFactory;
    +import org.apache.geode.internal.GemFireVersion;
     import org.apache.geode.internal.process.ProcessControllerFactory;
     import org.apache.geode.internal.process.ProcessType;
    -import org.apache.geode.internal.process.ProcessUtils;
    -import org.apache.geode.internal.security.SecurableCommunicationChannel;
     import org.apache.geode.test.junit.categories.IntegrationTest;
    -import 
org.apache.geode.test.junit.runners.CategoryWithParameterizedRunnerFactory;
    -import org.junit.After;
    -import org.junit.Before;
    -import org.junit.Ignore;
    -import org.junit.Test;
    -import org.junit.experimental.categories.Category;
    -import org.junit.runner.RunWith;
    -import org.junit.runners.Parameterized;
    -
    -import java.io.File;
    -import java.lang.management.ManagementFactory;
    -import java.net.BindException;
    -import java.net.InetAddress;
    -
    -import static org.apache.geode.distributed.ConfigurationProperties.*;
    -import static org.junit.Assert.*;
     
     /**
    - * Tests usage of LocatorLauncher as a local API in existing JVM.
    + * Integration tests for using {@link LocatorLauncher} as an in-process 
API within an existing JVM.
      *
      * @since GemFire 8.0
      */
     @Category(IntegrationTest.class)
    -@RunWith(Parameterized.class)
    
-@Parameterized.UseParametersRunnerFactory(CategoryWithParameterizedRunnerFactory.class)
    -public class LocatorLauncherLocalIntegrationTest
    -    extends AbstractLocatorLauncherIntegrationTestCase {
    +public class LocatorLauncherLocalIntegrationTest extends 
LocatorLauncherIntegrationTestCase {
     
       @Before
    -  public final void setUpLocatorLauncherLocalIntegrationTest() throws 
Exception {
    +  public void setUpLocatorLauncherLocalIntegrationTest() throws Exception {
         disconnectFromDS();
    -    System.setProperty(ProcessType.TEST_PREFIX_PROPERTY, getUniqueName() + 
"-");
    +    System.setProperty(ProcessType.PROPERTY_TEST_PREFIX, getUniqueName() + 
"-");
    +    assertThat(new ProcessControllerFactory().isAttachAPIFound()).isTrue();
       }
     
       @After
    -  public final void tearDownLocatorLauncherLocalIntegrationTest() throws 
Exception {
    +  public void tearDownLocatorLauncherLocalIntegrationTest() throws 
Exception {
         disconnectFromDS();
       }
     
       @Test
    -  public void testBuilderSetProperties() throws Throwable {
    -    this.launcher = new 
Builder().setForce(true).setMemberName(getUniqueName())
    -        
.setPort(this.locatorPort).setWorkingDirectory(this.workingDirectory)
    -        .set(CLUSTER_CONFIGURATION_DIR, this.clusterConfigDirectory)
    -        .set(DISABLE_AUTO_RECONNECT, "true").set(LOG_LEVEL, 
"config").set(MCAST_PORT, "0").build();
    -
    -    try {
    -      assertEquals(Status.ONLINE, this.launcher.start().getStatus());
    -      waitForLocatorToStart(this.launcher, true);
    -
    -      final InternalLocator locator = this.launcher.getLocator();
    -      assertNotNull(locator);
    -
    -      final DistributedSystem distributedSystem = 
locator.getDistributedSystem();
    -
    -      assertNotNull(distributedSystem);
    -      assertEquals("true", 
distributedSystem.getProperties().getProperty(DISABLE_AUTO_RECONNECT));
    -      assertEquals("0", 
distributedSystem.getProperties().getProperty(MCAST_PORT));
    -      assertEquals("config", 
distributedSystem.getProperties().getProperty(LOG_LEVEL));
    -      assertEquals(getUniqueName(), 
distributedSystem.getProperties().getProperty(NAME));
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    -
    -    try {
    -      assertEquals(Status.STOPPED, this.launcher.stop().getStatus());
    -      assertNull(this.launcher.getLocator());
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    +  public void usesLocatorPortAsDefaultPort() throws Exception {
    +    launcher = givenLocatorLauncher();
    +
    +    assertThat(launcher.getPort()).isEqualTo(defaultLocatorPort);
       }
     
       @Test
    -  public void testIsAttachAPIFound() throws Exception {
    -    final ProcessControllerFactory factory = new 
ProcessControllerFactory();
    -    assertTrue(factory.isAttachAPIFound());
    +  public void startReturnsOnline() throws Exception {
    +    launcher = givenLocatorLauncher();
    +
    +    assertThat(launcher.start().getStatus()).isEqualTo(ONLINE);
       }
     
       @Test
    -  public void testStartCreatesPidFile() throws Throwable {
    -    this.launcher = new 
Builder().setMemberName(getUniqueName()).setPort(this.locatorPort)
    -        .setRedirectOutput(true).setWorkingDirectory(this.workingDirectory)
    -        .set(CLUSTER_CONFIGURATION_DIR, 
this.clusterConfigDirectory).set(LOG_LEVEL, "config")
    -        .build();
    -
    -    try {
    -      this.launcher.start();
    -      waitForLocatorToStart(this.launcher);
    -      assertEquals(Status.ONLINE, this.launcher.status().getStatus());
    -
    -      // validate the pid file and its contents
    -      this.pidFile = new File(this.temporaryFolder.getRoot(), 
ProcessType.LOCATOR.getPidFileName());
    -      assertTrue(this.pidFile.exists());
    -      final int pid = readPid(this.pidFile);
    -      assertTrue(pid > 0);
    -      assertTrue(ProcessUtils.isProcessAlive(pid));
    -      assertEquals(getPid(), pid);
    -
    -      assertEquals(Status.ONLINE, this.launcher.status().getStatus());
    -
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    -
    -    try {
    -      assertEquals(Status.STOPPED, this.launcher.stop().getStatus());
    -      waitForFileToDelete(this.pidFile);
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    +  public void startWithPortUsesPort() throws Exception {
    +    LocatorLauncher launcher = 
startLocator(newBuilder().setPort(defaultLocatorPort));
    +
    +    
assertThat(launcher.getLocator().getPort()).isEqualTo(defaultLocatorPort);
       }
     
       @Test
    -  public void testStartDeletesStaleControlFiles() throws Throwable {
    -    // create existing control files
    -    this.stopRequestFile =
    -        new File(this.temporaryFolder.getRoot(), 
ProcessType.LOCATOR.getStopRequestFileName());
    -    this.stopRequestFile.createNewFile();
    -    assertTrue(this.stopRequestFile.exists());
    -
    -    this.statusRequestFile =
    -        new File(this.temporaryFolder.getRoot(), 
ProcessType.LOCATOR.getStatusRequestFileName());
    -    this.statusRequestFile.createNewFile();
    -    assertTrue(this.statusRequestFile.exists());
    -
    -    this.statusFile =
    -        new File(this.temporaryFolder.getRoot(), 
ProcessType.LOCATOR.getStatusFileName());
    -    this.statusFile.createNewFile();
    -    assertTrue(this.statusFile.exists());
    -
    -    // build and start the locator
    -    final Builder builder = new 
Builder().setMemberName(getUniqueName()).setPort(this.locatorPort)
    -        .setRedirectOutput(true).setWorkingDirectory(this.workingDirectory)
    -        .set(CLUSTER_CONFIGURATION_DIR, 
this.clusterConfigDirectory).set(LOG_LEVEL, "config");
    -
    -    assertFalse(builder.getForce());
    -    this.launcher = builder.build();
    -    assertFalse(this.launcher.isForcing());
    -    this.launcher.start();
    -
    -    try {
    -      waitForLocatorToStart(this.launcher);
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    -
    -    try {
    -      // validate the pid file and its contents
    -      this.pidFile = new File(this.temporaryFolder.getRoot(), 
ProcessType.LOCATOR.getPidFileName());
    -      assertTrue(this.pidFile.exists());
    -      final int pid = readPid(this.pidFile);
    -      assertTrue(pid > 0);
    -      assertTrue(ProcessUtils.isProcessAlive(pid));
    -      assertEquals(getPid(), pid);
    -
    -      // validate stale control files were deleted
    -      assertFalse(stopRequestFile.exists());
    -      assertFalse(statusRequestFile.exists());
    -      assertFalse(statusFile.exists());
    -
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    -
    -    try {
    -      assertEquals(Status.STOPPED, this.launcher.stop().getStatus());
    -      waitForFileToDelete(this.pidFile);
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    +  public void startWithPortZeroUsesAnEphemeralPort() throws Exception {
    +    LocatorLauncher launcher = startLocator(newBuilder().setPort(0));
    +
    +    assertThat(launcher.getLocator().getPort()).isGreaterThan(0);
    +    assertThat(launcher.getLocator().isPeerLocator()).isTrue();
       }
     
       @Test
    -  public void testStartOverwritesStalePidFile() throws Throwable {
    -    // create existing pid file
    -    this.pidFile = new File(this.temporaryFolder.getRoot(), 
ProcessType.LOCATOR.getPidFileName());
    -    assertFalse("Integer.MAX_VALUE shouldn't be the same as local pid " + 
Integer.MAX_VALUE,
    -        Integer.MAX_VALUE == ProcessUtils.identifyPid());
    -    writePid(this.pidFile, Integer.MAX_VALUE);
    -
    -    // build and start the locator
    -    final Builder builder = new 
Builder().setMemberName(getUniqueName()).setPort(this.locatorPort)
    -        .setRedirectOutput(true).setWorkingDirectory(this.workingDirectory)
    -        .set(CLUSTER_CONFIGURATION_DIR, 
this.clusterConfigDirectory).set(LOG_LEVEL, "config");
    -
    -    assertFalse(builder.getForce());
    -    this.launcher = builder.build();
    -    assertFalse(this.launcher.isForcing());
    -    this.launcher.start();
    -
    -    try {
    -      waitForLocatorToStart(this.launcher);
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    -
    -    try {
    -      // validate the pid file and its contents
    -      assertTrue(this.pidFile.exists());
    -      final int pid = readPid(this.pidFile);
    -      assertTrue(pid > 0);
    -      assertTrue(ProcessUtils.isProcessAlive(pid));
    -      assertEquals(getPid(), pid);
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    -
    -    try {
    -      assertEquals(Status.STOPPED, this.launcher.stop().getStatus());
    -      waitForFileToDelete(this.pidFile);
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    +  public void startUsesBuilderValues() throws Exception {
    +    LocatorLauncher launcher = 
startLocator(newBuilder().setPort(nonDefaultLocatorPort));
    +
    +    InternalLocator locator = launcher.getLocator();
    +    assertThat(locator.getPort()).isEqualTo(nonDefaultLocatorPort);
    +
    +    DistributedSystem system = locator.getDistributedSystem();
    +    
assertThat(system.getProperties().getProperty(DISABLE_AUTO_RECONNECT)).isEqualTo("true");
    +    
assertThat(system.getProperties().getProperty(LOG_LEVEL)).isEqualTo("config");
    +    
assertThat(system.getProperties().getProperty(MCAST_PORT)).isEqualTo("0");
    +    
assertThat(system.getProperties().getProperty(NAME)).isEqualTo(getUniqueName());
       }
     
       @Test
    -  @Ignore("Need to rewrite this without using dunit.Host")
    -  public void testStartUsingForceOverwritesExistingPidFile() throws 
Throwable {}
    -  /*
    -   * assertTrue(getUniqueName() + " is broken if PID == Integer.MAX_VALUE",
    -   * ProcessUtils.identifyPid() != Integer.MAX_VALUE);
    -   * 
    -   * // create existing pid file this.pidFile = new 
File(ProcessType.LOCATOR.getPidFileName());
    -   * final int realPid = Host.getHost(0).getVM(3).invoke(() -> 
ProcessUtils.identifyPid());
    -   * assertFalse(realPid == ProcessUtils.identifyPid()); 
writePid(this.pidFile, realPid);
    -   * 
    -   * // build and start the locator final Builder builder = new Builder() 
.setForce(true)
    -   * .setMemberName(getUniqueName()) .setPort(this.locatorPort) 
.setRedirectOutput(true)
    -   * 
    -   * assertTrue(builder.getForce()); this.launcher = builder.build();
    -   * assertTrue(this.launcher.isForcing()); this.launcher.start();
    -   * 
    -   * // collect and throw the FIRST failure Throwable failure = null;
    -   * 
    -   * try { waitForLocatorToStart(this.launcher);
    -   * 
    -   * // validate the pid file and its contents 
assertTrue(this.pidFile.exists()); final int pid =
    -   * readPid(this.pidFile); assertTrue(pid > 0); 
assertTrue(ProcessUtils.isProcessAlive(pid));
    -   * assertIndexDetailsEquals(getPid(), pid);
    -   * 
    -   * // validate log file was created final String logFileName = 
getUniqueName()+".log";
    -   * assertTrue("Log file should exist: " + logFileName, new 
File(logFileName).exists());
    -   * 
    -   * } catch (Throwable e) { logger.error(e); if (failure == null) { 
failure = e; } }
    -   * 
    -   * try { assertIndexDetailsEquals(Status.STOPPED, 
this.launcher.stop().getStatus());
    -   * waitForFileToDelete(this.pidFile); } catch (Throwable e) { 
logger.error(e); if (failure ==
    -   * null) { failure = e; } }
    -   * 
    -   * if (failure != null) { throw failure; } } // 
testStartUsingForceOverwritesExistingPidFile
    -   */
    +  public void startCreatesPidFile() throws Exception {
    +    startLocator();
    +
    +    assertThat(getPidFile()).exists();
    +  }
    +
    +  @Test
    +  public void pidFileContainsServerPid() throws Exception {
    +    startLocator();
    +
    +    assertThat(getLocatorPid()).isEqualTo(localPid);
    +  }
    +
    +  @Test
    +  public void startDeletesStaleControlFiles() throws Exception {
    +    File stopRequestFile = 
givenControlFile(getProcessType().getStopRequestFileName());
    +    File statusRequestFile = 
givenControlFile(getProcessType().getStatusRequestFileName());
    +    File statusFile = 
givenControlFile(getProcessType().getStatusFileName());
    +
    +    startLocator();
    +
    +    assertDeletionOf(stopRequestFile);
    +    assertDeletionOf(statusRequestFile);
    +    assertDeletionOf(statusFile);
    +  }
     
       @Test
    -  public void testStartWithDefaultPortInUseFails() throws Throwable {
    -    // Test makes no sense in this case
    -    if (this.locatorPort == 0) {
    -      return;
    -    }
    -
    -    this.socket =
    -        
SocketCreatorFactory.getSocketCreatorForComponent(SecurableCommunicationChannel.CLUSTER)
    -            .createServerSocket(this.locatorPort, 50, null, -1);
    -    assertTrue(this.socket.isBound());
    -    assertFalse(this.socket.isClosed());
    -    assertFalse(AvailablePort.isPortAvailable(this.locatorPort, 
AvailablePort.SOCKET));
    -
    -    
assertNotNull(System.getProperty(DistributionLocator.TEST_OVERRIDE_DEFAULT_PORT_PROPERTY));
    -    assertEquals(this.locatorPort,
    -        
Integer.valueOf(System.getProperty(DistributionLocator.TEST_OVERRIDE_DEFAULT_PORT_PROPERTY))
    -            .intValue());
    -    assertFalse(AvailablePort.isPortAvailable(this.locatorPort, 
AvailablePort.SOCKET));
    -
    -    this.launcher = new 
Builder().setMemberName(getUniqueName()).setRedirectOutput(true)
    -        .setWorkingDirectory(this.workingDirectory)
    -        .set(CLUSTER_CONFIGURATION_DIR, 
this.clusterConfigDirectory).set(LOG_LEVEL, "config")
    -        .build();
    -
    -    assertEquals(this.locatorPort, this.launcher.getPort().intValue());
    -
    -    RuntimeException expected = null;
    -    try {
    -      this.launcher.start();
    -
    -      // why did it not fail like it's supposed to?
    -      final String property =
    -          
System.getProperty(DistributionLocator.TEST_OVERRIDE_DEFAULT_PORT_PROPERTY);
    -      assertNotNull(property);
    -      assertEquals(this.locatorPort, Integer.valueOf(property).intValue());
    -      assertFalse(AvailablePort.isPortAvailable(this.locatorPort, 
AvailablePort.SOCKET));
    -      assertEquals(this.locatorPort, this.launcher.getPort().intValue());
    -      assertEquals(this.locatorPort, this.socket.getLocalPort());
    -      assertTrue(this.socket.isBound());
    -      assertFalse(this.socket.isClosed());
    -
    -      fail("LocatorLauncher start should have thrown RuntimeException 
caused by BindException");
    -    } catch (RuntimeException e) {
    -      expected = e;
    -      assertNotNull(expected.getMessage());
    -      // BindException text varies by platform
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    -
    -    try {
    -      assertNotNull(expected);
    -      final Throwable cause = expected.getCause();
    -      assertNotNull(cause);
    -      assertTrue(cause instanceof BindException);
    -      // BindException string varies by platform
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    -
    -    try {
    -      this.pidFile = new File(this.temporaryFolder.getRoot(), 
ProcessType.LOCATOR.getPidFileName());
    -      assertFalse("Pid file should not exist: " + this.pidFile, 
this.pidFile.exists());
    -
    -      // creation of log file seems to be random -- look into why sometime
    -      final String logFileName = getUniqueName() + ".log";
    -      assertFalse("Log file should not exist: " + logFileName,
    -          new File(this.temporaryFolder.getRoot(), logFileName).exists());
    -
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    -
    -    // just in case the launcher started...
    -    LocatorState status = null;
    -    try {
    -      status = this.launcher.stop();
    -    } catch (Throwable t) {
    -      // ignore
    -    }
    -
    -    try {
    -      waitForFileToDelete(this.pidFile);
    -      assertEquals(getExpectedStopStatusForNotRunning(), 
status.getStatus());
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    +  public void startOverwritesStalePidFile() throws Exception {
    +    givenPidFile(fakePid);
    +
    +    startLocator();
    +
    +    assertThat(getLocatorPid()).isNotEqualTo(fakePid);
       }
     
       @Test
    -  @Ignore("Need to rewrite this without using dunit.Host")
    -  public void testStartWithExistingPidFileFails()
    -      throws Throwable {}/*
    -                          * // create existing pid file final int realPid =
    -                          * Host.getHost(0).getVM(3).invoke(() -> 
ProcessUtils.identifyPid());
    -                          * assertFalse("Remote pid shouldn't be the same 
as local pid " + realPid,
    -                          * realPid == ProcessUtils.identifyPid());
    -                          * 
    -                          * this.pidFile = new 
File(ProcessType.LOCATOR.getPidFileName());
    -                          * writePid(this.pidFile, realPid);
    -                          * 
    -                          * // build and start the locator final Builder 
builder = new Builder()
    -                          * .setMemberName(getUniqueName()) 
.setPort(this.locatorPort)
    -                          * .setRedirectOutput(true) .set(logLevel, 
"config");
    -                          * 
    -                          * assertFalse(builder.getForce()); this.launcher 
= builder.build();
    -                          * assertFalse(this.launcher.isForcing());
    -                          * 
    -                          * // collect and throw the FIRST failure 
Throwable failure = null;
    -                          * RuntimeException expected = null;
    -                          * 
    -                          * try { this.launcher.start();
    -                          * fail("LocatorLauncher start should have thrown 
RuntimeException caused by FileAlreadyExistsException"
    -                          * ); } catch (RuntimeException e) { expected = e;
    -                          * assertNotNull(expected.getMessage()); 
assertTrue(expected.getMessage(),
    -                          * expected.getMessage().
    -                          * contains("A PID file already exists and a 
Locator may be running in"));
    -                          * 
assertIndexDetailsEquals(RuntimeException.class, expected.getClass()); }
    -                          * catch (Throwable e) { logger.error(e); if 
(failure == null) { failure =
    -                          * e; } }
    -                          * 
    -                          * // just in case the launcher started... 
LocatorState status = null; try
    -                          * { status = this.launcher.stop(); } catch 
(Throwable t) { // ignore }
    -                          * 
    -                          * try { assertNotNull(expected); final Throwable 
cause =
    -                          * expected.getCause(); assertNotNull(cause); 
assertTrue(cause instanceof
    -                          * FileAlreadyExistsException);
    -                          * assertTrue(cause.getMessage().contains("Pid 
file already exists: "));
    -                          * 
assertTrue(cause.getMessage().contains("vf.gf.locator.pid for process "
    -                          * + realPid)); } catch (Throwable e) { 
logger.error(e); if (failure ==
    -                          * null) { failure = e; } }
    -                          * 
    -                          * try { delete(this.pidFile); final Status 
theStatus = status.getStatus();
    -                          * assertFalse(theStatus == Status.STARTING); 
assertFalse(theStatus ==
    -                          * Status.ONLINE); } catch (Throwable e) { 
logger.error(e); if (failure ==
    -                          * null) { failure = e; } }
    -                          * 
    -                          * if (failure != null) { throw failure; } } //
    -                          * testStartWithExistingPidFileFails
    -                          */
    +  public void startWithDefaultPortInUseFailsWithBindException() throws 
Exception {
    +    givenLocatorPortInUse(defaultLocatorPort);
    +
    +    launcher = new Builder().build();
    +
    +    assertThatThrownBy(() -> 
launcher.start()).isInstanceOf(RuntimeException.class)
    +        .hasCauseInstanceOf(BindException.class);
    +  }
     
       @Test
    -  public void testStartUsingPort() throws Throwable {
    -    // generate one free port and then use it instead of default
    -    final int freeTCPPort = 
AvailablePortHelper.getRandomAvailableTCPPort();
    -    assertTrue(AvailablePort.isPortAvailable(freeTCPPort, 
AvailablePort.SOCKET));
    -
    -    this.launcher = new 
Builder().setMemberName(getUniqueName()).setPort(freeTCPPort)
    -        .setRedirectOutput(true).setWorkingDirectory(this.workingDirectory)
    -        .set(CLUSTER_CONFIGURATION_DIR, 
this.clusterConfigDirectory).set(LOG_LEVEL, "config")
    -        .build();
    -
    -    int pid = 0;
    -    try {
    -      // if start succeeds without throwing exception then #47778 is fixed
    -      this.launcher.start();
    -      waitForLocatorToStart(this.launcher);
    -
    -      // validate the pid file and its contents
    -      this.pidFile = new File(this.temporaryFolder.getRoot(), 
ProcessType.LOCATOR.getPidFileName());
    -      assertTrue(pidFile.exists());
    -      pid = readPid(pidFile);
    -      assertTrue(pid > 0);
    -      assertTrue(ProcessUtils.isProcessAlive(pid));
    -      assertEquals(getPid(), pid);
    -
    -      // verify locator did not use default port
    -      assertTrue(AvailablePort.isPortAvailable(this.locatorPort, 
AvailablePort.SOCKET));
    -
    -      final LocatorState status = this.launcher.status();
    -      final String portString = status.getPort();
    -      assertEquals("Port should be \"" + freeTCPPort + "\" instead of " + 
portString,
    -          String.valueOf(freeTCPPort), portString);
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    -
    -    // stop the locator
    -    try {
    -      assertEquals(Status.STOPPED, this.launcher.stop().getStatus());
    -      waitForFileToDelete(this.pidFile);
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    +  public void startWithLocatorPortInUseFailsWithBindException() throws 
Exception {
    +    givenServerPortInUse(nonDefaultLocatorPort);
    +
    +    launcher = new Builder().setPort(nonDefaultLocatorPort).build();
    +
    +    assertThatThrownBy(() -> 
this.launcher.start()).isInstanceOf(RuntimeException.class)
    +        .hasCauseInstanceOf(BindException.class);
       }
     
       @Test
    -  public void testStartUsingPortInUseFails() throws Throwable {
    -    // Test makes no sense in this case
    -    if (this.locatorPort == 0) {
    -      return;
    -    }
    -
    -    // generate one free port and then use it instead of default
    -    this.socket =
    -        
SocketCreatorFactory.getSocketCreatorForComponent(SecurableCommunicationChannel.CLUSTER)
    -            .createServerSocket(this.locatorPort, 50, null, -1);
    -
    -    this.launcher = new 
Builder().setMemberName(getUniqueName()).setPort(this.locatorPort)
    -        .setRedirectOutput(true).setWorkingDirectory(this.workingDirectory)
    -        .set(CLUSTER_CONFIGURATION_DIR, 
this.clusterConfigDirectory).set(LOG_LEVEL, "config")
    -        .build();
    -
    -    RuntimeException expected = null;
    -    try {
    -      this.launcher.start();
    -      fail("LocatorLauncher start should have thrown RuntimeException 
caused by BindException");
    -    } catch (RuntimeException e) {
    -      expected = e;
    -      assertNotNull(expected.getMessage());
    -      // BindException string varies by platform
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    -
    -    try {
    -      assertNotNull(expected);
    -      final Throwable cause = expected.getCause();
    -      assertNotNull(cause);
    -      assertTrue(cause instanceof BindException);
    -      // BindException string varies by platform
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    -
    -    try {
    -      this.pidFile = new File(this.temporaryFolder.getRoot(), 
ProcessType.LOCATOR.getPidFileName());
    -      assertFalse("Pid file should not exist: " + this.pidFile, 
this.pidFile.exists());
    -
    -      // creation of log file seems to be random -- look into why sometime
    -      final String logFileName = getUniqueName() + ".log";
    -      assertFalse("Log file should not exist: " + logFileName,
    -          new File(this.temporaryFolder.getRoot(), logFileName).exists());
    -
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    -
    -    // just in case the launcher started...
    -    LocatorState status = null;
    -    try {
    -      status = this.launcher.stop();
    -    } catch (Throwable t) {
    -      // ignore
    -    }
    -
    -    try {
    -      waitForFileToDelete(this.pidFile);
    -      assertEquals(getExpectedStopStatusForNotRunning(), 
status.getStatus());
    -    } catch (Throwable e) {
    -      this.errorCollector.addError(e);
    -    }
    +  public void statusWithPidReturnsOnlineWithDetails() throws Exception {
    +    givenRunningLocator();
    +
    +    LocatorState locatorState = new 
Builder().setPid(localPid).build().status();
    +
    +    assertThat(locatorState.getStatus()).isEqualTo(ONLINE);
    +    assertThat(locatorState.getClasspath()).isEqualTo(getClassPath());
    +    
assertThat(locatorState.getGemFireVersion()).isEqualTo(GemFireVersion.getGemFireVersion());
    +    
assertThat(locatorState.getHost()).isEqualTo(InetAddress.getLocalHost().getCanonicalHostName());
    --- End diff --
    
    It could fail in the Geode Nightly Build too. We'll have to keep an eye on 
this...


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to