Skip to content

Commit d8a37ae

Browse files
authored
Merge pull request #60 from andreaTP/bump-chicory-1.2.0
Bump Chicory to 1.2.0
2 parents 956e754 + 6aa0508 commit d8a37ae

File tree

4 files changed

+69
-63
lines changed

4 files changed

+69
-63
lines changed

core/src/main/java/com/styra/opa/wasm/OpaPolicy.java

+22-23
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.styra.opa.wasm;
22

3-
import com.dylibso.chicory.runtime.ByteBufferMemory;
3+
import com.dylibso.chicory.runtime.ByteArrayMemory;
44
import com.dylibso.chicory.runtime.Memory;
55
import com.dylibso.chicory.wasm.types.MemoryLimits;
66
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -35,19 +35,19 @@ public class OpaPolicy {
3535
private OpaPolicy(OpaWasm wasm) {
3636
this.wasm = wasm;
3737

38-
if (!(wasm.opaWasmAbiVersion().getValue() == 1L
39-
&& wasm.opaWasmAbiMinorVersion().getValue() == 3L)) {
38+
if (!(wasm.exports().opaWasmAbiVersion().getValue() == 1L
39+
&& wasm.exports().opaWasmAbiMinorVersion().getValue() == 3L)) {
4040
throw new IllegalArgumentException(
4141
"Invalid version, supported 1.3, detected "
42-
+ wasm.opaWasmAbiVersion()
42+
+ wasm.exports().opaWasmAbiVersion()
4343
+ "."
44-
+ wasm.opaWasmAbiMinorVersion());
44+
+ wasm.exports().opaWasmAbiMinorVersion());
4545
}
4646

47-
this.baseHeapPtr = wasm.opaHeapPtrGet();
47+
this.baseHeapPtr = wasm.exports().opaHeapPtrGet();
4848
this.dataHeapPtr = this.baseHeapPtr;
4949
this.dataAddr = -1;
50-
wasm.opaHeapPtrSet(this.dataHeapPtr);
50+
wasm.exports().opaHeapPtrSet(this.dataHeapPtr);
5151
}
5252

5353
public OpaPolicy entrypoint(int entrypoint) {
@@ -61,26 +61,26 @@ public OpaPolicy entrypoint(String entrypoint) {
6161
}
6262

6363
private int loadJson(String data) {
64-
var dataStrAddr = wasm.opaMalloc(data.length());
64+
var dataStrAddr = wasm.exports().opaMalloc(data.length());
6565
wasm.memory().writeCString(dataStrAddr, data);
66-
var dstAddr = wasm.opaJsonParse(dataStrAddr, data.length());
67-
wasm.opaFree(dataStrAddr);
66+
var dstAddr = wasm.exports().opaJsonParse(dataStrAddr, data.length());
67+
wasm.exports().opaFree(dataStrAddr);
6868
return dstAddr;
6969
}
7070

7171
private String dumpJson(int addr) {
72-
int resultStrAddr = wasm.opaJsonDump(addr);
72+
int resultStrAddr = wasm.exports().opaJsonDump(addr);
7373
var result = wasm.memory().readCString(resultStrAddr);
74-
wasm.opaFree(resultStrAddr);
74+
wasm.exports().opaFree(resultStrAddr);
7575
return result;
7676
}
7777

7878
// data MUST be a serializable object or ArrayBuffer, which assumed to be a well-formed
7979
// stringified JSON
8080
public OpaPolicy data(String data) {
81-
wasm.opaHeapPtrSet(this.baseHeapPtr);
81+
wasm.exports().opaHeapPtrSet(this.baseHeapPtr);
8282
this.dataAddr = loadJson(data);
83-
this.dataHeapPtr = wasm.opaHeapPtrGet();
83+
this.dataHeapPtr = wasm.exports().opaHeapPtrGet();
8484
return this;
8585
}
8686

@@ -110,7 +110,7 @@ public OpaPolicy input(String input) {
110110

111111
public Map<String, Integer> entrypoints() {
112112
try {
113-
var json = dumpJson(wasm.entrypoints());
113+
var json = dumpJson(wasm.exports().entrypoints());
114114
var entrypoints =
115115
wasm.jsonMapper()
116116
.readValue(json, new TypeReference<HashMap<String, Integer>>() {});
@@ -130,24 +130,24 @@ public int findEntrypoint(String name) {
130130
}
131131

132132
public String evaluate() {
133-
var ctxAddr = wasm.opaEvalCtxNew();
133+
var ctxAddr = wasm.exports().opaEvalCtxNew();
134134
if (this.dataAddr == -1) {
135135
data("");
136136
}
137-
wasm.opaEvalCtxSetData(ctxAddr, this.dataAddr);
137+
wasm.exports().opaEvalCtxSetData(ctxAddr, this.dataAddr);
138138
if (this.inputAddr == -1) {
139139
input("");
140140
}
141-
wasm.opaEvalCtxSetInput(ctxAddr, this.inputAddr);
142-
wasm.opaEvalCtxSetEntrypoint(ctxAddr, this.entrypoint);
141+
wasm.exports().opaEvalCtxSetInput(ctxAddr, this.inputAddr);
142+
wasm.exports().opaEvalCtxSetEntrypoint(ctxAddr, this.entrypoint);
143143

144-
var evalResult = OpaErrorCode.fromValue(wasm.eval(ctxAddr));
144+
var evalResult = OpaErrorCode.fromValue(wasm.exports().eval(ctxAddr));
145145
if (evalResult != OpaErrorCode.OPA_ERR_OK) {
146146
throw new RuntimeException(
147147
"Error evaluating the Opa Policy, returned code is: " + evalResult);
148148
}
149149

150-
this.resultAddr = wasm.opaEvalCtxGetResult(ctxAddr);
150+
this.resultAddr = wasm.exports().opaEvalCtxGetResult(ctxAddr);
151151
var result = dumpJson(resultAddr);
152152
return result;
153153
}
@@ -259,8 +259,7 @@ public OpaPolicy build() {
259259
.withJsonMapper(jsonMapper)
260260
.withYamlMapper(yamlMapper)
261261
.withMemory(
262-
new ByteBufferMemory(
263-
new MemoryLimits(initialMemory, maxMemory)))
262+
new ByteArrayMemory(new MemoryLimits(initialMemory, maxMemory)))
264263
.withDefaultBuiltins(defaultBuiltins)
265264
.addBuiltins(builtins.toArray(OpaBuiltin.Builtin[]::new))
266265
.build();

core/src/main/java/com/styra/opa/wasm/OpaWasm.java

+21-15
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.styra.opa.wasm;
22

33
import com.dylibso.chicory.experimental.hostmodule.annotations.WasmModuleInterface;
4-
import com.dylibso.chicory.runtime.ByteArrayMemory;
54
import com.dylibso.chicory.runtime.Instance;
65
import com.dylibso.chicory.runtime.Memory;
76
import com.dylibso.chicory.wasm.Parser;
@@ -14,11 +13,12 @@
1413
import java.util.List;
1514

1615
// Low level bindings to OPA
17-
// The resulting code is the target to be generated by chicory-bindgen
1816
@WasmModuleInterface("demo-policy.wasm")
19-
public class OpaWasm implements OpaWasm_ModuleExports, OpaWasm_ModuleImports, OpaWasm_Env {
17+
public class OpaWasm implements OpaWasm_ModuleImports, OpaWasm_Env {
2018
private final Instance instance;
2119
private final Memory memory;
20+
private final OpaWasm_ModuleExports exports;
21+
2222
private final ObjectMapper jsonMapper;
2323
private final ObjectMapper yamlMapper;
2424
private final OpaBuiltin.Builtin[] builtins;
@@ -40,19 +40,20 @@ private OpaWasm(
4040
this.instance =
4141
Instance.builder(Parser.parse(is))
4242
.withImportValues(toImportValues())
43-
.withMemoryFactory(ByteArrayMemory::new)
43+
.withMemoryFactory(limits -> memory)
4444
.build();
45+
this.exports = new OpaWasm_ModuleExports(instance);
4546
this.builtins = initializeBuiltins(defaultBuiltins, builtins);
4647
}
4748

4849
public OpaBuiltin.Builtin[] initializeBuiltins(
4950
boolean defaultBuiltins, OpaBuiltin.Builtin[] builtins) {
5051
var mappings = new HashMap<String, Integer>();
51-
int builtinsAddr = builtins();
52-
var builtinsStrAddr = opaJsonDump(builtinsAddr);
52+
int builtinsAddr = exports.builtins();
53+
var builtinsStrAddr = exports.opaJsonDump(builtinsAddr);
5354
var builtinsStr = memory().readCString(builtinsStrAddr);
54-
opaFree(builtinsStrAddr);
55-
opaFree(builtinsAddr);
55+
exports.opaFree(builtinsStrAddr);
56+
exports.opaFree(builtinsAddr);
5657
try {
5758
var fields = jsonMapper().readTree(builtinsStr).fields();
5859
while (fields.hasNext()) {
@@ -155,23 +156,23 @@ public Instance instance() {
155156
return this.instance;
156157
}
157158

158-
public Memory memory() {
159-
return this.memory;
159+
public OpaWasm_ModuleExports exports() {
160+
return this.exports;
160161
}
161162

162163
// helper functions - can be written by the end user
163164
public String readString(int addr) {
164-
int resultAddr = opaJsonDump(addr);
165+
int resultAddr = exports.opaJsonDump(addr);
165166
var resultStr = memory().readCString(resultAddr);
166-
opaFree(resultAddr);
167+
exports.opaFree(resultAddr);
167168
return resultStr;
168169
}
169170

170171
public int writeResult(String result) {
171-
var resultStrAddr = opaMalloc(result.length());
172+
var resultStrAddr = exports.opaMalloc(result.length());
172173
memory().writeCString(resultStrAddr, result);
173-
var resultAddr = opaJsonParse(resultStrAddr, result.length());
174-
opaFree(resultStrAddr);
174+
var resultAddr = exports.opaJsonParse(resultStrAddr, result.length());
175+
exports.opaFree(resultStrAddr);
175176
return resultAddr;
176177
}
177178

@@ -181,6 +182,11 @@ public void opaAbort(int ptr) {
181182
throw new OpaAbortException("opa_abort - " + errorMessage);
182183
}
183184

185+
@Override
186+
public Memory memory() {
187+
return memory;
188+
}
189+
184190
@Override
185191
public int opaBuiltin0(int builtinId, int ctx) {
186192
return builtins[builtinId].asBuiltin0(this);

core/src/test/java/com/styra/opa/wasm/OpaTest.java

+25-24
Original file line numberDiff line numberDiff line change
@@ -26,45 +26,46 @@ public void lowLevelAPI() throws Exception {
2626
.withMemory(new ByteBufferMemory(new MemoryLimits(2, 2)))
2727
.withInputStream(new FileInputStream(wasmFile.toFile()))
2828
.build();
29+
var opaExports = opa.exports();
2930

30-
assertEquals(opa.opaWasmAbiVersion().getValue(), 1L);
31-
assertEquals(opa.opaWasmAbiMinorVersion().getValue(), 3L);
31+
assertEquals(opaExports.opaWasmAbiVersion().getValue(), 1L);
32+
assertEquals(opaExports.opaWasmAbiMinorVersion().getValue(), 3L);
3233

33-
var builtinsAddr = opa.builtins();
34-
var builtinsStringAddr = opa.opaJsonDump(builtinsAddr);
35-
assertEquals("{}", opa.memory().readCString(builtinsStringAddr));
34+
var builtinsAddr = opaExports.builtins();
35+
var builtinsStringAddr = opaExports.opaJsonDump(builtinsAddr);
36+
assertEquals("{}", opaExports.memory().readCString(builtinsStringAddr));
3637

3738
// Following the instructions here:
3839
// https://www.openpolicyagent.org/docs/latest/wasm/#evaluation
39-
var ctxAddr = opa.opaEvalCtxNew();
40+
var ctxAddr = opaExports.opaEvalCtxNew();
4041

4142
var input = "{\"user\": \"alice\"}";
42-
var inputStrAddr = opa.opaMalloc(input.length());
43-
opa.memory().writeCString(inputStrAddr, input);
44-
var inputAddr = opa.opaJsonParse(inputStrAddr, input.length());
45-
opa.opaFree(inputStrAddr);
46-
opa.opaEvalCtxSetInput(ctxAddr, inputAddr);
43+
var inputStrAddr = opaExports.opaMalloc(input.length());
44+
opaExports.memory().writeCString(inputStrAddr, input);
45+
var inputAddr = opaExports.opaJsonParse(inputStrAddr, input.length());
46+
opaExports.opaFree(inputStrAddr);
47+
opaExports.opaEvalCtxSetInput(ctxAddr, inputAddr);
4748

4849
var data = "{ \"role\" : { \"alice\" : \"admin\", \"bob\" : \"user\" } }";
49-
var dataStrAddr = opa.opaMalloc(data.length());
50-
opa.memory().writeCString(dataStrAddr, data);
51-
var dataAddr = opa.opaJsonParse(dataStrAddr, data.length());
52-
opa.opaFree(dataStrAddr);
53-
opa.opaEvalCtxSetData(ctxAddr, dataAddr);
50+
var dataStrAddr = opaExports.opaMalloc(data.length());
51+
opaExports.memory().writeCString(dataStrAddr, data);
52+
var dataAddr = opaExports.opaJsonParse(dataStrAddr, data.length());
53+
opaExports.opaFree(dataStrAddr);
54+
opaExports.opaEvalCtxSetData(ctxAddr, dataAddr);
5455

55-
var evalResult = OpaErrorCode.fromValue(opa.eval(ctxAddr));
56+
var evalResult = OpaErrorCode.fromValue(opaExports.eval(ctxAddr));
5657
assertEquals(OpaErrorCode.OPA_ERR_OK, evalResult);
5758

58-
int resultAddr = opa.opaEvalCtxGetResult(ctxAddr);
59-
int resultStrAddr = opa.opaJsonDump(resultAddr);
60-
var resultStr = opa.memory().readCString(resultStrAddr);
61-
opa.opaFree(resultStrAddr);
59+
int resultAddr = opaExports.opaEvalCtxGetResult(ctxAddr);
60+
int resultStrAddr = opaExports.opaJsonDump(resultAddr);
61+
var resultStr = opaExports.memory().readCString(resultStrAddr);
62+
opaExports.opaFree(resultStrAddr);
6263
assertEquals("[{\"result\":true}]", resultStr);
6364

6465
// final cleanup of resources for demo purposes
65-
opa.opaValueFree(inputAddr);
66-
opa.opaValueFree(dataAddr);
67-
opa.opaValueFree(resultAddr);
66+
opaExports.opaValueFree(inputAddr);
67+
opaExports.opaValueFree(dataAddr);
68+
opaExports.opaValueFree(resultAddr);
6869
}
6970

7071
@Test

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
<maven-gpg-plugin.version>3.2.7</maven-gpg-plugin.version>
5959
<nexus-staging-maven-plugin.version>1.7.0</nexus-staging-maven-plugin.version>
6060
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
61-
<chicory.version>1.1.1</chicory.version>
61+
<chicory.version>1.2.0</chicory.version>
6262
<junit.version>5.12.1</junit.version>
6363
<jackson.version>2.18.3</jackson.version>
6464
<spotless.version>2.44.3</spotless.version>

0 commit comments

Comments
 (0)