From 14e7aa61a79011b1949c0a4714dbe71de876ce7a Mon Sep 17 00:00:00 2001 From: Andrii Abramov Date: Mon, 18 Feb 2019 22:36:56 +0200 Subject: [PATCH] #1922. Default values for environment variable for YAML. --- .../java/org/redisson/config/EnvProvider.java | 20 +++++++ .../redisson/config/SystemEnvProvider.java | 16 +++++ .../redisson/config/ConfigSupportTest.java | 59 +++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 redisson/src/main/java/org/redisson/config/EnvProvider.java create mode 100644 redisson/src/main/java/org/redisson/config/SystemEnvProvider.java create mode 100644 redisson/src/test/java/org/redisson/config/ConfigSupportTest.java diff --git a/redisson/src/main/java/org/redisson/config/EnvProvider.java b/redisson/src/main/java/org/redisson/config/EnvProvider.java new file mode 100644 index 000000000..493a7f030 --- /dev/null +++ b/redisson/src/main/java/org/redisson/config/EnvProvider.java @@ -0,0 +1,20 @@ +package org.redisson.config; + +/** + * Adaptor for key value storage, a.k.a. Environment. + */ +@FunctionalInterface +interface EnvProvider { + + /** + * Gets the value of the specified environment variable. An + * environment variable is a system-dependent external named + * value. + * + * @param name the name of the environment variable + * @return the string value of the variable, or null + * if the variable is not defined in the system environment + */ + String get(String name); + +} diff --git a/redisson/src/main/java/org/redisson/config/SystemEnvProvider.java b/redisson/src/main/java/org/redisson/config/SystemEnvProvider.java new file mode 100644 index 000000000..89364992a --- /dev/null +++ b/redisson/src/main/java/org/redisson/config/SystemEnvProvider.java @@ -0,0 +1,16 @@ +package org.redisson.config; + +/** + * Default implementation for environment values adaptor. + */ +public class SystemEnvProvider implements EnvProvider { + + /** + * @see System#getenv() + */ + @Override + public String get(String name) { + return System.getenv(name); + } + +} diff --git a/redisson/src/test/java/org/redisson/config/ConfigSupportTest.java b/redisson/src/test/java/org/redisson/config/ConfigSupportTest.java new file mode 100644 index 000000000..525e2b4b6 --- /dev/null +++ b/redisson/src/test/java/org/redisson/config/ConfigSupportTest.java @@ -0,0 +1,59 @@ +package org.redisson.config; + +import com.fasterxml.jackson.databind.exc.InvalidFormatException; +import org.junit.Test; + +import java.io.IOException; +import java.net.URI; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.*; + +public class ConfigSupportTest { + + @Test + public void testParsingLiteral() throws IOException { + SingleServerConfig config = mkConfig("127.0.0.1", new HashMap() {{ + put("REDIS_URI", "1.1.1.1"); + }}); + + assertEquals(URI.create("redis://127.0.0.1"), config.getAddress()); + } + + @Test + public void testParsingEnv() throws IOException { + SingleServerConfig config = mkConfig("${REDIS_URI}", new HashMap() {{ + put("REDIS_URI", "1.1.1.1"); + }}); + + assertEquals(URI.create("redis://1.1.1.1"), config.getAddress()); + } + + @Test(expected = InvalidFormatException.class) + public void testParsingEnv_envMissing() throws IOException { + mkConfig("${REDIS_URI}", new HashMap<>()); + } + + @Test + public void testParsingDefault_envPresent() throws IOException { + SingleServerConfig config = mkConfig("${REDIS_URI:-10.0.0.1}", new HashMap() {{ + put("REDIS_URI", "11.0.0.1"); + }}); + + assertEquals(URI.create("redis://11.0.0.1"), config.getAddress()); + } + + @Test + public void testParsingDefault_envMissing() throws IOException { + SingleServerConfig config = mkConfig("${REDIS_URI:-10.0.0.1}", new HashMap<>()); + + assertEquals(URI.create("redis://10.0.0.1"), config.getAddress()); + } + + private SingleServerConfig mkConfig(String authorityValue, Map env) throws IOException { + String config = "singleServerConfig:\n address: redis://" + authorityValue; + return new ConfigSupport(env::get).fromYAML(config, Config.class).getSingleServerConfig(); + } + +} -- GitLab