[
https://issues.apache.org/jira/browse/GEODE-3413?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16122131#comment-16122131
]
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_r132542146
--- Diff:
geode-core/src/test/java/org/apache/geode/distributed/LauncherIntegrationTestCase.java
---
@@ -0,0 +1,505 @@
+/*
+ * 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.MCAST_PORT;
+import static org.apache.geode.internal.AvailablePort.SOCKET;
+import static org.apache.geode.internal.AvailablePort.isPortAvailable;
+import static org.apache.geode.internal.process.ProcessUtils.identifyPid;
+import static
org.apache.geode.internal.process.ProcessUtils.isProcessAlive;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertTrue;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.lang.management.ManagementFactory;
+import java.net.ServerSocket;
+import java.nio.file.Files;
+import java.util.List;
+import java.util.Properties;
+import java.util.concurrent.Callable;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.logging.log4j.Logger;
+import org.awaitility.Awaitility;
+import org.awaitility.core.ConditionFactory;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.contrib.java.lang.system.RestoreSystemProperties;
+import org.junit.rules.TemporaryFolder;
+import org.junit.rules.TestName;
+
+import org.apache.geode.distributed.internal.DistributionConfig;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
+import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.net.SocketCreatorFactory;
+import org.apache.geode.internal.process.PidUnavailableException;
+import org.apache.geode.internal.process.ProcessStreamReader.InputListener;
+import org.apache.geode.internal.process.ProcessType;
+import org.apache.geode.internal.process.ProcessUtils;
+import org.apache.geode.internal.process.lang.AvailablePid;
+import org.apache.geode.internal.util.StopWatch;
+import org.apache.geode.test.dunit.IgnoredException;
+
+/**
+ * Abstract base class for integration tests of both {@link
LocatorLauncher} and
+ * {@link ServerLauncher}.
+ *
+ * @since GemFire 8.0
+ */
+public abstract class LauncherIntegrationTestCase {
+ protected static final Logger logger = LogService.getLogger();
+
+ protected static final int WAIT_FOR_PROCESS_TO_DIE_TIMEOUT = 5 * 60 *
1000; // 5 minutes
+ protected static final int TIMEOUT_MILLISECONDS =
WAIT_FOR_PROCESS_TO_DIE_TIMEOUT;
+ protected static final int WAIT_FOR_FILE_CREATION_TIMEOUT = 10 * 1000;
// 10s
+ protected static final int WAIT_FOR_FILE_DELETION_TIMEOUT = 10 * 1000;
// 10s
+ protected static final int WAIT_FOR_MBEAN_TIMEOUT = 10 * 1000; // 10s
+ protected static final int INTERVAL_MILLISECONDS = 100;
+
+ protected static final int PREFERRED_FAKE_PID = 42;
+
+ private static final String EXPECTED_EXCEPTION_ADD =
+ "<ExpectedException action=add>{}</ExpectedException>";
+ private static final String EXPECTED_EXCEPTION_REMOVE =
+ "<ExpectedException action=remove>{}</ExpectedException>";
+ private static final String EXPECTED_EXCEPTION_MBEAN_NOT_REGISTERED =
+ "MBean Not Registered In GemFire Domain";
+
+ private IgnoredException ignoredException;
+
+ protected int localPid;
+ protected int fakePid;
+
+ protected volatile ServerSocket socket;
+
+ protected volatile File pidFile;
+ protected volatile File stopRequestFile;
+ protected volatile File statusRequestFile;
+ protected volatile File statusFile;
+
+ @Rule
+ public TestName testName = new TestName();
+
+ @Rule
+ public RestoreSystemProperties restoreSystemProperties = new
RestoreSystemProperties();
+
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ @Before
+ public void setUpAbstractLauncherIntegrationTestCase() throws Exception {
+ System.setProperty(DistributionConfig.GEMFIRE_PREFIX + MCAST_PORT,
Integer.toString(0));
+ ignoredException =
+
IgnoredException.addIgnoredException(EXPECTED_EXCEPTION_MBEAN_NOT_REGISTERED);
+ localPid = identifyPid();
+ fakePid = new AvailablePid().findAvailablePid(PREFERRED_FAKE_PID);
+ }
+
+ @After
+ public void tearDownAbstractLauncherIntegrationTestCase() throws
Exception {
+ ignoredException.remove();
+ if (this.socket != null) {
+ this.socket.close();
+ this.socket = null;
+ }
+ delete(this.pidFile);
+ delete(this.stopRequestFile);
+ delete(this.statusRequestFile);
+ delete(this.statusFile);
+ }
+
+ protected abstract ProcessType getProcessType();
+
+ protected String getStopRequestFileName() {
+ return getProcessType().getStopRequestFileName();
+ }
+
+ protected String getStatusRequestFileName() {
+ return getProcessType().getStatusRequestFileName();
+ }
+
+ protected String getStatusFileName() {
+ return getProcessType().getStatusFileName();
+ }
+
+ protected void givenEmptyWorkingDirectory() {
+ assertThat(getWorkingDirectory().listFiles()).hasSize(0);
+ }
+
+ protected List<String> getJvmArguments() {
+ return ManagementFactory.getRuntimeMXBean().getInputArguments();
+ }
+
+ protected ConditionFactory await() {
+ return Awaitility.await().atMost(2, MINUTES);
+ }
+
+ public String getClassPath() {
+ // alternative: ManagementFactory.getRuntimeMXBean().getClassPath()
+ return System.getProperty("java.class.path");
+ }
+
+ public String getJavaPath() {
+ try {
+ return new File(new File(System.getProperty("java.home"), "bin"),
"java").getCanonicalPath();
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ }
+
+ protected File getPidFile() {
+ return new File(getWorkingDirectory(),
getProcessType().getPidFileName());
+ }
+
+ protected File getLogFile() {
+ return new File(getWorkingDirectory(), getUniqueName() + ".log");
+ }
+
+ protected String getLogFilePath() {
+ try {
+ return getLogFile().getCanonicalPath();
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ }
+
+ protected File getWorkingDirectory() {
+ return this.temporaryFolder.getRoot();
+ }
+
+ protected String getWorkingDirectoryPath() {
+ try {
+ return getWorkingDirectory().getCanonicalPath();
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ }
+
+ protected void createPidFile(final Object content) {
--- 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)