[ 
https://issues.apache.org/jira/browse/GEODE-3413?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16122135#comment-16122135
 ] 

ASF GitHub Bot commented on GEODE-3413:
---------------------------------------

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

    https://github.com/apache/geode/pull/699#discussion_r132542184
  
    --- Diff: 
geode-core/src/test/java/org/apache/geode/distributed/ServerLauncherRemoteIntegrationTestCase.java
 ---
    @@ -0,0 +1,270 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
    + * agreements. See the NOTICE file distributed with this work for 
additional information regarding
    + * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
    + * "License"); you may not use this file except in compliance with the 
License. You may obtain a
    + * copy of the License at
    + *
    + * http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software 
distributed under the License
    + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 
ANY KIND, either express
    + * or implied. See the License for the specific language governing 
permissions and limitations under
    + * the License.
    + */
    +package org.apache.geode.distributed;
    +
    +import static java.util.concurrent.TimeUnit.MINUTES;
    +import static 
org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
    +import static 
org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
    +import static 
org.apache.geode.distributed.internal.DistributionConfig.GEMFIRE_PREFIX;
    +import static 
org.apache.geode.internal.cache.AbstractCacheServer.TEST_OVERRIDE_DEFAULT_PORT_PROPERTY;
    +import static 
org.apache.geode.internal.process.ProcessUtils.isProcessAlive;
    +import static org.assertj.core.api.Assertions.assertThat;
    +
    +import java.io.File;
    +import java.io.IOException;
    +import java.io.UncheckedIOException;
    +import java.net.BindException;
    +import java.util.ArrayList;
    +import java.util.List;
    +import java.util.concurrent.atomic.AtomicBoolean;
    +
    +import org.junit.After;
    +import org.junit.Before;
    +
    +import org.apache.geode.distributed.AbstractLauncher.Status;
    +import org.apache.geode.internal.process.ProcessStreamReader;
    +import org.apache.geode.internal.process.ProcessStreamReader.InputListener;
    +
    +/**
    + * Abstract base class for integration tests of {@link ServerLauncher} as 
an application main in a
    + * forked JVM.
    + *
    + * @since GemFire 8.0
    + */
    +public abstract class ServerLauncherRemoteIntegrationTestCase
    +    extends ServerLauncherIntegrationTestCase implements UsesServerCommand 
{
    +
    +  private final AtomicBoolean threwBindException = new AtomicBoolean();
    +
    +  protected volatile Process process;
    +  protected volatile ProcessStreamReader processOutReader;
    +  protected volatile ProcessStreamReader processErrReader;
    +
    +  private ServerCommand serverCommand;
    +
    +  @Before
    +  public void setUp() throws Exception {
    +    serverCommand = new ServerCommand(this);
    +  }
    +
    +  @After
    +  public void tearDownAbstractServerLauncherRemoteIntegrationTestCase() 
throws Exception {
    +    if (this.process != null) {
    +      this.process.destroy();
    +      this.process = null;
    +    }
    +    if (this.processOutReader != null && 
this.processOutReader.isRunning()) {
    +      this.processOutReader.stop();
    +    }
    +    if (this.processErrReader != null && 
this.processErrReader.isRunning()) {
    +      this.processErrReader.stop();
    +    }
    +  }
    +
    +  @Override
    +  public List<String> getJvmArguments() {
    +    List<String> jvmArguments = new ArrayList<>();
    +    jvmArguments.add("-D" + GEMFIRE_PREFIX + LOG_LEVEL + "=config");
    +    jvmArguments.add("-D" + GEMFIRE_PREFIX + MCAST_PORT + "=0");
    +    jvmArguments
    +        .add("-D" + TEST_OVERRIDE_DEFAULT_PORT_PROPERTY + "=" + 
String.valueOf(defaultServerPort));
    +    return jvmArguments;
    +  }
    +
    +  @Override
    +  public String getName() {
    +    return getUniqueName();
    +  }
    +
    +  @Override
    +  public boolean getDisableDefaultServer() {
    +    return false;
    +  }
    +
    +  protected void assertThatServerThrewBindException() {
    +    assertThat(threwBindException.get()).isTrue();
    +  }
    +
    +  protected void assertThatServerThrew(final Class<? extends Throwable> 
throwableClass) {
    +    assertThat(threwBindException.get()).isTrue();
    +  }
    +
    +  protected ServerLauncher startServer(final ServerCommand command) {
    +    return awaitStart(command);
    +  }
    +
    +  protected ServerLauncher awaitStart(final ServerCommand command,
    +      final ProcessStreamReader.InputListener outListener,
    +      final ProcessStreamReader.InputListener errListener) throws 
Exception {
    +    executeCommandWithReaders(command.create(), outListener, errListener);
    +    ServerLauncher launcher = awaitStart(getWorkingDirectory());
    +    assertThat(process.isAlive()).isTrue();
    +    return launcher;
    +  }
    +
    +  protected ServerLauncher awaitStart(final ServerCommand command) {
    +    try {
    +      executeCommandWithReaders(command);
    +      ServerLauncher launcher = awaitStart(getWorkingDirectory());
    +      assertThat(process.isAlive()).isTrue();
    +      return launcher;
    +    } catch (IOException e) {
    +      throw new UncheckedIOException(e);
    +    }
    +  }
    +
    +  protected ServerLauncher awaitStart(final File workingDirectory) {
    +    try {
    +      this.launcher = new ServerLauncher.Builder()
    +          
.setWorkingDirectory(workingDirectory.getCanonicalPath()).build();
    +      ServerLauncher launcher = awaitStart(this.launcher);
    +      assertThat(process.isAlive()).isTrue();
    +      return launcher;
    +    } catch (IOException e) {
    +      throw new UncheckedIOException(e);
    +    }
    +  }
    +
    +  @Override
    +  protected ServerLauncher awaitStart(final ServerLauncher launcher) {
    +    await().until(() -> 
assertThat(launcher.status().getStatus()).isEqualTo(Status.ONLINE));
    +    assertThat(process.isAlive()).isTrue();
    +    return launcher;
    +  }
    +
    +  protected ServerLauncher awaitStart() {
    +    return awaitStart(this.launcher);
    +  }
    +
    +  protected void awaitStop() {
    +    await().until(() -> assertThat(this.process.isAlive()).isFalse());
    +  }
    +
    +  protected void assertStopOf(final Process process) {
    +    await().until(() -> assertThat(process.isAlive()).isFalse());
    +  }
    +
    +  protected Process getServerProcess() {
    +    return this.process;
    +  }
    +
    +  protected void startServerShouldFail(final ServerCommand command, final 
InputListener outListener,
    +      final InputListener errListener) throws IOException, 
InterruptedException {
    +    executeCommandWithReaders(command.create(), outListener, errListener);
    +    process.waitFor(2, MINUTES);
    +    assertThat(process.isAlive()).isFalse();
    +    assertThat(process.exitValue()).isEqualTo(1);
    +  }
    +
    +  protected void startServerShouldFail(final ServerCommand command)
    +      throws IOException, InterruptedException {
    +    startServerShouldFail(command, createBindExceptionListener("sysout", 
threwBindException),
    +        createBindExceptionListener("syserr", threwBindException));
    +  }
    +
    +  protected void startServerShouldFail() throws IOException, 
InterruptedException {
    +    startServerShouldFail(serverCommand);
    +  }
    +
    +  private InputListener createBindExceptionListener(final String name,
    +      final AtomicBoolean threwBindException) {
    +    return createExpectedListener(name, getUniqueName() + "#" + name, 
BindException.class.getName(),
    +        threwBindException);
    +  }
    +
    +  @Override
    +  protected ServerLauncher startServer() {
    +    return startServer(serverCommand);
    +  }
    +
    +  protected void assertThatProcessIsNotAlive() {
    +    assertThatProcessIsNotAlive(process);
    +  }
    +
    +  protected void assertThatProcessIsNotAlive(final Process process) {
    +    assertThat(process.isAlive()).isFalse();
    +  }
    +
    +  protected void assertProcessIsNotAlive() {
    --- End diff --
    
    All unused methods deleted.


> Overhaul launcher tests and process tests
> -----------------------------------------
>
>                 Key: GEODE-3413
>                 URL: https://issues.apache.org/jira/browse/GEODE-3413
>             Project: Geode
>          Issue Type: Improvement
>          Components: gfsh
>            Reporter: Kirk Lund
>            Assignee: Kirk Lund
>              Labels: LauncherTest, ProcessTest
>
> The launcher and process tests are closely related and in need of overhauling 
> to improve debugging and remove flakiness.
> In addition, the org.apache.geode.internal.process package is need of 
> improving the test code coverage.
> Launcher tests:
> * 
> geode-assembly/src/test/java/org/apache/geode/distributed/LocatorLauncherAssemblyIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/AbstractLauncherIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/AbstractLauncherServiceStatusTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/AbstractLauncherTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/LauncherMemberMXBeanIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherLocalFileIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherLocalIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherRemoteFileIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherRemoteIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherRemoteWithCustomLoggingIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherTest.java
> * geode-core/src/test/java/org/apache/geode/distributed/LocatorStateTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/ServerLauncherIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/ServerLauncherLocalFileIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/ServerLauncherLocalIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/ServerLauncherRemoteFileIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/ServerLauncherRemoteIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/ServerLauncherRemoteWithCustomLoggingIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/ServerLauncherRemoteWithCustomLoggingIntegrationTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/ServerLauncherTest.java
> * 
> geode-core/src/test/java/org/apache/geode/distributed/ServerLauncherWithProviderIntegrationTest.java
> Process tests:
> * 
> geode-core/src/test/java/org/apache/geode/internal/process/BlockingProcessStreamReaderJUnitTest.java
> * 
> geode-core/src/test/java/org/apache/geode/internal/process/FileProcessControllerIntegrationJUnitTest.java
> * 
> geode-core/src/test/java/org/apache/geode/internal/process/LocalProcessControllerJUnitTest.java
> * 
> geode-core/src/test/java/org/apache/geode/internal/process/LocalProcessLauncherDUnitTest.java
> * 
> geode-core/src/test/java/org/apache/geode/internal/process/LocalProcessLauncherJUnitTest.java
> * 
> geode-core/src/test/java/org/apache/geode/internal/process/NonBlockingProcessStreamReaderJUnitTest.java
> * 
> geode-core/src/test/java/org/apache/geode/internal/process/PidFileJUnitTest.java
> * 
> geode-core/src/test/java/org/apache/geode/internal/process/ProcessControllerFactoryJUnitTest.java



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to