未验证 提交 c60c3767 编写于 作者: N Nikita Koksharov 提交者: GitHub

Merge pull request #1923 from aaabramov/feature/1922/default-values-for-env

1922: Default values for environment variables
......@@ -61,7 +61,7 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
*
*/
public class ConfigSupport {
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "class")
@JsonFilter("classFilter")
public static class ClassMixIn {
......@@ -136,13 +136,15 @@ public class ConfigSupport {
}
private String resolveEnvParams(String content) {
Pattern pattern = Pattern.compile("\\$\\{(\\w+)\\}");
Pattern pattern = Pattern.compile("\\$\\{(\\w+(:-.+)?)\\}");
Matcher m = pattern.matcher(content);
while (m.find()) {
String s = m.group(1);
String v = System.getenv(s);
String[] parts = m.group(1).split(":-");
String v = System.getenv(parts[0]);
if (v != null) {
content = content.replace(m.group(), v);
} else if (parts.length == 2) {
content = content.replace(m.group(), parts[1]);
}
}
return content;
......
package org.redisson.config;
import com.fasterxml.jackson.databind.exc.InvalidFormatException;
import mockit.Mock;
import mockit.MockUp;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
import static org.junit.Assert.*;
public class ConfigSupportTest {
@Test
public void testParsingLiteral() throws IOException {
mockHostEnv("1.1.1.1");
SingleServerConfig config = mkConfig("127.0.0.1");
assertEquals(URI.create("redis://127.0.0.1"), config.getAddress());
}
@Test
public void testParsingEnv() throws IOException {
mockHostEnv("1.1.1.1");
SingleServerConfig config = mkConfig("${REDIS_URI}");
assertEquals(URI.create("redis://1.1.1.1"), config.getAddress());
}
@Test(expected = InvalidFormatException.class)
public void testParsingEnv_envMissing() throws IOException {
mockHostEnv(null);
mkConfig("${REDIS_URI}");
}
@Test
public void testParsingDefault_envPresent() throws IOException {
mockHostEnv("11.0.0.1");
SingleServerConfig config = mkConfig("${REDIS_URI:-10.0.0.1}");
assertEquals(URI.create("redis://11.0.0.1"), config.getAddress());
}
@Test
public void testParsingDefault_envMissing() throws IOException {
mockHostEnv(null);
SingleServerConfig config = mkConfig("${REDIS_URI:-10.0.0.1}");
assertEquals(URI.create("redis://10.0.0.1"), config.getAddress());
}
private SingleServerConfig mkConfig(String authorityValue) throws IOException {
String config = "singleServerConfig:\n address: redis://" + authorityValue;
return new ConfigSupport().fromYAML(config, Config.class).getSingleServerConfig();
}
private void mockHostEnv(String value) {
new MockUp<System>() {
@Mock
String getenv(String name) {
return value;
}
};
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册