diff --git a/pom.xml b/pom.xml index f051be0..eefac53 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,9 @@ 3.6.0 2.44.3 3.14.0 + ${maven.compiler.version} 3.5.2 + ${surefire-plugin.version} 5.12.0 @@ -50,6 +52,7 @@ quarkus-bom io.quarkus.platform 3.19.3 + 3.21.0 @@ -204,4 +207,20 @@ + + + + + + jdk-17-and-newer + + [17,) + + + proxy-wasm-jaxrs-quarkus + proxy-wasm-jaxrs-quarkus-example + + + + diff --git a/proxy-wasm-java-host/pom.xml b/proxy-wasm-java-host/pom.xml index 3692360..e14447e 100644 --- a/proxy-wasm-java-host/pom.xml +++ b/proxy-wasm-java-host/pom.xml @@ -8,9 +8,9 @@ 1.0-SNAPSHOT ../pom.xml + proxy-wasm-java-host jar - proxy-wasm-java-host diff --git a/proxy-wasm-jaxrs-quarkus-example/.gitignore b/proxy-wasm-jaxrs-quarkus-example/.gitignore new file mode 100644 index 0000000..91a800a --- /dev/null +++ b/proxy-wasm-jaxrs-quarkus-example/.gitignore @@ -0,0 +1,45 @@ +#Maven +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +release.properties +.flattened-pom.xml + +# Eclipse +.project +.classpath +.settings/ +bin/ + +# IntelliJ +.idea +*.ipr +*.iml +*.iws + +# NetBeans +nb-configuration.xml + +# Visual Studio Code +.vscode +.factorypath + +# OSX +.DS_Store + +# Vim +*.swp +*.swo + +# patch +*.orig +*.rej + +# Local environment +.env + +# Plugin directory +/.quarkus/cli/plugins/ +# TLS Certificates +.certs/ diff --git a/proxy-wasm-jaxrs-quarkus-example/pom.xml b/proxy-wasm-jaxrs-quarkus-example/pom.xml new file mode 100644 index 0000000..cd61f09 --- /dev/null +++ b/proxy-wasm-jaxrs-quarkus-example/pom.xml @@ -0,0 +1,122 @@ + + + 4.0.0 + + + io.roastedroot + proxy-wasm-java-host-parent + 1.0-SNAPSHOT + ../pom.xml + + + proxy-wasm-jaxrs-quarkus-example + jar + proxy-wasm-jaxrs-quarkus-example + + + + + ${quarkus.platform.group-id} + ${quarkus.platform.artifact-id} + ${quarkus.platform.version} + pom + import + + + + + + + io.quarkus + quarkus-arc + true + + + io.quarkus + quarkus-rest-jackson + + + io.roastedroot + proxy-wasm-jaxrs-quarkus + ${project.version} + + + + + io.quarkus + quarkus-junit5 + test + + + io.rest-assured + rest-assured + test + + + + + + + ${quarkus.platform.group-id} + quarkus-maven-plugin + ${quarkus.platform.version} + true + + + + build + generate-code + generate-code-tests + native-image-agent + + + + + + maven-failsafe-plugin + ${surefire-plugin.version} + + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + integration-test + verify + + + + + + maven-surefire-plugin + ${surefire-plugin.version} + + + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + + + + native + + + native + + + + false + true + + + + + diff --git a/proxy-wasm-jaxrs-quarkus-example/src/main/java/io/roastedroot/proxywasm/jaxrs/example/App.java b/proxy-wasm-jaxrs-quarkus-example/src/main/java/io/roastedroot/proxywasm/jaxrs/example/App.java new file mode 100644 index 0000000..4176ece --- /dev/null +++ b/proxy-wasm-jaxrs-quarkus-example/src/main/java/io/roastedroot/proxywasm/jaxrs/example/App.java @@ -0,0 +1,52 @@ +package io.roastedroot.proxywasm.jaxrs.example; + +import com.dylibso.chicory.wasm.Parser; +import com.dylibso.chicory.wasm.WasmModule; +import io.roastedroot.proxywasm.StartException; +import io.roastedroot.proxywasm.jaxrs.WasmPlugin; +import io.roastedroot.proxywasm.jaxrs.WasmPluginFactory; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Produces; +import java.nio.file.Path; +import java.util.Map; + +@ApplicationScoped +public class App { + + public static final String EXAMPLES_DIR = "../proxy-wasm-java-host/src/test"; + + public static WasmModule parseTestModule(String file) { + return Parser.parse(Path.of(EXAMPLES_DIR + file)); + } + + @Produces + public WasmPluginFactory foreignCallOnTickTest() throws StartException { + return () -> + WasmPlugin.builder() + .withName("foreignCallOnTickTest") + .withLogger(new MockLogger()) + .withMinTickPeriodMilliseconds( + 100) // plugin wants a tick every 1 ms, that's too often + .withForeignFunctions(Map.of("compress", data -> data)) + .build(parseTestModule("/go-examples/foreign_call_on_tick/main.wasm")); + } + + @Produces + public WasmPluginFactory notSharedHttpHeaders() throws StartException { + return () -> + WasmPlugin.builder() + .withName("notSharedHttpHeaders") + .withShared(false) + .withPluginConfig("{\"header\": \"x-wasm-header\", \"value\": \"foo\"}") + .build(parseTestModule("/go-examples/http_headers/main.wasm")); + } + + @Produces + public WasmPluginFactory httpHeaders() throws StartException { + return () -> + WasmPlugin.builder() + .withName("httpHeaders") + .withPluginConfig("{\"header\": \"x-wasm-header\", \"value\": \"foo\"}") + .build(parseTestModule("/go-examples/http_headers/main.wasm")); + } +} diff --git a/proxy-wasm-jaxrs-quarkus-example/src/main/java/io/roastedroot/proxywasm/jaxrs/example/MockLogger.java b/proxy-wasm-jaxrs-quarkus-example/src/main/java/io/roastedroot/proxywasm/jaxrs/example/MockLogger.java new file mode 100644 index 0000000..21f3b52 --- /dev/null +++ b/proxy-wasm-jaxrs-quarkus-example/src/main/java/io/roastedroot/proxywasm/jaxrs/example/MockLogger.java @@ -0,0 +1,29 @@ +package io.roastedroot.proxywasm.jaxrs.example; + +import io.roastedroot.proxywasm.LogLevel; +import io.roastedroot.proxywasm.jaxrs.Logger; +import java.util.ArrayList; + +public class MockLogger implements Logger { + + static final boolean DEBUG = "true".equals(System.getenv("DEBUG")); + + final ArrayList loggedMessages = new ArrayList<>(); + + @Override + public synchronized void log(LogLevel level, String message) { + if (DEBUG) { + System.out.println(level + ": " + message); + } + loggedMessages.add(message); + } + + @Override + public synchronized LogLevel getLogLevel() { + return LogLevel.TRACE; + } + + public synchronized ArrayList loggedMessages() { + return new ArrayList<>(loggedMessages); + } +} diff --git a/proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/Resources.java b/proxy-wasm-jaxrs-quarkus-example/src/main/java/io/roastedroot/proxywasm/jaxrs/example/Resources.java similarity index 79% rename from proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/Resources.java rename to proxy-wasm-jaxrs-quarkus-example/src/main/java/io/roastedroot/proxywasm/jaxrs/example/Resources.java index 017ddf0..dae22da 100644 --- a/proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/Resources.java +++ b/proxy-wasm-jaxrs-quarkus-example/src/main/java/io/roastedroot/proxywasm/jaxrs/example/Resources.java @@ -1,5 +1,6 @@ -package io.roastedroot.proxywasm.jaxrs; +package io.roastedroot.proxywasm.jaxrs.example; +import io.roastedroot.proxywasm.jaxrs.NamedWasmPlugin; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; diff --git a/proxy-wasm-jaxrs/src/test/resources/application.properties b/proxy-wasm-jaxrs-quarkus-example/src/main/resources/application.properties similarity index 100% rename from proxy-wasm-jaxrs/src/test/resources/application.properties rename to proxy-wasm-jaxrs-quarkus-example/src/main/resources/application.properties diff --git a/proxy-wasm-jaxrs-quarkus-example/src/test/java/io/roastedroot/proxywasm/jaxrs/example/ForeignCallOnTickTest.java b/proxy-wasm-jaxrs-quarkus-example/src/test/java/io/roastedroot/proxywasm/jaxrs/example/ForeignCallOnTickTest.java new file mode 100644 index 0000000..4d1ecda --- /dev/null +++ b/proxy-wasm-jaxrs-quarkus-example/src/test/java/io/roastedroot/proxywasm/jaxrs/example/ForeignCallOnTickTest.java @@ -0,0 +1,41 @@ +package io.roastedroot.proxywasm.jaxrs.example; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import io.quarkus.test.junit.QuarkusTest; +import io.roastedroot.proxywasm.StartException; +import io.roastedroot.proxywasm.jaxrs.WasmPlugin; +import io.roastedroot.proxywasm.jaxrs.WasmPluginFeature; +import jakarta.inject.Inject; +import java.util.ArrayList; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +@QuarkusTest +public class ForeignCallOnTickTest { + + @Inject WasmPluginFeature feature; + + @Test + public void testRequest() throws InterruptedException, StartException { + WasmPlugin plugin = feature.pool("foreignCallOnTickTest").borrow(); + assertNotNull(plugin); + + var logger = (MockLogger) plugin.logger(); + Thread.sleep(200); + assertLogsContain( + logger.loggedMessages(), + String.format( + "foreign function (compress) called: %d, result: %s", + 1, "68656c6c6f20776f726c6421")); + plugin.close(); // so that the ticks don't keep running in the background. + } + + public synchronized void assertLogsContain( + ArrayList loggedMessages, String... message) { + for (String m : message) { + Assertions.assertTrue( + loggedMessages.contains(m), "logged messages does not contain: " + m); + } + } +} diff --git a/proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/HttpHeadersNotSharedTest.java b/proxy-wasm-jaxrs-quarkus-example/src/test/java/io/roastedroot/proxywasm/jaxrs/example/HttpHeadersNotSharedTest.java similarity index 53% rename from proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/HttpHeadersNotSharedTest.java rename to proxy-wasm-jaxrs-quarkus-example/src/test/java/io/roastedroot/proxywasm/jaxrs/example/HttpHeadersNotSharedTest.java index c2425bb..15439bd 100644 --- a/proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/HttpHeadersNotSharedTest.java +++ b/proxy-wasm-jaxrs-quarkus-example/src/test/java/io/roastedroot/proxywasm/jaxrs/example/HttpHeadersNotSharedTest.java @@ -1,26 +1,14 @@ -package io.roastedroot.proxywasm.jaxrs; +package io.roastedroot.proxywasm.jaxrs.example; import static io.restassured.RestAssured.given; -import static io.roastedroot.proxywasm.jaxrs.TestHelpers.parseTestModule; +import static org.hamcrest.Matchers.equalTo; import io.quarkus.test.junit.QuarkusTest; -import io.roastedroot.proxywasm.StartException; -import jakarta.enterprise.inject.Produces; import org.junit.jupiter.api.Test; @QuarkusTest public class HttpHeadersNotSharedTest { - @Produces - public WasmPluginFactory create() throws StartException { - return () -> - WasmPlugin.builder() - .withName("notSharedHttpHeaders") - .withShared(false) - .withPluginConfig("{\"header\": \"x-wasm-header\", \"value\": \"foo\"}") - .build(parseTestModule("/go-examples/http_headers/main.wasm")); - } - @Test public void testRequest() { @@ -30,12 +18,14 @@ public void testRequest() { .get("/test/notSharedHttpHeaders") .then() .statusCode(200) + .body(equalTo("hello world")) .header("x-proxy-wasm-counter", "1"); given().when() .get("/test/notSharedHttpHeaders") .then() .statusCode(200) + .body(equalTo("hello world")) .header("x-proxy-wasm-counter", "1"); } } diff --git a/proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/HttpHeadersTest.java b/proxy-wasm-jaxrs-quarkus-example/src/test/java/io/roastedroot/proxywasm/jaxrs/example/HttpHeadersTest.java similarity index 60% rename from proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/HttpHeadersTest.java rename to proxy-wasm-jaxrs-quarkus-example/src/test/java/io/roastedroot/proxywasm/jaxrs/example/HttpHeadersTest.java index a5dd861..7d56a90 100644 --- a/proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/HttpHeadersTest.java +++ b/proxy-wasm-jaxrs-quarkus-example/src/test/java/io/roastedroot/proxywasm/jaxrs/example/HttpHeadersTest.java @@ -1,27 +1,14 @@ -package io.roastedroot.proxywasm.jaxrs; +package io.roastedroot.proxywasm.jaxrs.example; import static io.restassured.RestAssured.given; -import static io.roastedroot.proxywasm.jaxrs.TestHelpers.parseTestModule; import static org.hamcrest.Matchers.equalTo; import io.quarkus.test.junit.QuarkusTest; -import io.roastedroot.proxywasm.StartException; -import jakarta.enterprise.inject.Produces; import org.junit.jupiter.api.Test; @QuarkusTest public class HttpHeadersTest { - @Produces - public WasmPluginFactory create() throws StartException { - return () -> - WasmPlugin.builder() - .withName("httpHeaders") - .withShared(true) - .withPluginConfig("{\"header\": \"x-wasm-header\", \"value\": \"foo\"}") - .build(parseTestModule("/go-examples/http_headers/main.wasm")); - } - @Test public void testRequest() { given().when() diff --git a/proxy-wasm-jaxrs-quarkus/pom.xml b/proxy-wasm-jaxrs-quarkus/pom.xml new file mode 100644 index 0000000..7fa2311 --- /dev/null +++ b/proxy-wasm-jaxrs-quarkus/pom.xml @@ -0,0 +1,105 @@ + + + 4.0.0 + + + io.roastedroot + proxy-wasm-java-host-parent + 1.0-SNAPSHOT + ../pom.xml + + + proxy-wasm-jaxrs-quarkus + jar + proxy-wasm-jaxrs-quarkus + + + 17 + + + + + + io.quarkus + quarkus-bom + ${quarkus.version} + pom + import + + + + + + + io.quarkus + quarkus-arc-deployment + + + io.quarkus + quarkus-jaxrs-spi-deployment + + + + io.roastedroot + proxy-wasm-jaxrs + ${project.version} + + + io.quarkus + quarkus-junit5-internal + test + + + + + + + + + io.quarkus + quarkus-maven-plugin + ${quarkus.version} + + + maven-compiler-plugin + + + default-compile + + + + io.quarkus + quarkus-extension-processor + ${quarkus.version} + + + + + + + + maven-failsafe-plugin + ${failsafe-plugin.version} + + + org.jboss.logmanager.LogManager + ${maven.home} + ${settings.localRepository} + + + + + maven-surefire-plugin + ${surefire-plugin.version} + + + org.jboss.logmanager.LogManager + ${maven.home} + ${settings.localRepository} + + + + + + + diff --git a/proxy-wasm-jaxrs-quarkus/src/main/java/io/roastedroot/proxywasm/jaxrs/quarkus/deployment/ProxyWasmJaxrsQuarkusProcessor.java b/proxy-wasm-jaxrs-quarkus/src/main/java/io/roastedroot/proxywasm/jaxrs/quarkus/deployment/ProxyWasmJaxrsQuarkusProcessor.java new file mode 100644 index 0000000..8b9b31d --- /dev/null +++ b/proxy-wasm-jaxrs-quarkus/src/main/java/io/roastedroot/proxywasm/jaxrs/quarkus/deployment/ProxyWasmJaxrsQuarkusProcessor.java @@ -0,0 +1,29 @@ +package io.roastedroot.proxywasm.jaxrs.quarkus.deployment; + +import io.quarkus.arc.deployment.AdditionalBeanBuildItem; +import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.deployment.builditem.FeatureBuildItem; +import io.quarkus.jaxrs.spi.deployment.AdditionalJaxRsResourceMethodAnnotationsBuildItem; +import io.roastedroot.proxywasm.jaxrs.NamedWasmPlugin; +import io.roastedroot.proxywasm.jaxrs.WasmPluginFeature; +import java.util.List; +import org.jboss.jandex.DotName; + +class ProxyWasmJaxrsQuarkusProcessor { + + @BuildStep + FeatureBuildItem feature() { + return new FeatureBuildItem("proxy-wasm-jaxrs-quarkus"); + } + + @BuildStep + AdditionalBeanBuildItem resources() { + return new AdditionalBeanBuildItem(WasmPluginFeature.class); + } + + @BuildStep + public AdditionalJaxRsResourceMethodAnnotationsBuildItem annotations() { + return new AdditionalJaxRsResourceMethodAnnotationsBuildItem( + List.of(DotName.createSimple(NamedWasmPlugin.class.getName()))); + } +} diff --git a/proxy-wasm-jaxrs/pom.xml b/proxy-wasm-jaxrs/pom.xml index 0c8a4c0..4bd3778 100644 --- a/proxy-wasm-jaxrs/pom.xml +++ b/proxy-wasm-jaxrs/pom.xml @@ -26,16 +26,36 @@ + + com.dylibso.chicory + aot-experimental + ${chicory.version} + + + com.dylibso.chicory + host-module-annotations-experimental + ${chicory.version} + + + com.dylibso.chicory + runtime + ${chicory.version} + + + com.dylibso.chicory + wasi + ${chicory.version} + + io.quarkus quarkus-arc true - io.roastedroot proxy-wasm-java-host - 1.0-SNAPSHOT + ${project.version} @@ -84,87 +104,22 @@ - - - - - jdk-lower-than-17 - - (,17] - - - true - true - - - - - - jdk-17-and-newer - - [17,) - - - - - ${quarkus.platform.group-id} - quarkus-maven-plugin - ${quarkus.platform.version} - true - - - - generate-code - generate-code-tests - - - - - - maven-failsafe-plugin - ${surefire-plugin.version} - - - ${project.build.directory}/${project.build.finalName}-runner - org.jboss.logmanager.LogManager - ${maven.home} - - - - - - integration-test - verify - - - - - - maven-surefire-plugin - ${surefire-plugin.version} - - - org.jboss.logmanager.LogManager - ${maven.home} - - - - - - - - - native - - - native - - - - false - true - - - + + + + io.smallrye + jandex-maven-plugin + 3.2.7 + + + make-index + + jandex + + + + + + diff --git a/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/WasmPlugin.java b/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/WasmPlugin.java index 11fe92c..6a16ca1 100644 --- a/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/WasmPlugin.java +++ b/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/WasmPlugin.java @@ -21,6 +21,10 @@ public class WasmPlugin { final ProxyWasm wasm; HttpServer httpServer; + public Logger logger() { + return handler.logger; + } + private WasmPlugin(ProxyWasm proxyWasm, PluginHandler handler, boolean shared) { Objects.requireNonNull(proxyWasm); Objects.requireNonNull(handler); diff --git a/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/WasmPluginFeature.java b/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/WasmPluginFeature.java index 579cb54..ac120bf 100644 --- a/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/WasmPluginFeature.java +++ b/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/WasmPluginFeature.java @@ -45,7 +45,7 @@ public Collection getPluginPools() { return pluginPools.values(); } - WasmPluginPool pool(String name) { + public WasmPluginPool pool(String name) { return pluginPools.get(name); } diff --git a/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/WasmPluginPool.java b/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/WasmPluginPool.java index 7f60bd1..4f4003e 100644 --- a/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/WasmPluginPool.java +++ b/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/WasmPluginPool.java @@ -5,7 +5,7 @@ import java.util.Collection; import java.util.List; -interface WasmPluginPool { +public interface WasmPluginPool { WasmPlugin borrow() throws StartException; diff --git a/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/servlet/ServletHttpServerRequest.java b/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/servlet/ServletHttpServerRequest.java index 6d56106..4ca8495 100644 --- a/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/servlet/ServletHttpServerRequest.java +++ b/proxy-wasm-jaxrs/src/main/java/io/roastedroot/proxywasm/jaxrs/servlet/ServletHttpServerRequest.java @@ -6,15 +6,12 @@ import jakarta.enterprise.inject.Instance; import jakarta.servlet.http.HttpServletRequest; import jakarta.ws.rs.core.Context; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; @Alternative @Priority(100) public class ServletHttpServerRequest implements HttpServerRequest { private final HttpServletRequest request; - ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); public ServletHttpServerRequest(@Context Instance request) { this.request = request.get(); diff --git a/proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/ForeignCallOnTickTest.java b/proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/ForeignCallOnTickTest.java deleted file mode 100644 index 3962461..0000000 --- a/proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/ForeignCallOnTickTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package io.roastedroot.proxywasm.jaxrs; - -import static io.roastedroot.proxywasm.jaxrs.TestHelpers.parseTestModule; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -import io.quarkus.test.junit.QuarkusTest; -import io.roastedroot.proxywasm.StartException; -import jakarta.enterprise.inject.Produces; -import jakarta.inject.Inject; -import java.util.Map; -import org.junit.jupiter.api.Test; - -@QuarkusTest -public class ForeignCallOnTickTest { - - @Produces - public WasmPluginFactory create() throws StartException { - return () -> - WasmPlugin.builder() - .withName("foreignCallOnTickTest") - .withLogger(new MockLogger()) - .withMinTickPeriodMilliseconds( - 100) // plugin wants a tick every 1 ms, that's too often - .withForeignFunctions(Map.of("compress", data -> data)) - .build(parseTestModule("/go-examples/foreign_call_on_tick/main.wasm")); - } - - @Inject WasmPluginFeature feature; - - @Test - public void testRequest() throws InterruptedException, StartException { - WasmPlugin plugin = feature.pool("foreignCallOnTickTest").borrow(); - assertNotNull(plugin); - assertEquals(1, plugin.handler.getTickPeriodMilliseconds()); - - var logger = (MockLogger) plugin.handler.logger; - Thread.sleep(200); - logger.assertLogsContain( - String.format( - "foreign function (compress) called: %d, result: %s", - 1, "68656c6c6f20776f726c6421")); - plugin.handler.logger = null; - plugin.close(); // so that the ticks don't keep running in the background. - } -} diff --git a/proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/MockLogger.java b/proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/MockLogger.java deleted file mode 100644 index d65d8de..0000000 --- a/proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/MockLogger.java +++ /dev/null @@ -1,59 +0,0 @@ -package io.roastedroot.proxywasm.jaxrs; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import io.roastedroot.proxywasm.LogLevel; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class MockLogger implements Logger { - - static final boolean DEBUG = "true".equals(System.getenv("DEBUG")); - - final ArrayList loggedMessages = new ArrayList<>(); - - @Override - public synchronized void log(LogLevel level, String message) { - if (DEBUG) { - System.out.println(level + ": " + message); - } - loggedMessages.add(message); - } - - @Override - public synchronized LogLevel getLogLevel() { - return LogLevel.TRACE; - } - - public synchronized ArrayList loggedMessages() { - return new ArrayList<>(loggedMessages); - } - - public synchronized void assertLogsEqual(String... messages) { - assertEquals(List.of(messages), loggedMessages()); - } - - public synchronized void assertSortedLogsEqual(String... messages) { - assertEquals( - Stream.of(messages).sorted().collect(Collectors.toList()), - loggedMessages().stream().sorted().collect(Collectors.toList())); - } - - public synchronized void assertLogsContain(String... message) { - for (String m : message) { - assertTrue(loggedMessages().contains(m), "logged messages does not contain: " + m); - } - } - - public synchronized void assertLogsDoNotContain(String... message) { - for (String log : loggedMessages()) { - for (String m : message) { - assertFalse(log.contains(m), "logged messages contains: " + m); - } - } - } -} diff --git a/proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/TestHelpers.java b/proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/TestHelpers.java deleted file mode 100644 index 0661609..0000000 --- a/proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/TestHelpers.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.roastedroot.proxywasm.jaxrs; - -import com.dylibso.chicory.wasm.Parser; -import com.dylibso.chicory.wasm.WasmModule; -import java.nio.file.Path; - -public final class TestHelpers { - private TestHelpers() {} - - public static final String EXAMPLES_DIR = "../proxy-wasm-java-host/src/test"; - - public static WasmModule parseTestModule(String file) { - return Parser.parse(Path.of(EXAMPLES_DIR + file)); - } -}