Skip to content

Commit 847f44c

Browse files
committed
Allow configuring a machine factory on plugins.
Signed-off-by: Hiram Chirino <hiram@hiramchirino.com>
1 parent 2caae2c commit 847f44c

File tree

5 files changed

+41
-7
lines changed
  • proxy-wasm-java-host/src/main/java/io/roastedroot/proxywasm
  • proxy-wasm-jaxrs-jersey/src/test/java/io/roastedroot/proxywasm/jaxrs/example
  • quarkus-x-corazawaf-example/src
    • main/java/io/roastedroot/proxywasm/corazawaf/example
    • test/java/io/roastedroot/proxywasm/corazawaf/example

5 files changed

+41
-7
lines changed

proxy-wasm-java-host/src/main/java/io/roastedroot/proxywasm/ProxyWasm.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
import static io.roastedroot.proxywasm.Helpers.len;
44

5+
import com.dylibso.chicory.experimental.aot.AotMachine;
56
import com.dylibso.chicory.runtime.ByteArrayMemory;
67
import com.dylibso.chicory.runtime.HostFunction;
78
import com.dylibso.chicory.runtime.ImportMemory;
89
import com.dylibso.chicory.runtime.ImportValues;
910
import com.dylibso.chicory.runtime.Instance;
11+
import com.dylibso.chicory.runtime.Machine;
1012
import com.dylibso.chicory.wasi.WasiOptions;
1113
import com.dylibso.chicory.wasi.WasiPreview1;
1214
import com.dylibso.chicory.wasm.WasmModule;
@@ -18,6 +20,7 @@
1820
import java.util.Map;
1921
import java.util.Objects;
2022
import java.util.concurrent.atomic.AtomicInteger;
23+
import java.util.function.Function;
2124

2225
public final class ProxyWasm implements Closeable {
2326

@@ -226,6 +229,7 @@ public static class Builder implements Cloneable {
226229
private ImportMemory memory;
227230
private WasiOptions wasiOptions;
228231
private boolean start = true;
232+
private Function<Instance, Machine> machineFactory;
229233

230234
@Override
231235
@SuppressWarnings("NoClone")
@@ -261,6 +265,11 @@ public ProxyWasm.Builder withWasiOptions(WasiOptions options) {
261265
return this;
262266
}
263267

268+
public ProxyWasm.Builder withMachineFactory(Function<Instance, Machine> machineFactory) {
269+
this.machineFactory = machineFactory;
270+
return this;
271+
}
272+
264273
Builder() {}
265274

266275
public ProxyWasm build(Instance instance) throws StartException {
@@ -275,6 +284,10 @@ public ProxyWasm build(WasmModule module) throws StartException {
275284
public ProxyWasm build(Instance.Builder instanceBuilder) throws StartException {
276285
var imports = ImportValues.builder();
277286

287+
if (this.machineFactory != null) {
288+
instanceBuilder.withMachineFactory(AotMachine::new);
289+
}
290+
278291
imports.addMemory(Objects.requireNonNullElseGet(memory, this::defaultImportMemory));
279292
imports.addFunction(toHostFunctions());
280293
imports.addFunction(

proxy-wasm-java-host/src/main/java/io/roastedroot/proxywasm/plugin/Plugin.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
import com.dylibso.chicory.runtime.ImportMemory;
1212
import com.dylibso.chicory.runtime.Instance;
13+
import com.dylibso.chicory.runtime.Machine;
14+
import com.dylibso.chicory.wasi.WasiOptions;
1315
import com.dylibso.chicory.wasm.WasmModule;
1416
import io.roastedroot.proxywasm.ArrayProxyMap;
1517
import io.roastedroot.proxywasm.ChainedHandler;
@@ -35,6 +37,7 @@
3537
import java.util.Objects;
3638
import java.util.concurrent.atomic.AtomicInteger;
3739
import java.util.concurrent.locks.ReentrantLock;
40+
import java.util.function.Function;
3841

3942
public final class Plugin {
4043

@@ -187,36 +190,46 @@ public Builder withSharedDataHandler(SharedDataHandler sharedDataHandler) {
187190
return this;
188191
}
189192

190-
public Plugin.Builder withShared(boolean shared) {
193+
public Builder withShared(boolean shared) {
191194
this.shared = shared;
192195
return this;
193196
}
194197

195-
public Plugin.Builder withVmConfig(byte[] vmConfig) {
198+
public Builder withVmConfig(byte[] vmConfig) {
196199
this.vmConfig = vmConfig;
197200
return this;
198201
}
199202

200-
public Plugin.Builder withVmConfig(String vmConfig) {
203+
public Builder withVmConfig(String vmConfig) {
201204
this.vmConfig = bytes(vmConfig);
202205
return this;
203206
}
204207

205-
public Plugin.Builder withPluginConfig(byte[] pluginConfig) {
208+
public Builder withPluginConfig(byte[] pluginConfig) {
206209
this.pluginConfig = pluginConfig;
207210
return this;
208211
}
209212

210-
public Plugin.Builder withPluginConfig(String pluginConfig) {
213+
public Builder withPluginConfig(String pluginConfig) {
211214
this.pluginConfig = bytes(pluginConfig);
212215
return this;
213216
}
214217

215-
public Plugin.Builder withImportMemory(ImportMemory memory) {
218+
public Builder withImportMemory(ImportMemory memory) {
216219
proxyWasmBuilder = proxyWasmBuilder.withImportMemory(memory);
217220
return this;
218221
}
219222

223+
public Builder withMachineFactory(Function<Instance, Machine> machineFactory) {
224+
proxyWasmBuilder.withMachineFactory(machineFactory);
225+
return this;
226+
}
227+
228+
public Builder withWasiOptions(WasiOptions options) {
229+
proxyWasmBuilder.withWasiOptions(options);
230+
return this;
231+
}
232+
220233
public Plugin build(WasmModule module) throws StartException {
221234
return build(proxyWasmBuilder.build(module));
222235
}

proxy-wasm-jaxrs-jersey/src/test/java/io/roastedroot/proxywasm/jaxrs/example/App.java

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

3+
import com.dylibso.chicory.experimental.aot.AotMachine;
34
import com.dylibso.chicory.wasm.Parser;
45
import com.dylibso.chicory.wasm.WasmModule;
56
import com.google.gson.Gson;
@@ -24,6 +25,7 @@ public static PluginFactory headerTests() throws StartException {
2425
.withName("headerTests")
2526
.withLogger(new MockLogger("headerTests"))
2627
.withPluginConfig(gson.toJson(Map.of("type", "headerTests")))
28+
.withMachineFactory(AotMachine::new)
2729
.build(parseTestModule("/go-examples/unit_tester/main.wasm"));
2830
}
2931

@@ -34,6 +36,7 @@ public static PluginFactory headerTestsNotShared() throws StartException {
3436
.withShared(false)
3537
.withLogger(new MockLogger("headerTestsNotShared"))
3638
.withPluginConfig(gson.toJson(Map.of("type", "headerTests")))
39+
.withMachineFactory(AotMachine::new)
3740
.build(parseTestModule("/go-examples/unit_tester/main.wasm"));
3841
}
3942

@@ -43,6 +46,7 @@ public static PluginFactory tickTests() throws StartException {
4346
.withName("tickTests")
4447
.withLogger(new MockLogger("tickTests"))
4548
.withPluginConfig(gson.toJson(Map.of("type", "tickTests")))
49+
.withMachineFactory(AotMachine::new)
4650
.build(parseTestModule("/go-examples/unit_tester/main.wasm"));
4751
}
4852

@@ -53,6 +57,7 @@ public static PluginFactory ffiTests() throws StartException {
5357
.withLogger(new MockLogger("ffiTests"))
5458
.withPluginConfig(gson.toJson(Map.of("type", "ffiTests")))
5559
.withForeignFunctions(Map.of("reverse", App::reverse))
60+
.withMachineFactory(AotMachine::new)
5661
.build(parseTestModule("/go-examples/unit_tester/main.wasm"));
5762
}
5863

@@ -76,6 +81,7 @@ public static PluginFactory httpCallTests() throws StartException {
7681
"upstream", "web_service",
7782
"path", "/ok")))
7883
.withUpstreams(Map.of("web_service", "localhost:8081"))
84+
.withMachineFactory(AotMachine::new)
7985
.build(parseTestModule("/go-examples/unit_tester/main.wasm"));
8086
}
8187
}

quarkus-x-corazawaf-example/src/main/java/io/roastedroot/proxywasm/corazawaf/example/App.java

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

3+
import com.dylibso.chicory.experimental.aot.AotMachine;
34
import com.dylibso.chicory.wasm.Parser;
45
import com.dylibso.chicory.wasm.WasmModule;
56
import io.roastedroot.proxywasm.LogHandler;
@@ -40,6 +41,7 @@ public PluginFactory waf() throws StartException {
4041
.withLogger(DEBUG ? LogHandler.SYSTEM : null)
4142
.withPluginConfig(CONFIG)
4243
.withMetricsHandler(new SimpleMetricsHandler())
44+
.withMachineFactory(AotMachine::new)
4345
.build(module);
4446
}
4547
}

quarkus-x-corazawaf-example/src/test/java/io/roastedroot/proxywasm/corazawaf/example/ResourcesTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class ResourcesTest {
1414
// # True positive requests:
1515

1616
@Test
17-
public void testPhase1() throws InterruptedException {
17+
public void wtestPhase1() throws InterruptedException {
1818

1919
// # Custom rule phase 1
2020
// curl -I 'http://localhost:8080/admin'

0 commit comments

Comments
 (0)