Repository: incubator-geode Updated Branches: refs/heads/develop bb44eb6d5 -> 07798ca80
GEODE-1809: Improve error handling Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/07798ca8 Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/07798ca8 Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/07798ca8 Branch: refs/heads/develop Commit: 07798ca802e752f66fc05811fc42e872675df525 Parents: bb44eb6 Author: Anthony Baker <[email protected]> Authored: Tue Aug 30 21:38:24 2016 -0700 Committer: Anthony Baker <[email protected]> Committed: Wed Aug 31 16:39:01 2016 -0700 ---------------------------------------------------------------------- .../gemfire/internal/GemFireVersion.java | 65 ++++++++++---------- .../internal/GemFireVersionJUnitTest.java | 22 +++++-- 2 files changed, 52 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/07798ca8/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireVersion.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireVersion.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireVersion.java index 9bd3d4f..0d0bd58 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireVersion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireVersion.java @@ -23,6 +23,7 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.net.URL; import java.util.Map.Entry; +import java.util.Optional; import java.util.Properties; import java.util.StringTokenizer; @@ -183,12 +184,12 @@ public class GemFireVersion { private final Properties description; /** Error message to display instead of the version information */ - private final String error; + private final Optional<String> error; public VersionDescription(String name) { InputStream is = ClassPathLoader.getLatest().getResourceAsStream(getClass(), name); if (is == null) { - error = LocalizedStrings.GemFireVersion_COULD_NOT_FIND_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_0.toLocalizedString(RESOURCE_NAME); + error = Optional.of(LocalizedStrings.GemFireVersion_COULD_NOT_FIND_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_0.toLocalizedString(name)); description = null; return; } @@ -197,26 +198,28 @@ public class GemFireVersion { try { description.load(is); } catch (Exception ex) { - error = LocalizedStrings.GemFireVersion_COULD_NOT_READ_PROPERTIES_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_0_BECAUSE_1.toLocalizedString(new Object[] {RESOURCE_NAME, ex}); + error = Optional.of(LocalizedStrings.GemFireVersion_COULD_NOT_READ_PROPERTIES_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_0_BECAUSE_1.toLocalizedString(new Object[] {name, ex})); return; } - error = validate(); + + error = validate(description); } public String getProperty(String key) { - if (error != null) { - return error; - } - return description.getProperty(key); + return error.orElse(description.getProperty(key)); } public String getNativeCodeVersion() { return SmHelper.getNativeVersion(); } - private void print(PrintWriter pw) { - for (Entry<?,?> props : description.entrySet()) { - pw.println(props.getKey() + ": " + props.getValue()); + void print(PrintWriter pw) { + if (error.isPresent()) { + pw.println(error.get()); + } else { + for (Entry<?,?> props : description.entrySet()) { + pw.println(props.getKey() + ": " + props.getValue()); + } } // not stored in the description map @@ -249,43 +252,43 @@ public class GemFireVersion { } } - private String validate() { - if (getProperty(PRODUCT_NAME) == null) { - return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {PRODUCT_NAME, RESOURCE_NAME}); + private Optional<String> validate(Properties props) { + if (props.get(PRODUCT_NAME) == null) { + return Optional.of(LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {PRODUCT_NAME, RESOURCE_NAME})); } - if (getProperty(GEMFIRE_VERSION) == null) { - return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {GEMFIRE_VERSION, RESOURCE_NAME}); + if (props.get(GEMFIRE_VERSION) == null) { + return Optional.of(LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {GEMFIRE_VERSION, RESOURCE_NAME})); } - if (getProperty(SOURCE_DATE) == null) { - return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {SOURCE_DATE, RESOURCE_NAME}); + if (props.get(SOURCE_DATE) == null) { + return Optional.of(LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {SOURCE_DATE, RESOURCE_NAME})); } - if (getProperty(SOURCE_REVISION) == null) { - return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {SOURCE_REVISION, RESOURCE_NAME}); + if (props.get(SOURCE_REVISION) == null) { + return Optional.of(LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {SOURCE_REVISION, RESOURCE_NAME})); } - if (getProperty(SOURCE_REPOSITORY) == null) { - return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {SOURCE_REPOSITORY, RESOURCE_NAME}); + if (props.get(SOURCE_REPOSITORY) == null) { + return Optional.of(LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {SOURCE_REPOSITORY, RESOURCE_NAME})); } - if (getProperty(BUILD_DATE) == null) { - return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_DATE, RESOURCE_NAME}); + if (props.get(BUILD_DATE) == null) { + return Optional.of(LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_DATE, RESOURCE_NAME})); } - if (getProperty(BUILD_ID) == null) { - return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_ID, RESOURCE_NAME}); + if (props.get(BUILD_ID) == null) { + return Optional.of(LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_ID, RESOURCE_NAME})); } - if (getProperty(BUILD_PLATFORM) == null) { - return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_PLATFORM, RESOURCE_NAME}); + if (props.get(BUILD_PLATFORM) == null) { + return Optional.of(LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_PLATFORM, RESOURCE_NAME})); } - if (getProperty(BUILD_JAVA_VERSION) == null) { - return LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_JAVA_VERSION, RESOURCE_NAME}); + if (props.get(BUILD_JAVA_VERSION) == null) { + return Optional.of(LocalizedStrings.GemFireVersion_MISSING_PROPERTY_0_FROM_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_1.toLocalizedString(new Object[] {BUILD_JAVA_VERSION, RESOURCE_NAME})); } - return null; + return Optional.empty(); } } } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/07798ca8/geode-core/src/test/java/com/gemstone/gemfire/internal/GemFireVersionJUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/GemFireVersionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/GemFireVersionJUnitTest.java index 8369d1f..850172a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/GemFireVersionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/GemFireVersionJUnitTest.java @@ -18,9 +18,14 @@ package com.gemstone.gemfire.internal; import static org.junit.Assert.assertTrue; +import java.io.PrintWriter; +import java.io.StringWriter; + import org.junit.Test; import org.junit.experimental.categories.Category; +import com.gemstone.gemfire.internal.GemFireVersion.VersionDescription; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; import com.gemstone.gemfire.test.junit.categories.UnitTest; /** @@ -31,10 +36,6 @@ import com.gemstone.gemfire.test.junit.categories.UnitTest; @Category(UnitTest.class) public class GemFireVersionJUnitTest { - /** - * Prints both the GemFire version info and the system properties. - * We have to print both - */ @Test public void testPrintInfo() { final String versionOutput = GemFireVersion.asString(); @@ -50,4 +51,17 @@ public class GemFireVersionJUnitTest { assertTrue(versionOutput.contains(GemFireVersion.VersionDescription.BUILD_PLATFORM)); assertTrue(versionOutput.contains(GemFireVersion.VersionDescription.BUILD_JAVA_VERSION)); } + + @Test + public void testNoFile() { + String noFile = "not a property file"; + VersionDescription noVersion = new VersionDescription(noFile); + + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + noVersion.print(pw); + + String noFileOutput = sw.toString(); + assertTrue(noFileOutput.contains(LocalizedStrings.GemFireVersion_COULD_NOT_FIND_RESOURCE_COM_GEMSTONE_GEMFIRE_INTERNAL_0.toLocalizedString(noFile))); + } }
