You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2016/10/13 17:14:55 UTC

[18/20] incubator-geode git commit: Still WIP

Still WIP


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/7eb83021
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/7eb83021
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/7eb83021

Branch: refs/heads/feature/GEODE-1466
Commit: 7eb83021f611237e73a46fb00dcfb409c6e949ca
Parents: 24a6096
Author: Kirk Lund <kl...@apache.org>
Authored: Wed Oct 12 11:50:27 2016 -0700
Committer: Kirk Lund <kl...@apache.org>
Committed: Thu Oct 13 10:15:05 2016 -0700

----------------------------------------------------------------------
 .../geode/distributed/AbstractLauncher.java     |  56 ++++----
 .../geode/distributed/DistributedSystem.java    |  15 +--
 .../geode/distributed/LocatorLauncher.java      |   4 +-
 .../geode/distributed/ServerLauncher.java       |   4 +-
 .../org/apache/geode/internal/ConfigSource.java |  14 +-
 .../geode/internal/PropertiesResolver.java      | 118 +++++++++++++---
 .../internal/cache/CacheServerLauncher.java     |  21 +--
 .../cache/persistence/BackupManager.java        |   3 +-
 .../AbstractLauncherIntegrationTest.java        |  71 ----------
 .../geode/distributed/AbstractLauncherTest.java |  14 --
 .../LocatorLauncherIntegrationTest.java         |   2 +-
 ...ocatorLauncherPropertiesIntegrationTest.java |  93 ++++++++++++-
 .../PropertiesResolverIntegrationTest.java      | 134 +++++++++++++++----
 13 files changed, 343 insertions(+), 206 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7eb83021/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 e301078..43982f4 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
@@ -23,6 +23,7 @@ import org.apache.geode.distributed.internal.unsafe.RegisterSignalHandlerSupport
 import org.apache.geode.internal.AvailablePort;
 import org.apache.geode.internal.GemFireVersion;
 import org.apache.geode.internal.OSProcess;
+import org.apache.geode.internal.PropertiesResolver;
 import org.apache.geode.internal.i18n.LocalizedStrings;
 import org.apache.geode.internal.lang.ClassUtils;
 import org.apache.geode.internal.lang.ObjectUtils;
@@ -144,33 +145,34 @@ public abstract class AbstractLauncher<T extends Comparable<T>> implements Runna
     return !StringUtils.isBlank(properties.getProperty(propertyName));
   }
 
-  /**
-   * Loads the GemFire properties at the specified URL.
-   * 
-   * @param url the URL to the gemfire.properties to load.
-   * @return a Properties instance populated with the gemfire.properties.
-   * @see java.net.URL
-   */
-  protected static Properties loadGemFireProperties(final URL url) { // TODO: GEODE-1466
-    final Properties properties = new Properties();
-
-    if (url != null) {
-      try {
-        properties.load(new FileReader(new File(url.toURI())));
-      }
-      catch (Exception e) {
-        try {
-          // not in the file system, try the classpath
-          properties.load(AbstractLauncher.class.getResourceAsStream(DistributedSystem.getPropertiesFile()));
-        }
-        catch (Exception ignore) {
-          // not in the file system or the classpath; gemfire.properties does not exist
-        }
-      }
-    }
-
-    return properties;
-  }
+//  /**
+//   * Loads the GemFire properties at the specified URL.
+//   *
+//   * @param url the URL to the gemfire.properties to load.
+//   * @return a Properties instance populated with the gemfire.properties.
+//   * @see java.net.URL
+//   */
+//  protected static Properties loadGemFireProperties(final URL url) { // TODO: GEODE-1466
+////    return new PropertiesResolver().loadProperties();
+//    final Properties properties = new Properties();
+//
+//    if (url != null) {
+//      try {
+//        properties.load(new FileReader(new File(url.toURI())));
+//      }
+//      catch (Exception e) {
+//        try {
+//          // not in the file system, try the classpath
+//          properties.load(AbstractLauncher.class.getResourceAsStream(DistributedSystem.getPropertiesFile()));
+//        }
+//        catch (Exception ignore) {
+//          // not in the file system or the classpath; gemfire.properties does not exist
+//        }
+//      }
+//    }
+//
+//    return properties;
+//  }
 
   void initLogger() {
     try {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7eb83021/geode-core/src/main/java/org/apache/geode/distributed/DistributedSystem.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/DistributedSystem.java b/geode-core/src/main/java/org/apache/geode/distributed/DistributedSystem.java
index e5c420d..c40aaea 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/DistributedSystem.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/DistributedSystem.java
@@ -24,15 +24,14 @@ import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.client.ClientCache;
 import org.apache.geode.cache.client.ClientCacheFactory;
-import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.ClassPathLoader;
+import org.apache.geode.internal.PropertiesResolver;
 import org.apache.geode.internal.i18n.LocalizedStrings;
 import org.apache.geode.internal.tcp.ConnectionTable;
 import org.apache.geode.internal.util.IOUtils;
-import org.apache.geode.security.GemFireSecurityException;
 
 import java.io.File;
 import java.net.InetAddress;
@@ -558,7 +557,7 @@ public abstract class DistributedSystem implements StatisticsFactory {
    * @see #getPropertiesFile()
    * @since Geode 1.0
    */
-  public static final String PROPERTIES_FILE_PROPERTY = "gemfirePropertyFile";
+  public static final String PROPERTIES_FILE_PROPERTY = PropertiesResolver.GEODE_PROPERTIES_FILE_KEY;
   
   /** 
    * The default value of <code>PROPERTIES_FILE_PROPERTY</code> is
@@ -569,7 +568,7 @@ public abstract class DistributedSystem implements StatisticsFactory {
    * @see #getPropertiesFile()
    * @since Geode 1.0
    */
-  public static final String PROPERTIES_FILE_DEFAULT = DistributionConfig.GEMFIRE_PREFIX + "properties"; // TODO: GEODE-1466
+  public static final String PROPERTIES_FILE_DEFAULT = PropertiesResolver.DEFAULT_PROPERTIES_FILE_VALUE;
 
   /**
    * Returns the current value of {@link #PROPERTIES_FILE_PROPERTY} system 
@@ -579,8 +578,8 @@ public abstract class DistributedSystem implements StatisticsFactory {
    * @see #PROPERTIES_FILE_DEFAULT
    * @since Geode 1.0
    */
-  public static String getPropertiesFile() { // TODO: GEODE-1466
-	return System.getProperty(PROPERTIES_FILE_PROPERTY, PROPERTIES_FILE_DEFAULT);
+  public static String getPropertiesFile() {
+	  return new PropertiesResolver().getSpecifiedPropertiesFileName();
   }
   
   /**
@@ -633,7 +632,7 @@ public abstract class DistributedSystem implements StatisticsFactory {
    * @see #getSecurityPropertiesFile()
    * @since Geode 1.0
    */
-  public static final String SECURITY_PROPERTIES_FILE_PROPERTY = "gemfireSecurityPropertyFile";
+  public static final String SECURITY_PROPERTIES_FILE_PROPERTY = "gemfireSecurityPropertyFile"; // TODO: GEODE-1466
   
   /** 
    * The default value of <code>SECURITY_PROPERTIES_FILE_PROPERTY</code> is
@@ -699,7 +698,7 @@ public abstract class DistributedSystem implements StatisticsFactory {
    * @since Geode 1.0
    */
   public static URL getPropertiesFileURL() {
-    return getFileURL(getPropertiesFile());
+    return PropertiesResolver.findPropertiesFile();
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7eb83021/geode-core/src/main/java/org/apache/geode/distributed/LocatorLauncher.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/LocatorLauncher.java b/geode-core/src/main/java/org/apache/geode/distributed/LocatorLauncher.java
index b18ce81..470ef16 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/LocatorLauncher.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/LocatorLauncher.java
@@ -26,6 +26,7 @@ import org.apache.geode.distributed.internal.InternalLocator;
 import org.apache.geode.distributed.internal.tcpserver.*;
 import org.apache.geode.internal.DistributionLocator;
 import org.apache.geode.internal.GemFireVersion;
+import org.apache.geode.internal.PropertiesResolver;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.i18n.LocalizedStrings;
 import org.apache.geode.internal.lang.ObjectUtils;
@@ -1730,9 +1731,8 @@ public final class LocatorLauncher extends AbstractLauncher<String> {
     protected void validateOnStart() {
       if (Command.START.equals(getCommand())) {
         if (StringUtils.isBlank(getMemberName())
-            && !isSet(System.getProperties(), DistributionConfig.GEMFIRE_PREFIX + NAME)
             && !isSet(getDistributedSystemProperties(), NAME)
-            && !isSet(loadGemFireProperties(DistributedSystem.getPropertyFileURL()), NAME)) // TODO: GEODE-1466
+            && !new PropertiesResolver().hasNonBlankPropertyValue(NAME))
         {
           throw new IllegalStateException(LocalizedStrings.Launcher_Builder_MEMBER_NAME_VALIDATION_ERROR_MESSAGE
             .toLocalizedString("Locator"));

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7eb83021/geode-core/src/main/java/org/apache/geode/distributed/ServerLauncher.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/ServerLauncher.java b/geode-core/src/main/java/org/apache/geode/distributed/ServerLauncher.java
index a3d3845..1ceafcb 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/ServerLauncher.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/ServerLauncher.java
@@ -27,6 +27,7 @@ import org.apache.geode.distributed.internal.DefaultServerLauncherCacheProvider;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.internal.GemFireVersion;
+import org.apache.geode.internal.PropertiesResolver;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.cache.*;
 import org.apache.geode.internal.cache.tier.sockets.CacheServerHelper;
@@ -2264,9 +2265,8 @@ public class ServerLauncher extends AbstractLauncher<String> {
     protected void validateOnStart() {
       if (Command.START.equals(getCommand())) {
         if (StringUtils.isBlank(getMemberName())
-            && !isSet(System.getProperties(), DistributionConfig.GEMFIRE_PREFIX + NAME)
             && !isSet(getDistributedSystemProperties(), NAME)
-            && !isSet(loadGemFireProperties(DistributedSystem.getPropertyFileURL()), NAME))
+            && !new PropertiesResolver().hasNonBlankPropertyValue(NAME))
         {
           throw new IllegalStateException(LocalizedStrings.Launcher_Builder_MEMBER_NAME_VALIDATION_ERROR_MESSAGE
             .toLocalizedString("Server"));

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7eb83021/geode-core/src/main/java/org/apache/geode/internal/ConfigSource.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/ConfigSource.java b/geode-core/src/main/java/org/apache/geode/internal/ConfigSource.java
index fbe467b..87309f6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/ConfigSource.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/ConfigSource.java
@@ -32,13 +32,13 @@ public class ConfigSource implements Serializable {
   private ConfigSource(Type t) {
     this.type = t;
     switch (t) {
-      case API: this.description = "api"; break;
-      case SYSTEM_PROPERTY: this.description = "system property"; break;
-      case FILE: this.description = "file"; break;
-      case SECURE_FILE: this.description = "secure file"; break;
-      case XML: this.description = "cache.xml"; break;
-      case RUNTIME: this.description = "runtime modification"; break;
-      case LAUNCHER: this.description = "launcher"; break;
+      case API: this.description = "api"; break; // Properties instance passed in to DistributedSystem.connect
+      case SYSTEM_PROPERTY: this.description = "system property"; break; // System.getProperties
+      case FILE: this.description = "file"; break; // gemfire.properties file
+      case SECURE_FILE: this.description = "secure file"; break; // gfsecurity.properties file
+      case XML: this.description = "cache.xml"; break; // cache.xml file
+      case RUNTIME: this.description = "runtime modification"; break; // RuntimeDistributionConfigImpl setter
+      case LAUNCHER: this.description = "launcher"; break; // Launcher setter
       default:
         this.description = "";
     }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7eb83021/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 9bd0325..a07e3b7 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
@@ -17,39 +17,107 @@
 package org.apache.geode.internal;
 
 import java.io.File;
-import java.net.URI;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.net.MalformedURLException;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.Properties;
 
+import org.apache.geode.GemFireIOException;
 import org.apache.geode.distributed.DistributedSystem;
+import org.apache.geode.internal.i18n.LocalizedStrings;
+import org.apache.geode.internal.lang.StringUtils;
 import org.apache.geode.internal.util.IOUtils;
 
 public class PropertiesResolver {
 
-  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";
+  public static final String GEODE_PREFIX = "geode.";
+  public static final String GEMFIRE_PREFIX = "gemfire.";
+  public static final String GEODE_PROPERTIES_FILE_KEY = "geodePropertyFile";
+  public static final String GEMFIRE_PROPERTIES_FILE_KEY = "gemfirePropertyFile";
+  public static final String DEFAULT_GEODE_PROPERTIES_FILE_VALUE = "geode.properties";
+  public static final String DEFAULT_GEMFIRE_PROPERTIES_FILE_VALUE = "gemfire.properties";
+  public static final String DEFAULT_PROPERTIES_FILE_VALUE = DEFAULT_GEODE_PROPERTIES_FILE_VALUE;
 
-  private static URI propertiesFileURL = findPropertiesFileLocation();
+  private Properties properties;
 
-  static URI findPropertiesFileLocation() {
-    List<URI> possibleUrls = new ArrayList<>();
-    possibleUrls.add(getFileURI(System.getProperty(GEODE_PROPERTIES_FILE_PROPERTY)));
-    possibleUrls.add(getFileURI(System.getProperty(GEMFIRE_PROPERTIES_FILE_PROPERTY)));
-    possibleUrls.add(getFileURI(DEFAULT_GEODE_PROPERTIES_FILE_NAME));
-    possibleUrls.add(getFileURI(DEFAULT_GEMFIRE_PROPERTIES_FILE_NAME));
+  public PropertiesResolver() {
+    this(findPropertiesFile());
+  }
+
+  protected PropertiesResolver(URL url) {
+    properties = loadPropertiesFromURL(url);
+  }
+
+  private Properties loadPropertiesFromURL(URL url) {
+    Properties properties = new Properties();
+    try {
+      properties.load(new FileReader(new File(url.toURI())));
+    } catch (URISyntaxException | IOException e) {
+      throw new GemFireIOException(LocalizedStrings.DistributionConfigImpl_FAILED_READING_0.toLocalizedString(url), e);
+    }
+    return properties;
+  }
+
+  public String getSpecifiedPropertiesFileName() {
+    if (hasSystemProperty(GEODE_PROPERTIES_FILE_KEY)) {
+      return System.getProperty(GEODE_PROPERTIES_FILE_KEY);
+    } else if (hasSystemProperty(GEMFIRE_PROPERTIES_FILE_KEY)) {
+      return System.getProperty(GEMFIRE_PROPERTIES_FILE_KEY);
+    } else {
+      return DEFAULT_PROPERTIES_FILE_VALUE;
+    }
+  }
+
+  public Map<String, ConfigSource> propertiesWithSource() {
+    // add props from gemfire system props
+    // add props from geode system props
+    //add props from file
+    // add props from security file
+
+    return null;
+  }
+
+  public static URL findPropertiesFile() {
+    List<URL> possibleUrls = new ArrayList<>();
+    possibleUrls.add(getFileURI(System.getProperty(GEODE_PROPERTIES_FILE_KEY)));
+    possibleUrls.add(getFileURI(System.getProperty(GEMFIRE_PROPERTIES_FILE_KEY)));
+    possibleUrls.add(getFileURI(DEFAULT_GEODE_PROPERTIES_FILE_VALUE));
+    possibleUrls.add(getFileURI(DEFAULT_GEMFIRE_PROPERTIES_FILE_VALUE));
 
+    //TODO: Should we make a list of Strings instead of URLs and turn it into a URL after picking one?
     return possibleUrls.stream().filter(s -> s != null).findFirst().orElse(null);
   }
 
-  static boolean hasProperty(final String key) {
+  static boolean hasSystemProperty(final String key) {
     return System.getProperties().containsKey(DistributedSystem.PROPERTIES_FILE_PROPERTY);
   }
 
-  private static URI getFileURI(String fileName) {
+  public boolean hasProperty(String key) {
+    return getProperty(key) != null;
+  }
+
+  public boolean hasNonBlankPropertyValue(String key) {
+    return !StringUtils.isBlank(getProperty(key));
+  }
+
+  //TODO: Should we fall back to default instead of null?
+  // What should this do for blank properties?
+  public String getProperty(final String key) {
+    List<String> possibleValues = new ArrayList<>();
+    possibleValues.add(System.getProperty(GEODE_PREFIX + key));
+    possibleValues.add(System.getProperty(GEMFIRE_PREFIX + key));
+    possibleValues.add(properties.getProperty(key));
+
+    return possibleValues.stream().filter( s -> s!=null).findFirst().orElse(null);
+  }
+
+  private static URL getFileURI(String fileName) {
     if (fileName == null) {
       return null;
     }
@@ -57,25 +125,35 @@ public class PropertiesResolver {
     File file = new File(fileName); // absolute path or current dir
 
     if (file.exists()) {
-        return IOUtils.tryGetCanonicalFileElseGetAbsoluteFile(file).toURI();
+      URL url = getFileURL(file);
+      if (url != null) {
+        return url;
+      }
     }
 
     file = new File(System.getProperty("user.home"), fileName); // user home
 
     if (file.exists()) {
-        return IOUtils.tryGetCanonicalFileElseGetAbsoluteFile(file).toURI();
+      URL url = getFileURL(file);
+      if (url != null) {
+        return url;
+      }
     }
 
     return getResourceOrNull(fileName); // resource
   }
 
-  private static URI getResourceOrNull(final String name) {
+  private static URL getFileURL(File file) {
     try {
-      URL url = ClassPathLoader.getLatest().getResource(name); // resource
-      return (url == null) ? null : url.toURI();
-    } catch (URISyntaxException ignore) {
+      return IOUtils.tryGetCanonicalFileElseGetAbsoluteFile(file).toURI().toURL();
+    } catch (MalformedURLException e) {
       return null;
     }
   }
 
+
+  private static URL getResourceOrNull(final String name) {
+    return ClassPathLoader.getLatest().getResource(name); // resource
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7eb83021/geode-core/src/main/java/org/apache/geode/internal/cache/CacheServerLauncher.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/CacheServerLauncher.java b/geode-core/src/main/java/org/apache/geode/internal/cache/CacheServerLauncher.java
index 20cc5a7..1233b15 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/CacheServerLauncher.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/CacheServerLauncher.java
@@ -29,6 +29,7 @@ import org.apache.geode.distributed.internal.DistributionConfigImpl;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.i18n.LogWriterI18n;
 import org.apache.geode.internal.OSProcess;
+import org.apache.geode.internal.PropertiesResolver;
 import org.apache.geode.internal.PureJavaMode;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.cache.tier.sockets.CacheServerHelper;
@@ -1208,25 +1209,7 @@ public class CacheServerLauncher  {
    * @return true if the logging would go to stdout
    */
   private static boolean isLoggingToStdOut() {
-    Properties gfprops = new Properties();
-    URL url = DistributedSystem.getPropertyFileURL();
-    if (url != null) {
-      try {
-        gfprops.load(url.openStream());
-      } catch (IOException io) {
-        //throw new GemFireIOException("Failed reading " + url, io);
-        System.out.println("Failed reading " + url);
-        System.exit( 1 );
-      }
-      final String logFile = gfprops.getProperty(LOG_FILE);
-      if ( logFile == null || logFile.length() == 0 ) {
-        return true;
-      }
-    } else {
-      //Didnt find a property file, assuming the default is to log to stdout
-      return true;
-    }
-    return false;
+      return !(new PropertiesResolver().hasNonBlankPropertyValue(LOG_FILE));
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7eb83021/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/BackupManager.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/BackupManager.java b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/BackupManager.java
index 8a44275..deec9d1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/BackupManager.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/BackupManager.java
@@ -26,6 +26,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.FileUtil;
 import org.apache.geode.internal.JarClassLoader;
 import org.apache.geode.internal.JarDeployer;
+import org.apache.geode.internal.PropertiesResolver;
 import org.apache.geode.internal.cache.DiskStoreImpl;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.i18n.LocalizedStrings;
@@ -236,7 +237,7 @@ public class BackupManager implements MembershipListener {
       FileUtil.copy(url, cacheXMLBackup);
     }
     
-    URL propertyURL = DistributedSystem.getPropertyFileURL();
+    URL propertyURL = PropertiesResolver.findPropertiesFile();
     if(propertyURL != null) {
       File propertyBackup = new File(configBackupDir, DistributionConfig.GEMFIRE_PREFIX + "properties");
       FileUtil.copy(propertyURL, propertyBackup);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7eb83021/geode-core/src/test/java/org/apache/geode/distributed/AbstractLauncherIntegrationTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/AbstractLauncherIntegrationTest.java b/geode-core/src/test/java/org/apache/geode/distributed/AbstractLauncherIntegrationTest.java
deleted file mode 100755
index 4ae78fc..0000000
--- a/geode-core/src/test/java/org/apache/geode/distributed/AbstractLauncherIntegrationTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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 org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.test.junit.categories.IntegrationTest;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.util.Properties;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.apache.geode.distributed.ConfigurationProperties.*;
-
-/**
- * Integration tests for AbstractLauncher class. These tests require file system I/O.
- */
-@Category(IntegrationTest.class)
-public class AbstractLauncherIntegrationTest {
-
-  private File gemfirePropertiesFile;
-  private Properties expectedGemfireProperties;
-
-  @Rule
-  public final TemporaryFolder temporaryFolder = new TemporaryFolder();
-  
-  @Rule
-  public final TestName testName = new TestName();
-  
-  @Before
-  public void setUp() throws Exception {
-    this.gemfirePropertiesFile = this.temporaryFolder.newFile(DistributionConfig.GEMFIRE_PREFIX + "properties");
-    
-    this.expectedGemfireProperties = new Properties();
-    this.expectedGemfireProperties.setProperty(NAME, "memberOne");
-    this.expectedGemfireProperties.setProperty(GROUPS, "groupOne, groupTwo");
-    this.expectedGemfireProperties.store(new FileWriter(this.gemfirePropertiesFile, false), this.testName.getMethodName());
-
-    assertThat(this.gemfirePropertiesFile).isNotNull();
-    assertThat(this.gemfirePropertiesFile.exists()).isTrue();
-    assertThat(this.gemfirePropertiesFile.isFile()).isTrue();
-  }
-  
-  @Test
-  public void testLoadGemFirePropertiesFromFile() throws Exception {
-    final Properties actualGemFireProperties = AbstractLauncher.loadGemFireProperties(this.gemfirePropertiesFile.toURI().toURL());
-
-    assertThat(actualGemFireProperties).isNotNull();
-    assertThat(actualGemFireProperties).isEqualTo(this.expectedGemfireProperties);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7eb83021/geode-core/src/test/java/org/apache/geode/distributed/AbstractLauncherTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/AbstractLauncherTest.java b/geode-core/src/test/java/org/apache/geode/distributed/AbstractLauncherTest.java
index b9a589a..68b82ab 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/AbstractLauncherTest.java
+++ b/geode-core/src/test/java/org/apache/geode/distributed/AbstractLauncherTest.java
@@ -91,20 +91,6 @@ public class AbstractLauncherTest {
   }
 
   @Test
-  public void testLoadGemFirePropertiesWithNullURL() {
-    final Properties properties = AbstractLauncher.loadGemFireProperties(null);
-    assertNotNull(properties);
-    assertTrue(properties.isEmpty());
-  }
-
-  @Test
-  public void testLoadGemFirePropertiesWithNonExistingURL() throws MalformedURLException {
-    final Properties properties = AbstractLauncher.loadGemFireProperties(new URL("file:///path/to/non_existing/gemfire.properties"));
-    assertNotNull(properties);
-    assertTrue(properties.isEmpty());
-  }
-
-  @Test
   public void testGetDistributedSystemProperties() {
     AbstractLauncher<?> launcher = createAbstractLauncher("memberOne", "1");
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7eb83021/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 169015a..ae5c0e3 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
@@ -138,7 +138,7 @@ public class LocatorLauncherIntegrationTest {
     // 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
+    useGemFirePropertiesFileInTemporaryFolder(PropertiesResolver.DEFAULT_GEODE_PROPERTIES_FILE_VALUE, gemfireProperties); // TODO: GEODE-1466
 
     // when: starting with null MemberName
     LocatorLauncher launcher = new Builder()

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7eb83021/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
index eb310aa..df644ff 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherPropertiesIntegrationTest.java
+++ b/geode-core/src/test/java/org/apache/geode/distributed/LocatorLauncherPropertiesIntegrationTest.java
@@ -18,6 +18,7 @@ package org.apache.geode.distributed;
 
 import static java.util.concurrent.TimeUnit.*;
 import static org.apache.geode.distributed.ConfigurationProperties.*;
+import static org.apache.geode.internal.PropertiesResolver.*;
 import static org.assertj.core.api.Assertions.*;
 
 import java.io.BufferedReader;
@@ -35,15 +36,22 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.contrib.java.lang.system.RestoreSystemProperties;
+import org.junit.experimental.categories.Category;
 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;
+import org.apache.geode.test.junit.categories.IntegrationTest;
 
+/**
+ * TODO: create LocatorLauncherPropertiesRemoteIntegrationTest
+ *
+ * This test is all in-process
+ */
+@Category(IntegrationTest.class)
 public class LocatorLauncherPropertiesIntegrationTest {
 
   private File propsFile;
@@ -73,13 +81,84 @@ public class LocatorLauncherPropertiesIntegrationTest {
     try {
       FileUtils.forceDelete(propsFile);
     } catch (Exception ignored) {
+      ignored.printStackTrace();
     }
   }
 
   @Test
-  public void usesNameInGemFireProperties() throws Throwable {
-    String memberName = "myLocatorName";
-    createPropertiesFile("myGemfire.properties", memberName);
+  public void prefersNameInBuilderFirst() throws Exception {
+    String nameInBuilder = "nameInBuilder";
+    String nameInSystemProperty = "nameInSystemProperty";
+    String nameInProperties = "nameInProperties";
+    System.setProperty(GEODE_PREFIX + NAME, nameInSystemProperty);
+
+    createPropertiesFile(GEODE_PROPERTIES_FILE_KEY, "myGeode.properties", nameInProperties);
+
+    this.launcher = new Builder().setMemberName(nameInBuilder).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(nameInBuilder);
+
+    assertThat(this.launcher.stop().getStatus()).isEqualTo(Status.STOPPED);
+  }
+
+  @Test
+  public void prefersNameInGeodeSystemPropertySecond() throws Exception {
+    String nameInSystemProperty = "nameInSystemProperty";
+    String nameInProperties = "nameInProperties";
+    System.setProperty(GEODE_PREFIX + NAME, nameInSystemProperty);
+
+    createPropertiesFile(GEODE_PROPERTIES_FILE_KEY, "myGeode.properties", nameInProperties);
+
+    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(nameInSystemProperty);
+
+    assertThat(this.launcher.stop().getStatus()).isEqualTo(Status.STOPPED);
+  }
+
+  @Test
+  public void prefersNameInGemFireSystemPropertySecond() throws Exception {
+    String nameInSystemProperty = "nameInSystemProperty";
+    String nameInProperties = "nameInProperties";
+    System.setProperty(GEMFIRE_PREFIX + NAME, nameInSystemProperty);
+
+    createPropertiesFile(GEODE_PROPERTIES_FILE_KEY, "myGeode.properties", nameInProperties);
+
+    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(nameInSystemProperty);
+
+    assertThat(this.launcher.stop().getStatus()).isEqualTo(Status.STOPPED);
+  }
+
+  @Test
+  public void usesNameInGeodeProperties() throws Exception {
+    String memberName = "myLocatorNameGeode";
+    createPropertiesFile(GEODE_PROPERTIES_FILE_KEY, "myGeode.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);
+  }
+
+  @Test
+  public void usesNameInGemFireProperties() throws Exception {
+    String memberName = "myLocatorNameGemfire";
+    createPropertiesFile(GEMFIRE_PROPERTIES_FILE_KEY, "myGemfire.properties", memberName);
 
     this.launcher = new Builder().setPort(0).set(CLUSTER_CONFIGURATION_DIR, this.clusterConfigDirectory).build();
     this.launcher.start();
@@ -91,10 +170,10 @@ public class LocatorLauncherPropertiesIntegrationTest {
     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);
+  private void createPropertiesFile(String propertyName, String filename, String memberName) throws IOException {
+    System.setProperty(propertyName, filename);
 
-    propsFile = new File(System.getProperty("user.home"), filename);
+    propsFile = new File(System.getProperty("user.dir"), filename);
     propsFile.deleteOnExit();
 
     Properties properties = new Properties();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/7eb83021/geode-core/src/test/java/org/apache/geode/internal/PropertiesResolverIntegrationTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/internal/PropertiesResolverIntegrationTest.java b/geode-core/src/test/java/org/apache/geode/internal/PropertiesResolverIntegrationTest.java
index c317ded..c2cfa23 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/PropertiesResolverIntegrationTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/PropertiesResolverIntegrationTest.java
@@ -16,19 +16,24 @@
  */
 package org.apache.geode.internal;
 
+import static org.apache.geode.distributed.ConfigurationProperties.*;
 import static org.apache.geode.internal.PropertiesResolver.*;
 import static org.assertj.core.api.Assertions.*;
+import static org.junit.Assert.*;
 
 import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
+import java.io.FileWriter;
 import java.io.IOException;
+import java.net.MalformedURLException;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Properties;
 import java.util.jar.Attributes;
 import java.util.jar.JarEntry;
 import java.util.jar.JarOutputStream;
@@ -37,12 +42,16 @@ import java.util.jar.Manifest;
 import org.apache.commons.io.FileUtils;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.contrib.java.lang.system.RestoreSystemProperties;
 import org.junit.experimental.categories.Category;
 import org.junit.rules.TemporaryFolder;
+import org.junit.rules.TestName;
 
+import org.apache.geode.distributed.AbstractLauncher;
+import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.test.junit.categories.IntegrationTest;
 
 @Category(IntegrationTest.class)
@@ -60,6 +69,9 @@ public class PropertiesResolverIntegrationTest {
   @Rule
   public TemporaryFolder temporaryFolder = new TemporaryFolder();
 
+  @Rule
+  public TestName testName = new TestName();
+
   @Before
   public void createFiles() throws Exception {
     this.geodeCustomProperties = this.temporaryFolder.newFile("geodeCustom.properties");
@@ -77,38 +89,38 @@ public class PropertiesResolverIntegrationTest {
 
   @Test
   public void canSpecifyGeodePropertiesFileAbsolutePath() throws Exception {
-    System.setProperty(GEODE_PROPERTIES_FILE_PROPERTY, this.geodeCustomProperties.getCanonicalPath());
-    assertThat(findPropertiesFileLocation()).isEqualTo(this.geodeCustomProperties.getCanonicalFile().toURI());
+    System.setProperty(GEODE_PROPERTIES_FILE_KEY, this.geodeCustomProperties.getCanonicalPath());
+    assertThat(findPropertiesFile()).isEqualTo(this.geodeCustomProperties.getCanonicalFile().toURL());
   }
 
   @Test
   public void canSpecifyGeodePropertiesFileInCurrentDir() throws Exception {
-    System.setProperty(GEODE_PROPERTIES_FILE_PROPERTY, geodeCustomFileInCurrentDir().getName());
-    assertThat(findPropertiesFileLocation()).isEqualTo(geodeCustomFileInCurrentDir().getCanonicalFile().toURI());
+    System.setProperty(GEODE_PROPERTIES_FILE_KEY, geodeCustomFileInCurrentDir().getName());
+    assertThat(findPropertiesFile()).isEqualTo(geodeCustomFileInCurrentDir().getCanonicalFile().toURL());
   }
 
  @Test
   public void canSpecifyGeodePropertiesFileInUserHomeDir() throws Exception {
-    System.setProperty(GEODE_PROPERTIES_FILE_PROPERTY, geodeCustomFileInHomeDir().getName());
-    assertThat(findPropertiesFileLocation()).isEqualTo(geodeCustomFileInHomeDir().getCanonicalFile().toURI());
+    System.setProperty(GEODE_PROPERTIES_FILE_KEY, geodeCustomFileInHomeDir().getName());
+    assertThat(findPropertiesFile()).isEqualTo(geodeCustomFileInHomeDir().getCanonicalFile().toURL());
   }
 
   @Test
   public void canSpecifyGemFirePropertiesFileAbsolutePath() throws Exception {
-    System.setProperty(GEMFIRE_PROPERTIES_FILE_PROPERTY, this.gemfireCustomProperties.getCanonicalPath());
-    assertThat(findPropertiesFileLocation()).isEqualTo(this.gemfireCustomProperties.getCanonicalFile().toURI());
+    System.setProperty(GEMFIRE_PROPERTIES_FILE_KEY, this.gemfireCustomProperties.getCanonicalPath());
+    assertThat(findPropertiesFile()).isEqualTo(this.gemfireCustomProperties.getCanonicalFile().toURL());
   }
 
   @Test
   public void canSpecifyGemFirePropertiesFileInCurrentDir() throws Exception {
-    System.setProperty(GEMFIRE_PROPERTIES_FILE_PROPERTY, gemfireCustomFileInCurrentDir().getName());
-    assertThat(findPropertiesFileLocation()).isEqualTo(gemfireCustomFileInCurrentDir().getCanonicalFile().toURI());
+    System.setProperty(GEMFIRE_PROPERTIES_FILE_KEY, gemfireCustomFileInCurrentDir().getName());
+    assertThat(findPropertiesFile()).isEqualTo(gemfireCustomFileInCurrentDir().getCanonicalFile().toURL());
   }
 
   @Test
   public void canSpecifyGemFirePropertiesFileInUserHomeDir() throws Exception {
-    System.setProperty(GEMFIRE_PROPERTIES_FILE_PROPERTY, gemfireCustomFileInHomeDir().getName());
-    assertThat(findPropertiesFileLocation()).isEqualTo(gemfireCustomFileInHomeDir().getCanonicalFile().toURI());
+    System.setProperty(GEMFIRE_PROPERTIES_FILE_KEY, gemfireCustomFileInHomeDir().getName());
+    assertThat(findPropertiesFile()).isEqualTo(gemfireCustomFileInHomeDir().getCanonicalFile().toURL());
   }
 
   @Test
@@ -117,7 +129,7 @@ public class PropertiesResolverIntegrationTest {
     geodeDefaultFileInHomeDir();
     geodeInJarAsClasspathResource();
 
-    assertThat(findPropertiesFileLocation()).isEqualTo(geodeDefaultFileInCurrentDir().toURI());
+    assertThat(findPropertiesFile()).isEqualTo(geodeDefaultFileInCurrentDir().toURL());
   }
 
   @Test
@@ -125,30 +137,30 @@ public class PropertiesResolverIntegrationTest {
     geodeDefaultFileInHomeDir();
     geodeInJarAsClasspathResource();
 
-    assertThat(findPropertiesFileLocation()).isEqualTo(geodeDefaultFileInHomeDir().toURI());
+    assertThat(findPropertiesFile()).isEqualTo(geodeDefaultFileInHomeDir().toURL());
   }
 
   @Test
   public void searchesJarOnClasspathThird() throws Exception {
-    System.setProperty(PropertiesResolver.GEODE_PROPERTIES_FILE_PROPERTY, "geodeInJar.properties");
+    System.setProperty(PropertiesResolver.GEODE_PROPERTIES_FILE_KEY, "geodeInJar.properties");
 
     URL url = propsFileInJarOnClasspath();
 
-    assertThat(findPropertiesFileLocation()).isEqualTo(url.toURI());
+    assertThat(findPropertiesFile()).isEqualTo(url);
   }
 
   @Test
   public void searchesDirOnClasspathThird() throws Exception {
-    System.setProperty(PropertiesResolver.GEODE_PROPERTIES_FILE_PROPERTY, "geodeInDir.properties");
+    System.setProperty(PropertiesResolver.GEODE_PROPERTIES_FILE_KEY, "geodeInDir.properties");
 
     URL url = propsFileInDirOnClasspath(); // TODO
 
-    assertThat(findPropertiesFileLocation()).isEqualTo(url.toURI());
+    assertThat(findPropertiesFile()).isEqualTo(url);
   }
 
   @Test
   public void searchReturnsNullLast() throws Exception {
-    assertThat(findPropertiesFileLocation()).isNull();
+    assertThat(findPropertiesFile()).isNull();
   }
 
   private URL propsFileInJarOnClasspath() throws IOException, URISyntaxException {
@@ -196,21 +208,21 @@ public class PropertiesResolverIntegrationTest {
 
   @Test
   public void findPrefersGeodePropertiesFileFirst() throws Exception {
-    System.setProperty(GEODE_PROPERTIES_FILE_PROPERTY, this.geodeCustomProperties.getCanonicalPath());
-    System.setProperty(GEMFIRE_PROPERTIES_FILE_PROPERTY, this.gemfireCustomProperties.getCanonicalPath());
+    System.setProperty(GEODE_PROPERTIES_FILE_KEY, this.geodeCustomProperties.getCanonicalPath());
+    System.setProperty(GEMFIRE_PROPERTIES_FILE_KEY, this.gemfireCustomProperties.getCanonicalPath());
     geodeDefaultFileInCurrentDir();
     gemfireDefaultFileInCurrentDir();
 
-    assertThat(findPropertiesFileLocation()).isEqualTo(this.geodeCustomProperties.getCanonicalFile().toURI());
+    assertThat(findPropertiesFile()).isEqualTo(this.geodeCustomProperties.getCanonicalFile().toURL());
   }
 
   @Test
   public void findPrefersGemFirePropertiesFileSecond() throws Exception {
-    System.setProperty(GEMFIRE_PROPERTIES_FILE_PROPERTY, this.gemfireCustomProperties.getCanonicalPath());
+    System.setProperty(GEMFIRE_PROPERTIES_FILE_KEY, this.gemfireCustomProperties.getCanonicalPath());
     geodeDefaultFileInCurrentDir();
     gemfireDefaultFileInCurrentDir();
 
-    assertThat(findPropertiesFileLocation()).isEqualTo(this.gemfireCustomProperties.getCanonicalFile().toURI());
+    assertThat(findPropertiesFile()).isEqualTo(this.gemfireCustomProperties.getCanonicalFile().toURL());
   }
 
   @Test
@@ -218,14 +230,82 @@ public class PropertiesResolverIntegrationTest {
     geodeDefaultFileInCurrentDir();
     gemfireDefaultFileInCurrentDir();
 
-    assertThat(findPropertiesFileLocation()).isEqualTo(geodeDefaultFileInCurrentDir().getCanonicalFile().toURI());
+    assertThat(findPropertiesFile()).isEqualTo(geodeDefaultFileInCurrentDir().getCanonicalFile().toURL());
   }
 
   @Test
   public void findPrefersGemFireDefaultFourth() throws Exception {
     gemfireDefaultFileInCurrentDir();
 
-    assertThat(findPropertiesFileLocation()).isEqualTo(gemfireDefaultFileInCurrentDir().getCanonicalFile().toURI());
+    assertThat(findPropertiesFile()).isEqualTo(gemfireDefaultFileInCurrentDir().getCanonicalFile().toURL());
+  }
+
+  @Test
+  public void getPropertyPrefersGeodeSystemPropertyFirst() throws Exception {
+    System.setProperty(GEODE_PREFIX + NAME, "nameFromGeodeSystemProperty");
+    System.setProperty(GEMFIRE_PREFIX + NAME, "nameFromGemFireSystemProperty");
+
+    File gemfirePropertiesFile = this.temporaryFolder.newFile(GEODE_PREFIX + "properties");
+    Properties expectedGemfireProperties = new Properties();
+    expectedGemfireProperties.setProperty(NAME, "nameFromPropertiesFile");
+    expectedGemfireProperties.store(new FileWriter(gemfirePropertiesFile, false), this.testName.getMethodName());
+    assertThat(gemfirePropertiesFile).isNotNull().exists().isFile();
+
+    PropertiesResolver propertiesResolver = new PropertiesResolver(gemfirePropertiesFile.toURL());
+
+    assertThat(propertiesResolver.getProperty(NAME)).isEqualTo("nameFromGeodeSystemProperty");
+  }
+
+  @Test
+  public void getPropertyPrefersGemfireSystemPropertySecond() throws Exception {
+    System.clearProperty(GEODE_PREFIX + NAME);
+    System.setProperty(GEMFIRE_PREFIX + NAME, "nameFromGemFireSystemProperty");
+
+    File gemfirePropertiesFile = this.temporaryFolder.newFile(GEODE_PREFIX + "properties"); // TODO: gemfire.properties and geode.properties
+    Properties expectedGemfireProperties = new Properties();
+    expectedGemfireProperties.setProperty(NAME, "nameFromPropertiesFile");
+    expectedGemfireProperties.store(new FileWriter(gemfirePropertiesFile, false), this.testName.getMethodName());
+    assertThat(gemfirePropertiesFile).isNotNull().exists().isFile();
+
+    PropertiesResolver propertiesResolver = new PropertiesResolver(gemfirePropertiesFile.toURL());
+
+    assertThat(propertiesResolver.getProperty(NAME)).isEqualTo("nameFromGemFireSystemProperty");
+  }
+
+  @Test
+  public void getPropertyUsesPropertiesFileLast() throws Exception {
+    System.clearProperty(GEODE_PREFIX + NAME);
+    System.clearProperty(GEMFIRE_PREFIX + NAME);
+
+    File gemfirePropertiesFile = this.temporaryFolder.newFile(GEODE_PREFIX + "properties"); // TODO: gemfire.properties and geode.properties
+    Properties expectedGemfireProperties = new Properties();
+    expectedGemfireProperties.setProperty(NAME, "nameFromPropertiesFile");
+    expectedGemfireProperties.store(new FileWriter(gemfirePropertiesFile, false), this.testName.getMethodName());
+    assertThat(gemfirePropertiesFile).isNotNull().exists().isFile();
+
+    PropertiesResolver propertiesResolver = new PropertiesResolver(gemfirePropertiesFile.toURL());
+
+    assertThat(propertiesResolver.getProperty(NAME)).isEqualTo("nameFromPropertiesFile");
+  }
+
+  /**
+   * Extracted from AbstractLauncherTest
+   */
+  @Ignore
+  @Test
+  public void testLoadGemFirePropertiesWithNullURL() {
+    PropertiesResolver propertiesResolver = new PropertiesResolver(null);
+    //assertThat(properties).isEmpty(); TODO
+  }
+
+  /**
+   * Extracted from AbstractLauncherTest
+   */
+  @Ignore
+  @Test
+  public void testLoadGemFirePropertiesWithNonExistingURL() throws MalformedURLException {
+    PropertiesResolver propertiesResolver = new PropertiesResolver(new URL("file:///path/to/non_existing/gemfire.properties"));
+    //assertThat(properties).isEmpty(); TODO
   }
 
   private File geodeInJarAsClasspathResource() throws IOException {
@@ -293,7 +373,7 @@ public class PropertiesResolverIntegrationTest {
     return file;
   }
 
-  public File createJar(String jarName, File inputFile) throws IOException
+  private File createJar(String jarName, File inputFile) throws IOException
   {
     Manifest manifest = new Manifest();
     manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");