Search in sources :

Example 1 with SimpleTypeRegistry

use of net.morimekta.providence.util.SimpleTypeRegistry in project providence by morimekta.

the class ProvidenceConfigParserTest method setUp.

@Before
public void setUp() {
    registry = new SimpleTypeRegistry();
    registry.registerRecursively(Service.kDescriptor);
    registry.registerRecursively(Value.kDescriptor);
    registry.registerRecursively(RefMerge.kDescriptor);
    parser = new ProvidenceConfigParser(registry, false);
}
Also used : SimpleTypeRegistry(net.morimekta.providence.util.SimpleTypeRegistry) Before(org.junit.Before)

Example 2 with SimpleTypeRegistry

use of net.morimekta.providence.util.SimpleTypeRegistry in project providence by morimekta.

the class ProvidenceConfigSupplierTest method testReferencedFilesOnUpdatesFromCanonicalFiles.

@Test
public void testReferencedFilesOnUpdatesFromCanonicalFiles() throws IOException {
    SimpleTypeRegistry registry = new SimpleTypeRegistry();
    registry.registerRecursively(Service.kDescriptor);
    watcher = new FileWatcher();
    parser = new ProvidenceConfigParser(registry, true);
    File service = new File(tmp.getRoot(), "service.config").getAbsoluteFile();
    File include = new File(tmp.getRoot(), "include.config").getAbsoluteFile();
    File v1 = tmp.newFolder("..dist", "v1").getAbsoluteFile();
    File service1 = new File(v1, "service.config").getAbsoluteFile();
    File include1 = new File(v1, "include.config").getAbsoluteFile();
    File v2 = tmp.newFolder("..dist", "v2").getAbsoluteFile();
    File service2 = new File(v2, "service.config").getAbsoluteFile();
    File include2 = new File(v2, "include.config").getAbsoluteFile();
    // write v1 config
    writeContentTo("config.ServicePort {\n" + "  port = 8080\n" + "}\n", include1);
    writeContentTo("include \"include.config\" as inc\n" + "config.Service {\n" + "  name = \"test\"\n" + "  http = inc\n" + "}\n", service1);
    // write v2 config
    writeContentTo("config.ServicePort {\n" + "  port = 80\n" + "}\n", include2);
    writeContentTo("include \"include.config\" as inc\n" + "config.Service {\n" + "  name = \"other\"\n" + "  http = inc\n" + "}\n", service2);
    Files.createSymbolicLink(service.toPath(), service1.toPath());
    Files.createSymbolicLink(include.toPath(), include1.toPath());
    ProvidenceConfigSupplier<Service, Service._Field> config = new ProvidenceConfigSupplier<>(service, null, watcher, parser, clock);
    Service serviceConfig = config.get();
    AtomicReference<Service> serviceRef = new AtomicReference<>(serviceConfig);
    assertThat(serviceConfig.getName(), is("test"));
    assertThat(serviceConfig.getHttp().getPort(), is((short) 8080));
    AtomicBoolean updated = new AtomicBoolean();
    ConfigListener<Service, Service._Field> listener = cf -> {
        serviceRef.set(cf);
        updated.set(true);
    };
    config.addListener(listener);
    File tmpFile = new File(tmp.getRoot(), "..tmp");
    Files.createSymbolicLink(tmpFile.toPath(), service2.toPath());
    Files.move(tmpFile.toPath(), service.toPath(), StandardCopyOption.REPLACE_EXISTING);
    waitAtMost(Duration.ONE_SECOND).untilTrue(updated);
    serviceConfig = serviceRef.get();
    assertThat(serviceConfig.getName(), is("other"));
    assertThat(serviceConfig.getHttp().getPort(), is((short) 80));
}
Also used : CoreMatchers.is(org.hamcrest.CoreMatchers.is) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) FakeClock(net.morimekta.testing.time.FakeClock) AtomicReference(java.util.concurrent.atomic.AtomicReference) Awaitility.waitAtMost(org.awaitility.Awaitility.waitAtMost) StandardCopyOption(java.nio.file.StandardCopyOption) Mockito.verifyZeroInteractions(org.mockito.Mockito.verifyZeroInteractions) Assert.assertThat(org.junit.Assert.assertThat) Pair(net.morimekta.util.Pair) ArgumentCaptor(org.mockito.ArgumentCaptor) Mockito.verifyNoMoreInteractions(org.mockito.Mockito.verifyNoMoreInteractions) Mockito.atLeast(org.mockito.Mockito.atLeast) SimpleTypeRegistry(net.morimekta.providence.util.SimpleTypeRegistry) Before(org.junit.Before) CoreMatchers.sameInstance(org.hamcrest.CoreMatchers.sameInstance) ImmutableSet(com.google.common.collect.ImmutableSet) ProvidenceConfigException(net.morimekta.providence.config.ProvidenceConfigException) Duration(org.awaitility.Duration) Files(java.nio.file.Files) TestConfigSupplier(net.morimekta.providence.config.util.TestConfigSupplier) FileWatcher(net.morimekta.util.FileWatcher) Test(org.junit.Test) IOException(java.io.IOException) Mockito.doNothing(org.mockito.Mockito.doNothing) Mockito.when(org.mockito.Mockito.when) ConfigListener(net.morimekta.providence.config.ConfigListener) File(java.io.File) Mockito.verify(org.mockito.Mockito.verify) Rule(org.junit.Rule) Mockito.atMost(org.mockito.Mockito.atMost) ResourceUtils.writeContentTo(net.morimekta.testing.ResourceUtils.writeContentTo) Database(net.morimekta.test.providence.config.Database) Mockito.reset(org.mockito.Mockito.reset) TemporaryFolder(org.junit.rules.TemporaryFolder) Service(net.morimekta.test.providence.config.Service) Mockito.mock(org.mockito.Mockito.mock) SimpleTypeRegistry(net.morimekta.providence.util.SimpleTypeRegistry) Service(net.morimekta.test.providence.config.Service) AtomicReference(java.util.concurrent.atomic.AtomicReference) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) FileWatcher(net.morimekta.util.FileWatcher) File(java.io.File) Test(org.junit.Test)

Example 3 with SimpleTypeRegistry

use of net.morimekta.providence.util.SimpleTypeRegistry in project providence by morimekta.

the class FormatUtils method collectConfigIncludes.

public static void collectConfigIncludes(File rc, Map<String, File> includes) throws IOException {
    if (!rc.exists()) {
        return;
    }
    rc = rc.getCanonicalFile();
    if (!rc.isFile()) {
        throw new ProvidenceConfigException("Rc file is not a file " + rc.getPath());
    }
    try {
        SimpleTypeRegistry registry = new SimpleTypeRegistry();
        registry.registerRecursively(ProvidenceTools.kDescriptor);
        ProvidenceConfig loader = new ProvidenceConfig(registry);
        ProvidenceTools config = loader.getConfig(rc);
        if (config.hasIncludes()) {
            File basePath = rc.getParentFile();
            if (config.hasIncludesBasePath()) {
                String base = config.getIncludesBasePath();
                if (base.charAt(0) == '~') {
                    base = System.getenv("HOME") + base.substring(1);
                }
                basePath = new File(base);
                if (!basePath.exists() || !basePath.isDirectory()) {
                    throw new ProvidenceConfigException("Includes Base path in " + rc.getPath() + " is not a directory: " + basePath);
                }
            }
            for (String path : config.getIncludes()) {
                File include = new File(basePath, path);
                collectIncludes(include, includes);
            }
        }
    } catch (SerializerException e) {
        System.err.println("Config error: " + e.getMessage());
        System.err.println(e.asString());
        System.err.println();
        throw new ArgumentException(e, "Exception when parsing " + rc.getCanonicalFile());
    }
}
Also used : SimpleTypeRegistry(net.morimekta.providence.util.SimpleTypeRegistry) ProvidenceTools(net.morimekta.providence.tools.common.ProvidenceTools) ArgumentException(net.morimekta.console.args.ArgumentException) ProvidenceConfig(net.morimekta.providence.config.ProvidenceConfig) File(java.io.File) SerializerException(net.morimekta.providence.serializer.SerializerException) ProvidenceConfigException(net.morimekta.providence.config.ProvidenceConfigException)

Example 4 with SimpleTypeRegistry

use of net.morimekta.providence.util.SimpleTypeRegistry in project providence by morimekta.

the class CommonOptions method getConfig.

public ProvidenceTools getConfig() throws ProvidenceConfigException {
    SimpleTypeRegistry registry = new SimpleTypeRegistry();
    registry.registerRecursively(ProvidenceTools.kDescriptor);
    ProvidenceConfig loader = new ProvidenceConfig(registry);
    ProvidenceTools config = ProvidenceTools.builder().setGeneratorPaths(ImmutableList.of()).build();
    if (rc.isFile()) {
        config = loader.getConfig(rc, config);
    }
    return config;
}
Also used : SimpleTypeRegistry(net.morimekta.providence.util.SimpleTypeRegistry) ProvidenceConfig(net.morimekta.providence.config.ProvidenceConfig)

Example 5 with SimpleTypeRegistry

use of net.morimekta.providence.util.SimpleTypeRegistry in project providence by morimekta.

the class ProvidenceConfigSupplierTest method testParentConfigUpdatesPropagaing.

@Test
public void testParentConfigUpdatesPropagaing() throws IOException {
    TestConfigSupplier<Database, Database._Field> parent = new TestConfigSupplier<>(Database.builder().setUri("foo").build());
    File bar = writeContentTo("config.Database { driver = \"bar\" }", tmp.newFile("bar.config"));
    SimpleTypeRegistry registry = new SimpleTypeRegistry();
    registry.registerRecursively(Database.kDescriptor);
    parser = new ProvidenceConfigParser(registry, false);
    ProvidenceConfigSupplier<Database, Database._Field> config = new ProvidenceConfigSupplier<>(bar, parent, watcher, parser, clock);
    assertThat(config.get(), is(Database.builder().setUri("foo").setDriver("bar").build()));
    ConfigListener<Database, Database._Field> listener = mock(ConfigListener.class);
    config.addListener(listener);
    parent.testUpdate(Database.builder().setUri("fish").build());
    verify(listener).onConfigChange(Database.builder().setUri("fish").setDriver("bar").build());
    reset(listener);
    config.removeListener(listener);
    parent.testUpdate(Database.builder().build());
    verifyZeroInteractions(listener);
}
Also used : TestConfigSupplier(net.morimekta.providence.config.util.TestConfigSupplier) SimpleTypeRegistry(net.morimekta.providence.util.SimpleTypeRegistry) Database(net.morimekta.test.providence.config.Database) File(java.io.File) Test(org.junit.Test)

Aggregations

SimpleTypeRegistry (net.morimekta.providence.util.SimpleTypeRegistry)8 Before (org.junit.Before)5 File (java.io.File)4 ProvidenceConfig (net.morimekta.providence.config.ProvidenceConfig)3 ProvidenceConfigException (net.morimekta.providence.config.ProvidenceConfigException)2 TestConfigSupplier (net.morimekta.providence.config.util.TestConfigSupplier)2 Database (net.morimekta.test.providence.config.Database)2 FileWatcher (net.morimekta.util.FileWatcher)2 Test (org.junit.Test)2 ImmutableSet (com.google.common.collect.ImmutableSet)1 IOException (java.io.IOException)1 Files (java.nio.file.Files)1 StandardCopyOption (java.nio.file.StandardCopyOption)1 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1 AtomicReference (java.util.concurrent.atomic.AtomicReference)1 ArgumentException (net.morimekta.console.args.ArgumentException)1 ConfigListener (net.morimekta.providence.config.ConfigListener)1 ProvidenceConfigUtil.resolveFile (net.morimekta.providence.config.impl.ProvidenceConfigUtil.resolveFile)1 SerializerException (net.morimekta.providence.serializer.SerializerException)1 ProvidenceTools (net.morimekta.providence.tools.common.ProvidenceTools)1