Search in sources :

Example 76 with Config

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);
}
Also used : ConfigSource(org.eclipse.microprofile.config.spi.ConfigSource) Properties(java.util.Properties) Files(java.nio.file.Files) Enumeration(java.util.Enumeration) Config(io.helidon.config.Config) MutabilitySupport(io.helidon.config.MutabilitySupport) URL(java.net.URL) Set(java.util.Set) IOException(java.io.IOException) HashMap(java.util.HashMap) ConfigException(io.helidon.config.ConfigException) HashSet(java.util.HashSet) Objects(java.util.Objects) List(java.util.List) URLConnection(java.net.URLConnection) Duration(java.time.Duration) Map(java.util.Map) LinkedList(java.util.LinkedList) Path(java.nio.file.Path) InputStream(java.io.InputStream) InputStream(java.io.InputStream) ConfigException(io.helidon.config.ConfigException) Duration(java.time.Duration) IOException(java.io.IOException) Properties(java.util.Properties)

Example 77 with Config

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));
}
Also used : ConfigSource(io.helidon.config.spi.ConfigSource) Config(io.helidon.config.Config) MetaConfig(io.helidon.config.MetaConfig) Test(org.junit.jupiter.api.Test)

Example 78 with Config

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));
}
Also used : ConfigSource(io.helidon.config.spi.ConfigSource) Config(io.helidon.config.Config) MetaConfig(io.helidon.config.MetaConfig) Test(org.junit.jupiter.api.Test)

Example 79 with Config

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));
}
Also used : Config(io.helidon.config.Config) CountDownLatch(java.util.concurrent.CountDownLatch) EnumSource(org.junit.jupiter.params.provider.EnumSource) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 80 with Config

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()));
}
Also used : DbClient(io.helidon.dbclient.DbClient) Config(io.helidon.config.Config) TimeUnit(java.util.concurrent.TimeUnit) Test(org.junit.jupiter.api.Test)

Aggregations

Config (io.helidon.config.Config)329 Test (org.junit.jupiter.api.Test)169 LogConfig (io.helidon.common.LogConfig)56 WebServer (io.helidon.webserver.WebServer)54 Routing (io.helidon.webserver.Routing)51 BeforeAll (org.junit.jupiter.api.BeforeAll)24 Security (io.helidon.security.Security)20 HealthSupport (io.helidon.health.HealthSupport)18 Single (io.helidon.common.reactive.Single)17 MetricsSupport (io.helidon.metrics.MetricsSupport)16 ExtendWith (org.junit.jupiter.api.extension.ExtendWith)16 ConfigSources (io.helidon.config.ConfigSources)15 JsonpSupport (io.helidon.media.jsonp.JsonpSupport)15 SecurityContext (io.helidon.security.SecurityContext)15 Optional (java.util.Optional)15 TimeUnit (java.util.concurrent.TimeUnit)15 WebSecurity (io.helidon.security.integration.webserver.WebSecurity)13 HealthChecks (io.helidon.health.checks.HealthChecks)12 WebClient (io.helidon.webclient.WebClient)12 GrpcRouting (io.helidon.grpc.server.GrpcRouting)11