Search in sources :

Example 1 with Engine

use of io.aklivity.zilla.runtime.engine.Engine in project zilla by aklivity.

the class ZillaStartCommand method run.

@Override
public void run() {
    Runtime runtime = getRuntime();
    Properties props = new Properties();
    props.setProperty(ENGINE_DIRECTORY.name(), ".zilla/engine");
    Path path = Paths.get(properties != null ? properties : OPTION_PROPERTIES_DEFAULT);
    if (Files.exists(path) || properties != null) {
        try {
            props.load(Files.newInputStream(path));
        } catch (IOException ex) {
            System.out.println("Failed to load properties: " + path);
            rethrowUnchecked(ex);
        }
    }
    if (workers >= 0) {
        props.setProperty(ENGINE_WORKERS.name(), Integer.toString(workers));
    }
    if (verbose) {
        props.setProperty(ENGINE_VERBOSE.name(), Boolean.toString(verbose));
    }
    EngineConfiguration config = new EngineConfiguration(props);
    Consumer<Throwable> report = exceptions ? e -> e.printStackTrace(System.err) : e -> System.err.println(e.getMessage());
    try (Engine engine = Engine.builder().config(config).configURL(configURL.toURL()).errorHandler(this::onError).build()) {
        engine.start().get();
        System.out.println("started");
        runtime.addShutdownHook(new Thread(this::onShutdown));
        stop.await();
        errors.forEach(report);
        System.out.println("stopped");
        stopped.countDown();
    } catch (Throwable ex) {
        System.out.println("error");
        rethrowUnchecked(ex);
    }
}
Also used : Path(java.nio.file.Path) Runtime.getRuntime(java.lang.Runtime.getRuntime) EngineConfiguration(io.aklivity.zilla.runtime.engine.EngineConfiguration) IOException(java.io.IOException) Properties(java.util.Properties) Engine(io.aklivity.zilla.runtime.engine.Engine)

Example 2 with Engine

use of io.aklivity.zilla.runtime.engine.Engine in project zilla by aklivity.

the class EngineRule method apply.

@Override
public Statement apply(Statement base, Description description) {
    Class<?> testClass = description.getTestClass();
    final String testMethod = description.getMethodName().replaceAll("\\[.*\\]", "");
    try {
        Configure[] configures = testClass.getDeclaredMethod(testMethod).getAnnotationsByType(Configure.class);
        Arrays.stream(configures).forEach(p -> properties.setProperty(p.name(), p.value()));
        Configuration config = description.getAnnotation(Configuration.class);
        if (config != null) {
            if (configurationRoot != null) {
                String resourceName = String.format("%s/%s", configurationRoot, config.value());
                configURL = testClass.getClassLoader().getResource(resourceName);
            } else {
                String resourceName = String.format("%s-%s", testClass.getSimpleName(), config.value());
                configURL = testClass.getResource(resourceName);
            }
        }
        cleanup();
    } catch (Exception e) {
        LangUtil.rethrowUnchecked(e);
    }
    return new Statement() {

        @Override
        public void evaluate() throws Throwable {
            EngineConfiguration config = configuration();
            final Thread baseThread = Thread.currentThread();
            final List<Throwable> errors = new ArrayList<>();
            final ErrorHandler errorHandler = ex -> {
                errors.add(ex);
                baseThread.interrupt();
            };
            engine = builder.config(config).configURL(configURL).errorHandler(errorHandler).build();
            try {
                engine.start().get();
                base.evaluate();
            } catch (Throwable t) {
                errors.add(t);
            } finally {
                try {
                    engine.close();
                } catch (Throwable t) {
                    errors.add(t);
                } finally {
                    assertEmpty(errors);
                }
            }
        }
    };
}
Also used : ENGINE_DRAIN_ON_CLOSE(io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_DRAIN_ON_CLOSE) EngineBuilder(io.aklivity.zilla.runtime.engine.EngineBuilder) ENGINE_STREAMS_BUFFER_CAPACITY(io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_STREAMS_BUFFER_CAPACITY) ENGINE_WORKERS(io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_WORKERS) Statement(org.junit.runners.model.Statement) Arrays(java.util.Arrays) ErrorHandler(org.agrona.ErrorHandler) PropertyDef(io.aklivity.zilla.runtime.engine.Configuration.PropertyDef) Configure(io.aklivity.zilla.runtime.engine.test.annotation.Configure) TestRule(org.junit.rules.TestRule) URL(java.net.URL) Engine(io.aklivity.zilla.runtime.engine.Engine) EngineConfiguration(io.aklivity.zilla.runtime.engine.EngineConfiguration) ArrayList(java.util.ArrayList) ENGINE_SYNTHETIC_ABORT(io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_SYNTHETIC_ABORT) Objects.requireNonNull(java.util.Objects.requireNonNull) MultipleFailureException.assertEmpty(org.junit.runners.model.MultipleFailureException.assertEmpty) LangUtil(org.agrona.LangUtil) EngineStats(io.aklivity.zilla.runtime.engine.EngineStats) Path(java.nio.file.Path) ENGINE_RESPONSE_BUFFER_CAPACITY(io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_RESPONSE_BUFFER_CAPACITY) ENGINE_ROUTED_DELAY_MILLIS(io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_ROUTED_DELAY_MILLIS) ENGINE_COMMAND_BUFFER_CAPACITY(io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_COMMAND_BUFFER_CAPACITY) Properties(java.util.Properties) Files(java.nio.file.Files) Binding(io.aklivity.zilla.runtime.engine.binding.Binding) FOLLOW_LINKS(java.nio.file.FileVisitOption.FOLLOW_LINKS) IOException(java.io.IOException) Description(org.junit.runner.Description) Configuration(io.aklivity.zilla.runtime.engine.test.annotation.Configuration) ENGINE_COUNTERS_BUFFER_CAPACITY(io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_COUNTERS_BUFFER_CAPACITY) File(java.io.File) List(java.util.List) Files.exists(java.nio.file.Files.exists) Pattern(java.util.regex.Pattern) ENGINE_DIRECTORY(io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_DIRECTORY) ErrorHandler(org.agrona.ErrorHandler) EngineConfiguration(io.aklivity.zilla.runtime.engine.EngineConfiguration) Configuration(io.aklivity.zilla.runtime.engine.test.annotation.Configuration) Statement(org.junit.runners.model.Statement) ArrayList(java.util.ArrayList) IOException(java.io.IOException) EngineConfiguration(io.aklivity.zilla.runtime.engine.EngineConfiguration) Configure(io.aklivity.zilla.runtime.engine.test.annotation.Configure)

Example 3 with Engine

use of io.aklivity.zilla.runtime.engine.Engine in project zilla by aklivity.

the class EngineTest method shouldConfigure.

@Test
public void shouldConfigure() throws Exception {
    String resource = String.format("%s-%s.json", getClass().getSimpleName(), "configure");
    URL configURL = getClass().getResource(resource);
    List<Throwable> errors = new LinkedList<>();
    try (Engine engine = Engine.builder().config(config).configURL(configURL).errorHandler(errors::add).build()) {
        engine.start().get();
        EngineStats stats = engine.stats("default", "test0");
        assertEquals(0L, stats.initialOpens());
        assertEquals(0L, stats.initialCloses());
        assertEquals(0L, stats.initialErrors());
        assertEquals(0L, stats.initialBytes());
        assertEquals(0L, stats.replyOpens());
        assertEquals(0L, stats.replyCloses());
        assertEquals(0L, stats.replyErrors());
        assertEquals(0L, stats.replyBytes());
    } catch (Throwable ex) {
        errors.add(ex);
    } finally {
        assertThat(errors, empty());
    }
}
Also used : EngineStats(io.aklivity.zilla.runtime.engine.EngineStats) URL(java.net.URL) LinkedList(java.util.LinkedList) Engine(io.aklivity.zilla.runtime.engine.Engine) Test(org.junit.Test)

Example 4 with Engine

use of io.aklivity.zilla.runtime.engine.Engine in project zilla by aklivity.

the class EngineTest method shouldNotConfigureDuplicateKey.

@Test
public void shouldNotConfigureDuplicateKey() throws Exception {
    String resource = String.format("%s-%s.json.broken", getClass().getSimpleName(), "duplicate-key");
    URL configURL = getClass().getResource(resource);
    List<Throwable> errors = new LinkedList<>();
    try (Engine engine = Engine.builder().config(config).configURL(configURL).errorHandler(errors::add).build()) {
        engine.start().get();
    } catch (Throwable ex) {
        errors.add(ex);
    } finally {
        assertThat(errors, not(empty()));
    }
}
Also used : URL(java.net.URL) LinkedList(java.util.LinkedList) Engine(io.aklivity.zilla.runtime.engine.Engine) Test(org.junit.Test)

Aggregations

Engine (io.aklivity.zilla.runtime.engine.Engine)4 URL (java.net.URL)3 EngineConfiguration (io.aklivity.zilla.runtime.engine.EngineConfiguration)2 EngineStats (io.aklivity.zilla.runtime.engine.EngineStats)2 IOException (java.io.IOException)2 Path (java.nio.file.Path)2 LinkedList (java.util.LinkedList)2 Properties (java.util.Properties)2 Test (org.junit.Test)2 PropertyDef (io.aklivity.zilla.runtime.engine.Configuration.PropertyDef)1 EngineBuilder (io.aklivity.zilla.runtime.engine.EngineBuilder)1 ENGINE_COMMAND_BUFFER_CAPACITY (io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_COMMAND_BUFFER_CAPACITY)1 ENGINE_COUNTERS_BUFFER_CAPACITY (io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_COUNTERS_BUFFER_CAPACITY)1 ENGINE_DIRECTORY (io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_DIRECTORY)1 ENGINE_DRAIN_ON_CLOSE (io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_DRAIN_ON_CLOSE)1 ENGINE_RESPONSE_BUFFER_CAPACITY (io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_RESPONSE_BUFFER_CAPACITY)1 ENGINE_ROUTED_DELAY_MILLIS (io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_ROUTED_DELAY_MILLIS)1 ENGINE_STREAMS_BUFFER_CAPACITY (io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_STREAMS_BUFFER_CAPACITY)1 ENGINE_SYNTHETIC_ABORT (io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_SYNTHETIC_ABORT)1 ENGINE_WORKERS (io.aklivity.zilla.runtime.engine.EngineConfiguration.ENGINE_WORKERS)1