use of io.helidon.config.Config in project helidon by oracle.
the class MpConfigSources method create.
/**
* {@link java.util.Properties} config source based on a file on file system.
* The file is read just once, when the source is created and further changes to the underlying file are
* ignored.
*
* @param name name of the config source
* @param path path of the properties file on the file system
* @return a new config source
*/
public static ConfigSource create(String name, Path path) {
Properties props = new Properties();
try (InputStream in = Files.newInputStream(path)) {
props.load(in);
} catch (IOException e) {
throw new ConfigException("Failed to read properties from " + path.toAbsolutePath());
}
if ("true".equals(props.getProperty("helidon.config.polling.enabled"))) {
String durationString = props.getProperty("helidon.config.polling.duration");
Duration duration;
if (durationString == null) {
duration = Duration.ofSeconds(10);
} else {
duration = Duration.parse(durationString);
}
MutabilitySupport.poll(path, duration, changed -> update(path, props), changed -> props.clear());
} else if ("true".equals(props.getProperty("helidon.config.watcher.enabled"))) {
MutabilitySupport.watch(path, changed -> update(path, props), changed -> props.clear());
}
return create(name, props);
}
use of io.helidon.config.Config in project helidon by oracle.
the class EtcdConfigSourceBuilderTest method testSourceFromConfigByType.
@Test
public void testSourceFromConfigByType() {
Config metaConfig = Config.create(ConfigSources.create(ObjectNode.builder().addValue("type", "etcd").addObject("properties", ObjectNode.builder().addValue("uri", "http://localhost:2379").addValue("key", "/registry").addValue("api", "v3").build()).build()));
ConfigSource source = MetaConfig.configSource(metaConfig).get(0);
assertThat(source.get(), is(instanceOf(EtcdConfigSource.class)));
EtcdConfigSource etcdSource = (EtcdConfigSource) source;
assertThat(etcdSource.etcdEndpoint().uri(), is(URI.create("http://localhost:2379")));
assertThat(etcdSource.etcdEndpoint().key(), is("/registry"));
assertThat(etcdSource.etcdEndpoint().api(), is(EtcdApi.v3));
}
use of io.helidon.config.Config in project helidon by oracle.
the class EtcdConfigSourceBuilderTest method testSourceFromConfigByClass.
@Test
public void testSourceFromConfigByClass() {
Config metaConfig = Config.create(ConfigSources.create(ObjectNode.builder().addValue("type", "etcd").addObject("properties", ObjectNode.builder().addValue("uri", "http://localhost:2379").addValue("key", "/registry").addValue("api", "v3").build()).build()));
ConfigSource source = MetaConfig.configSource(metaConfig).get(0);
assertThat(source, is(instanceOf(EtcdConfigSource.class)));
EtcdConfigSource etcdSource = (EtcdConfigSource) source;
assertThat(etcdSource.etcdEndpoint().uri(), is(URI.create("http://localhost:2379")));
assertThat(etcdSource.etcdEndpoint().key(), is("/registry"));
assertThat(etcdSource.etcdEndpoint().api(), is(EtcdApi.v3));
}
use of io.helidon.config.Config in project helidon by oracle.
the class EtcdConfigSourceIT method testConfigChanges.
@ParameterizedTest
@EnumSource(EtcdApi.class)
public void testConfigChanges(EtcdApi version) throws Exception {
putConfiguration(version, "/application.conf");
Config config = Config.builder().sources(EtcdConfigSource.builder().uri(DEFAULT_URI).key("configuration").api(version).mediaType(MEDIA_TYPE_APPLICATION_HOCON).changeWatcher(EtcdWatcher.create()).build()).addParser(HoconConfigParser.create()).build();
assertThat(config.get("security").asNodeList().get(), hasSize(1));
CountDownLatch initLatch = new CountDownLatch(1);
CountDownLatch nextLatch = new CountDownLatch(3);
config.onChange(it -> initLatch.countDown());
assertThat(initLatch.await(1, TimeUnit.SECONDS), is(true));
putConfiguration(version, "/application2.conf");
TimeUnit.MILLISECONDS.sleep(10);
putConfiguration(version, "/application3.conf");
TimeUnit.MILLISECONDS.sleep(10);
putConfiguration(version, "/application4.conf");
assertThat(nextLatch.await(20, TimeUnit.SECONDS), is(true));
}
use of io.helidon.config.Config in project helidon by oracle.
the class DbClientHealthCheckTest method testBuilderNamedQueryFromConfig.
/**
* Test health check builder with named query statement
*/
@Test
void testBuilderNamedQueryFromConfig() {
final Config config = Config.create(ConfigSources.classpath("testBuilderFromConfig.yaml"));
final DbClient dbClient = new DbClientMock();
final Config healthConfig = config.get("health-check-query-named");
final DbClientHealthCheck.Builder builder = DbClientHealthCheck.builder(dbClient).config(healthConfig);
// Config file value
final String configName = healthConfig.get("name").as(String.class).get();
final String configType = healthConfig.get("type").as(String.class).get();
// final String configStatement = healthConfig.get("statement").as(String.class).get();
final String configStatementName = healthConfig.get("statementName").as(String.class).get();
final Long configTimeout = healthConfig.get("timeout").as(Long.class).get();
final String configTimeUnit = healthConfig.get("timeUnit").as(String.class).get();
// Builder instance content
final String name = builder.name();
final boolean isDML = builder.isDML();
final String statement = builder.statement();
final String statementName = builder.statementName();
final boolean isNamedstatement = builder.isNamedstatement();
final long timeoutDuration = builder.timeoutDuration();
final TimeUnit timeoutUnit = builder.timeoutUnit();
// Verify builder internal state
assertThat(name, equalTo(configName));
assertThat(isDML, equalTo(false));
assertThat(statement, nullValue());
assertThat(statementName, equalTo(configStatementName));
assertThat(isNamedstatement, equalTo(true));
assertThat(timeoutDuration, equalTo(configTimeout));
assertThat(timeoutUnit.name().toLowerCase(), equalTo(configTimeUnit.toLowerCase()));
DbClientHealthCheck check = builder.build();
// Health check instance content
final String checkName = check.name();
final long checkTimeoutDuration = check.timeoutDuration();
final TimeUnit checkTimeoutUnit = check.timeoutUnit();
// Verify health check class and internal content
assertThat(check.getClass().getSimpleName(), equalTo("DbClientHealthCheckAsNamedQuery"));
assertThat(checkName, equalTo(configName));
assertThat(((DbClientHealthCheck.DbClientHealthCheckAsNamedQuery) check).statementName(), equalTo(configStatementName));
assertThat(checkTimeoutDuration, equalTo(configTimeout));
assertThat(checkTimeoutUnit.name().toLowerCase(), equalTo(configTimeUnit.toLowerCase()));
}
Aggregations