Skip to content

Commit 17c7894

Browse files
committed
Create a quarkus module, and move the test to it’s own example project.
Signed-off-by: Hiram Chirino <hiram@hiramchirino.com>
1 parent 28d263e commit 17c7894

File tree

21 files changed

+495
-239
lines changed

21 files changed

+495
-239
lines changed

pom.xml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@
4040
<maven-checkstyle-plugin.version>3.6.0</maven-checkstyle-plugin.version>
4141
<spotless-maven-plugin.version>2.44.3</spotless-maven-plugin.version>
4242
<maven.compiler.version>3.14.0</maven.compiler.version>
43+
<compiler-plugin.version>${maven.compiler.version}</compiler-plugin.version>
4344
<surefire-plugin.version>3.5.2</surefire-plugin.version>
45+
<failsafe-plugin.version>${surefire-plugin.version}</failsafe-plugin.version>
4446

4547
<!-- test time versions -->
4648
<junit.version>5.12.0</junit.version>
@@ -50,6 +52,7 @@
5052
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
5153
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
5254
<quarkus.platform.version>3.19.3</quarkus.platform.version>
55+
<quarkus.version>3.21.0</quarkus.version>
5356

5457
</properties>
5558

@@ -204,4 +207,20 @@
204207
</plugins>
205208
</pluginManagement>
206209
</build>
210+
211+
<profiles>
212+
213+
<!-- Quarkus is only supported on JDK 17 and newer-->
214+
<profile>
215+
<id>jdk-17-and-newer</id>
216+
<activation>
217+
<jdk>[17,)</jdk>
218+
</activation>
219+
<modules>
220+
<module>proxy-wasm-jaxrs-quarkus</module>
221+
<module>proxy-wasm-jaxrs-quarkus-example</module>
222+
</modules>
223+
</profile>
224+
</profiles>
225+
207226
</project>

proxy-wasm-java-host/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
<version>1.0-SNAPSHOT</version>
99
<relativePath>../pom.xml</relativePath>
1010
</parent>
11+
1112
<artifactId>proxy-wasm-java-host</artifactId>
1213
<packaging>jar</packaging>
13-
1414
<name>proxy-wasm-java-host</name>
1515

1616
<dependencies>
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#Maven
2+
target/
3+
pom.xml.tag
4+
pom.xml.releaseBackup
5+
pom.xml.versionsBackup
6+
release.properties
7+
.flattened-pom.xml
8+
9+
# Eclipse
10+
.project
11+
.classpath
12+
.settings/
13+
bin/
14+
15+
# IntelliJ
16+
.idea
17+
*.ipr
18+
*.iml
19+
*.iws
20+
21+
# NetBeans
22+
nb-configuration.xml
23+
24+
# Visual Studio Code
25+
.vscode
26+
.factorypath
27+
28+
# OSX
29+
.DS_Store
30+
31+
# Vim
32+
*.swp
33+
*.swo
34+
35+
# patch
36+
*.orig
37+
*.rej
38+
39+
# Local environment
40+
.env
41+
42+
# Plugin directory
43+
/.quarkus/cli/plugins/
44+
# TLS Certificates
45+
.certs/
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<parent>
6+
<groupId>io.roastedroot</groupId>
7+
<artifactId>proxy-wasm-java-host-parent</artifactId>
8+
<version>1.0-SNAPSHOT</version>
9+
<relativePath>../pom.xml</relativePath>
10+
</parent>
11+
12+
<artifactId>proxy-wasm-jaxrs-quarkus-example</artifactId>
13+
<packaging>jar</packaging>
14+
<name>proxy-wasm-jaxrs-quarkus-example</name>
15+
16+
<dependencyManagement>
17+
<dependencies>
18+
<dependency>
19+
<groupId>${quarkus.platform.group-id}</groupId>
20+
<artifactId>${quarkus.platform.artifact-id}</artifactId>
21+
<version>${quarkus.platform.version}</version>
22+
<type>pom</type>
23+
<scope>import</scope>
24+
</dependency>
25+
</dependencies>
26+
</dependencyManagement>
27+
28+
<dependencies>
29+
<dependency>
30+
<groupId>io.quarkus</groupId>
31+
<artifactId>quarkus-arc</artifactId>
32+
<optional>true</optional>
33+
</dependency>
34+
<dependency>
35+
<groupId>io.quarkus</groupId>
36+
<artifactId>quarkus-rest-jackson</artifactId>
37+
</dependency>
38+
<dependency>
39+
<groupId>io.roastedroot</groupId>
40+
<artifactId>proxy-wasm-jaxrs-quarkus</artifactId>
41+
<version>${project.version}</version>
42+
</dependency>
43+
44+
<!-- Let's test with Quarkus -->
45+
<dependency>
46+
<groupId>io.quarkus</groupId>
47+
<artifactId>quarkus-junit5</artifactId>
48+
<scope>test</scope>
49+
</dependency>
50+
<dependency>
51+
<groupId>io.rest-assured</groupId>
52+
<artifactId>rest-assured</artifactId>
53+
<scope>test</scope>
54+
</dependency>
55+
</dependencies>
56+
57+
<build>
58+
<plugins>
59+
<plugin>
60+
<groupId>${quarkus.platform.group-id}</groupId>
61+
<artifactId>quarkus-maven-plugin</artifactId>
62+
<version>${quarkus.platform.version}</version>
63+
<extensions>true</extensions>
64+
<executions>
65+
<execution>
66+
<goals>
67+
<goal>build</goal>
68+
<goal>generate-code</goal>
69+
<goal>generate-code-tests</goal>
70+
<goal>native-image-agent</goal>
71+
</goals>
72+
</execution>
73+
</executions>
74+
</plugin>
75+
<plugin>
76+
<artifactId>maven-failsafe-plugin</artifactId>
77+
<version>${surefire-plugin.version}</version>
78+
<configuration>
79+
<systemPropertyVariables>
80+
<native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
81+
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
82+
<maven.home>${maven.home}</maven.home>
83+
</systemPropertyVariables>
84+
</configuration>
85+
<executions>
86+
<execution>
87+
<goals>
88+
<goal>integration-test</goal>
89+
<goal>verify</goal>
90+
</goals>
91+
</execution>
92+
</executions>
93+
</plugin>
94+
<plugin>
95+
<artifactId>maven-surefire-plugin</artifactId>
96+
<version>${surefire-plugin.version}</version>
97+
<configuration>
98+
<systemPropertyVariables>
99+
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
100+
<maven.home>${maven.home}</maven.home>
101+
</systemPropertyVariables>
102+
</configuration>
103+
</plugin>
104+
</plugins>
105+
</build>
106+
107+
<profiles>
108+
<profile>
109+
<id>native</id>
110+
<activation>
111+
<property>
112+
<name>native</name>
113+
</property>
114+
</activation>
115+
<properties>
116+
<skipITs>false</skipITs>
117+
<quarkus.native.enabled>true</quarkus.native.enabled>
118+
</properties>
119+
</profile>
120+
</profiles>
121+
122+
</project>
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package io.roastedroot.proxywasm.jaxrs.example;
2+
3+
import com.dylibso.chicory.wasm.Parser;
4+
import com.dylibso.chicory.wasm.WasmModule;
5+
import io.roastedroot.proxywasm.StartException;
6+
import io.roastedroot.proxywasm.jaxrs.WasmPlugin;
7+
import io.roastedroot.proxywasm.jaxrs.WasmPluginFactory;
8+
import jakarta.enterprise.context.ApplicationScoped;
9+
import jakarta.enterprise.inject.Produces;
10+
import java.nio.file.Path;
11+
import java.util.Map;
12+
13+
@ApplicationScoped
14+
public class App {
15+
16+
public static final String EXAMPLES_DIR = "../proxy-wasm-java-host/src/test";
17+
18+
public static WasmModule parseTestModule(String file) {
19+
return Parser.parse(Path.of(EXAMPLES_DIR + file));
20+
}
21+
22+
@Produces
23+
public WasmPluginFactory foreignCallOnTickTest() throws StartException {
24+
return () ->
25+
WasmPlugin.builder()
26+
.withName("foreignCallOnTickTest")
27+
.withLogger(new MockLogger())
28+
.withMinTickPeriodMilliseconds(
29+
100) // plugin wants a tick every 1 ms, that's too often
30+
.withForeignFunctions(Map.of("compress", data -> data))
31+
.build(parseTestModule("/go-examples/foreign_call_on_tick/main.wasm"));
32+
}
33+
34+
@Produces
35+
public WasmPluginFactory notSharedHttpHeaders() throws StartException {
36+
return () ->
37+
WasmPlugin.builder()
38+
.withName("notSharedHttpHeaders")
39+
.withShared(false)
40+
.withPluginConfig("{\"header\": \"x-wasm-header\", \"value\": \"foo\"}")
41+
.build(parseTestModule("/go-examples/http_headers/main.wasm"));
42+
}
43+
44+
@Produces
45+
public WasmPluginFactory httpHeaders() throws StartException {
46+
return () ->
47+
WasmPlugin.builder()
48+
.withName("httpHeaders")
49+
.withPluginConfig("{\"header\": \"x-wasm-header\", \"value\": \"foo\"}")
50+
.build(parseTestModule("/go-examples/http_headers/main.wasm"));
51+
}
52+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package io.roastedroot.proxywasm.jaxrs.example;
2+
3+
import io.roastedroot.proxywasm.LogLevel;
4+
import io.roastedroot.proxywasm.jaxrs.Logger;
5+
import java.util.ArrayList;
6+
7+
public class MockLogger implements Logger {
8+
9+
static final boolean DEBUG = "true".equals(System.getenv("DEBUG"));
10+
11+
final ArrayList<String> loggedMessages = new ArrayList<>();
12+
13+
@Override
14+
public synchronized void log(LogLevel level, String message) {
15+
if (DEBUG) {
16+
System.out.println(level + ": " + message);
17+
}
18+
loggedMessages.add(message);
19+
}
20+
21+
@Override
22+
public synchronized LogLevel getLogLevel() {
23+
return LogLevel.TRACE;
24+
}
25+
26+
public synchronized ArrayList<String> loggedMessages() {
27+
return new ArrayList<>(loggedMessages);
28+
}
29+
}

proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/Resources.java renamed to proxy-wasm-jaxrs-quarkus-example/src/main/java/io/roastedroot/proxywasm/jaxrs/example/Resources.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
package io.roastedroot.proxywasm.jaxrs;
1+
package io.roastedroot.proxywasm.jaxrs.example;
22

3+
import io.roastedroot.proxywasm.jaxrs.NamedWasmPlugin;
34
import jakarta.ws.rs.GET;
45
import jakarta.ws.rs.Path;
56

proxy-wasm-jaxrs/src/test/resources/application.properties renamed to proxy-wasm-jaxrs-quarkus-example/src/main/resources/application.properties

File renamed without changes.
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.roastedroot.proxywasm.jaxrs.example;
2+
3+
import static org.junit.jupiter.api.Assertions.assertNotNull;
4+
5+
import io.quarkus.test.junit.QuarkusTest;
6+
import io.roastedroot.proxywasm.StartException;
7+
import io.roastedroot.proxywasm.jaxrs.WasmPlugin;
8+
import io.roastedroot.proxywasm.jaxrs.WasmPluginFeature;
9+
import jakarta.inject.Inject;
10+
import java.util.ArrayList;
11+
import org.junit.jupiter.api.Assertions;
12+
import org.junit.jupiter.api.Test;
13+
14+
@QuarkusTest
15+
public class ForeignCallOnTickTest {
16+
17+
@Inject WasmPluginFeature feature;
18+
19+
@Test
20+
public void testRequest() throws InterruptedException, StartException {
21+
WasmPlugin plugin = feature.pool("foreignCallOnTickTest").borrow();
22+
assertNotNull(plugin);
23+
24+
var logger = (MockLogger) plugin.logger();
25+
Thread.sleep(200);
26+
assertLogsContain(
27+
logger.loggedMessages(),
28+
String.format(
29+
"foreign function (compress) called: %d, result: %s",
30+
1, "68656c6c6f20776f726c6421"));
31+
plugin.close(); // so that the ticks don't keep running in the background.
32+
}
33+
34+
public synchronized void assertLogsContain(
35+
ArrayList<String> loggedMessages, String... message) {
36+
for (String m : message) {
37+
Assertions.assertTrue(
38+
loggedMessages.contains(m), "logged messages does not contain: " + m);
39+
}
40+
}
41+
}

proxy-wasm-jaxrs/src/test/java/io/roastedroot/proxywasm/jaxrs/HttpHeadersNotSharedTest.java renamed to proxy-wasm-jaxrs-quarkus-example/src/test/java/io/roastedroot/proxywasm/jaxrs/example/HttpHeadersNotSharedTest.java

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,14 @@
1-
package io.roastedroot.proxywasm.jaxrs;
1+
package io.roastedroot.proxywasm.jaxrs.example;
22

33
import static io.restassured.RestAssured.given;
4-
import static io.roastedroot.proxywasm.jaxrs.TestHelpers.parseTestModule;
4+
import static org.hamcrest.Matchers.equalTo;
55

66
import io.quarkus.test.junit.QuarkusTest;
7-
import io.roastedroot.proxywasm.StartException;
8-
import jakarta.enterprise.inject.Produces;
97
import org.junit.jupiter.api.Test;
108

119
@QuarkusTest
1210
public class HttpHeadersNotSharedTest {
1311

14-
@Produces
15-
public WasmPluginFactory create() throws StartException {
16-
return () ->
17-
WasmPlugin.builder()
18-
.withName("notSharedHttpHeaders")
19-
.withShared(false)
20-
.withPluginConfig("{\"header\": \"x-wasm-header\", \"value\": \"foo\"}")
21-
.build(parseTestModule("/go-examples/http_headers/main.wasm"));
22-
}
23-
2412
@Test
2513
public void testRequest() {
2614

@@ -30,12 +18,14 @@ public void testRequest() {
3018
.get("/test/notSharedHttpHeaders")
3119
.then()
3220
.statusCode(200)
21+
.body(equalTo("hello world"))
3322
.header("x-proxy-wasm-counter", "1");
3423

3524
given().when()
3625
.get("/test/notSharedHttpHeaders")
3726
.then()
3827
.statusCode(200)
28+
.body(equalTo("hello world"))
3929
.header("x-proxy-wasm-counter", "1");
4030
}
4131
}

0 commit comments

Comments
 (0)