Added test for LocatorLauncher using gemfireProperties
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/24a6096a Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/24a6096a Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/24a6096a Branch: refs/heads/feature/GEODE-1466 Commit: 24a6096ad2cb03d701412ce5096163e80317ec90 Parents: 254995b Author: Kirk Lund <kl...@apache.org> Authored: Tue Oct 11 16:32:42 2016 -0700 Committer: Kirk Lund <kl...@apache.org> Committed: Thu Oct 13 10:15:05 2016 -0700 ---------------------------------------------------------------------- .../geode/distributed/AbstractLauncher.java | 2 +- .../geode/internal/PropertiesResolver.java | 8 +- .../LocatorLauncherIntegrationTest.java | 22 +++- ...ocatorLauncherPropertiesIntegrationTest.java | 126 +++++++++++++++++++ 4 files changed, 152 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/24a6096a/geode-core/src/main/java/org/apache/geode/distributed/AbstractLauncher.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/distributed/AbstractLauncher.java b/geode-core/src/main/java/org/apache/geode/distributed/AbstractLauncher.java index 110721f..e301078 100644 --- a/geode-core/src/main/java/org/apache/geode/distributed/AbstractLauncher.java +++ b/geode-core/src/main/java/org/apache/geode/distributed/AbstractLauncher.java @@ -151,7 +151,7 @@ public abstract class AbstractLauncher<T extends Comparable<T>> implements Runna * @return a Properties instance populated with the gemfire.properties. * @see java.net.URL */ - protected static Properties loadGemFireProperties(final URL url) { + protected static Properties loadGemFireProperties(final URL url) { // TODO: GEODE-1466 final Properties properties = new Properties(); if (url != null) { http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/24a6096a/geode-core/src/main/java/org/apache/geode/internal/PropertiesResolver.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/PropertiesResolver.java b/geode-core/src/main/java/org/apache/geode/internal/PropertiesResolver.java index f105bcd..9bd0325 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/PropertiesResolver.java +++ b/geode-core/src/main/java/org/apache/geode/internal/PropertiesResolver.java @@ -28,10 +28,10 @@ import org.apache.geode.internal.util.IOUtils; public class PropertiesResolver { - static final String GEODE_PROPERTIES_FILE_PROPERTY = "geodePropertyFile"; - static final String GEMFIRE_PROPERTIES_FILE_PROPERTY = DistributedSystem.PROPERTIES_FILE_PROPERTY; - static final String DEFAULT_GEODE_PROPERTIES_FILE_NAME = "geode.properties"; - static final String DEFAULT_GEMFIRE_PROPERTIES_FILE_NAME = "gemfire.properties"; + public static final String GEODE_PROPERTIES_FILE_PROPERTY = "geodePropertyFile"; + public static final String GEMFIRE_PROPERTIES_FILE_PROPERTY = DistributedSystem.PROPERTIES_FILE_PROPERTY; + public static final String DEFAULT_GEODE_PROPERTIES_FILE_NAME = "geode.properties"; + public static final String DEFAULT_GEMFIRE_PROPERTIES_FILE_NAME = "gemfire.properties"; private static URI propertiesFileURL = findPropertiesFileLocation(); http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/24a6096a/geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherIntegrationTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherIntegrationTest.java b/geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherIntegrationTest.java index 729ec9c..169015a 100755 --- a/geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherIntegrationTest.java +++ b/geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherIntegrationTest.java @@ -19,6 +19,7 @@ package org.apache.geode.distributed; import org.apache.geode.distributed.LocatorLauncher.Builder; import org.apache.geode.distributed.LocatorLauncher.Command; import org.apache.geode.distributed.internal.DistributionConfig; +import org.apache.geode.internal.PropertiesResolver; import org.apache.geode.internal.i18n.LocalizedStrings; import org.apache.geode.test.junit.categories.IntegrationTest; import org.junit.Rule; @@ -133,6 +134,25 @@ public class LocatorLauncherIntegrationTest { } @Test + public void testBuildWithMemberNameSetInGeodePropertiesOnStart() throws Exception { + // given: gemfire.properties with a name + Properties gemfireProperties = new Properties(); + gemfireProperties.setProperty(NAME, "locator123"); + useGemFirePropertiesFileInTemporaryFolder(PropertiesResolver.DEFAULT_GEODE_PROPERTIES_FILE_NAME, gemfireProperties); // TODO: GEODE-1466 + + // when: starting with null MemberName + LocatorLauncher launcher = new Builder() + .setCommand(Command.START) + .setMemberName(null) + .build(); + + // then: name in gemfire.properties file should be used for MemberName + assertThat(launcher).isNotNull(); + assertThat(launcher.getCommand()).isEqualTo(Command.START); + assertThat(launcher.getMemberName()).isNull(); + } + + @Test public void testBuildWithNoMemberNameOnStart() throws Exception { // given: gemfire.properties with no name useGemFirePropertiesFileInTemporaryFolder(DistributionConfig.GEMFIRE_PREFIX + "properties", new Properties()); @@ -239,7 +259,7 @@ public class LocatorLauncherIntegrationTest { * </ol> */ private void useGemFirePropertiesFileInTemporaryFolder(final String fileName, final Properties gemfireProperties) throws Exception { - File propertiesFile = new File(this.temporaryFolder.getRoot().getCanonicalPath(), fileName); + File propertiesFile = this.temporaryFolder.newFile(fileName); System.setProperty(DistributedSystem.PROPERTIES_FILE_PROPERTY, propertiesFile.getCanonicalPath()); gemfireProperties.store(new FileWriter(propertiesFile, false), this.testName.getMethodName()); http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/24a6096a/geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherPropertiesIntegrationTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherPropertiesIntegrationTest.java b/geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherPropertiesIntegrationTest.java new file mode 100644 index 0000000..eb310aa --- /dev/null +++ b/geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherPropertiesIntegrationTest.java @@ -0,0 +1,126 @@ +/* + * 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.*; +import static org.apache.geode.distributed.ConfigurationProperties.*; +import static org.assertj.core.api.Assertions.*; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.IOException; +import java.util.Properties; + +import com.jayway.awaitility.Awaitility; +import com.jayway.awaitility.core.ConditionFactory; +import org.apache.commons.io.FileUtils; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.contrib.java.lang.system.RestoreSystemProperties; +import org.junit.rules.TemporaryFolder; + +import org.apache.geode.distributed.AbstractLauncher.Status; +import org.apache.geode.distributed.LocatorLauncher.Builder; +import org.apache.geode.distributed.internal.SharedConfiguration; +import org.apache.geode.internal.PropertiesResolver; +import org.apache.geode.internal.lang.StringUtils; +import org.apache.geode.internal.util.IOUtils; + +public class LocatorLauncherPropertiesIntegrationTest { + + private File propsFile; + + private LocatorLauncher launcher; + private String workingDirectory; + private String clusterConfigDirectory; + + @Rule + public RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties(); + + @Rule + public TemporaryFolder temporaryFolder = new TemporaryFolder(); + + @Before + public void before() throws Exception { + this.workingDirectory = this.temporaryFolder.getRoot().getCanonicalPath(); + this.clusterConfigDirectory = this.temporaryFolder.newFolder(SharedConfiguration.CLUSTER_CONFIG_DISK_DIR_PREFIX).getCanonicalPath(); + } + + @After + public void after() throws Exception { + if (this.launcher != null) { + this.launcher.stop(); + this.launcher = null; + } + try { + FileUtils.forceDelete(propsFile); + } catch (Exception ignored) { + } + } + + @Test + public void usesNameInGemFireProperties() throws Throwable { + String memberName = "myLocatorName"; + createPropertiesFile("myGemfire.properties", memberName); + + this.launcher = new Builder().setPort(0).set(CLUSTER_CONFIGURATION_DIR, this.clusterConfigDirectory).build(); + this.launcher.start(); + awaitLocator(this.launcher); + + System.out.println(this.launcher.status()); + assertThat(this.launcher.status().getMemberName()).isEqualTo(memberName); + + assertThat(this.launcher.stop().getStatus()).isEqualTo(Status.STOPPED); + } + + private void createPropertiesFile(String filename, String memberName) throws IOException { + System.setProperty(PropertiesResolver.GEMFIRE_PROPERTIES_FILE_PROPERTY, filename); + + propsFile = new File(System.getProperty("user.home"), filename); + propsFile.deleteOnExit(); + + Properties properties = new Properties(); + properties.setProperty(NAME, memberName); + properties.store(new FileOutputStream(propsFile), null); + } + + private void awaitLocator(LocatorLauncher launcher) throws Exception { + await().until(() -> assertThat(Status.ONLINE.equals(launcher.status().getStatus())).isTrue()); + } + + private void awaitLocator(int port) throws Exception { + awaitLocator(new Builder().setPort(port).build()); + } + + private ConditionFactory await() { + return Awaitility.await().atMost(10, MINUTES); + } + + private int readPid(final File pidFile) throws IOException { + BufferedReader reader = null; + try { + reader = new BufferedReader(new FileReader(pidFile)); + return Integer.parseInt(StringUtils.trim(reader.readLine())); + } finally { + IOUtils.close(reader); + } + } +}