-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain_test.go
85 lines (74 loc) · 1.9 KB
/
main_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package wasm
import (
"os"
"testing"
"wasm/runner"
"wasm/wasmer"
"wasm/wasmtime"
"wasm/wazero"
)
const fnName = "run"
type ProtocolType string
type RuntimeType string
const (
ProtocolTypeRaw ProtocolType = "raw"
ProtocolTypeWASI = "wasi"
ProtocolTypeWAPC = "wapc"
)
const (
RuntimeTypeWazero RuntimeType = "wazero"
RuntimeTypeWasmtime = "wasmtime"
RuntimeTypeWasmer = "wasmer"
)
type runtime struct {
protocol ProtocolType
runtime RuntimeType
runner.RawRunner
}
type InitRuntimeFunc func([]byte) (runner.RawRunner, error)
var InitRawRuntimes = map[RuntimeType]InitRuntimeFunc{
"wazero": wazero.NewRawRuntime,
"wasmer": wasmer.NewRawRuntime,
"wasmtime": wasmtime.NewRawRuntime,
}
var InitWASIRuntimes = map[RuntimeType]InitRuntimeFunc{
"wazero": wazero.NewWASIRuntime,
// does not work with wasmer and wazero
//"wasmer": wasmer.NewWASIRuntime,
//"wasmtime": wasmtime.NewWASIRuntime,
}
var InitWAPCRuntimes = map[RuntimeType]InitRuntimeFunc{
"wazero": wazero.NewWAPCRuntime,
"wasmer": wasmer.NewWAPCRuntime,
"wasmtime": wasmtime.NewWAPCRuntime,
}
func getRawRuntimes(t *testing.T, setup map[ProtocolType]string) []runtime {
runtimes := []runtime{}
for proto, modulePath := range setup {
module, err := os.ReadFile(modulePath)
if err != nil {
t.Fatal(err)
}
var initFuncs map[RuntimeType]InitRuntimeFunc
switch proto {
case ProtocolTypeRaw:
initFuncs = InitRawRuntimes
case ProtocolTypeWASI:
initFuncs = InitWASIRuntimes
case ProtocolTypeWAPC:
initFuncs = InitWAPCRuntimes
}
for runtimeType, initFn := range initFuncs {
rawRunner, err := initFn(module)
if err != nil {
t.Fatalf("failed to initialize runtime=%s proto=%s: %s", runtimeType, proto, err)
}
runtimes = append(runtimes, runtime{
protocol: proto,
runtime: runtimeType,
RawRunner: rawRunner,
})
}
}
return runtimes
}