From b1a98bc0cae5e7850b52af5c2cd824f6b670ebbc Mon Sep 17 00:00:00 2001 From: anthdm Date: Thu, 11 Jan 2024 09:09:37 +0100 Subject: [PATCH] testing runtimes with _testdata --- .gitignore | 3 ++- Makefile | 1 + internal/_testdata/build.sh | 1 + internal/_testdata/helloworld.go | 16 ++++++++++++++++ internal/_testdata/helloworld.js | 26 ++++++++++++++++++++++++++ internal/runtime/runtime_test.go | 10 ++++++---- internal/shared/shared.go | 1 - 7 files changed, 52 insertions(+), 6 deletions(-) create mode 100755 internal/_testdata/build.sh create mode 100644 internal/_testdata/helloworld.go create mode 100644 internal/_testdata/helloworld.js diff --git a/.gitignore b/.gitignore index dbb0ea1..1c4600a 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ bin config.toml .db .modcache -examples/*/*.wasm \ No newline at end of file +examples/*/*.wasm +internal/_testdata/*.wasm \ No newline at end of file diff --git a/Makefile b/Makefile index 0eb7aa0..cd2cf3b 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,7 @@ api: build @./bin/api --seed test: + @./internal/_testdata/build.sh @go test ./internal/* -v proto: diff --git a/internal/_testdata/build.sh b/internal/_testdata/build.sh new file mode 100755 index 0000000..82220c8 --- /dev/null +++ b/internal/_testdata/build.sh @@ -0,0 +1 @@ +GOOS=wasip1 GOARCH=wasm go build -o internal/_testdata/helloworld.wasm internal/_testdata/helloworld.go \ No newline at end of file diff --git a/internal/_testdata/helloworld.go b/internal/_testdata/helloworld.go new file mode 100644 index 0000000..9cc8793 --- /dev/null +++ b/internal/_testdata/helloworld.go @@ -0,0 +1,16 @@ +package main + +import ( + "net/http" + + raptor "github.com/anthdm/raptor/sdk" +) + +func handle(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + w.Write([]byte("Hello world!")) +} + +func main() { + raptor.Handle(http.HandlerFunc(handle)) +} diff --git a/internal/_testdata/helloworld.js b/internal/_testdata/helloworld.js new file mode 100644 index 0000000..90d572a --- /dev/null +++ b/internal/_testdata/helloworld.js @@ -0,0 +1,26 @@ +// This should come from the official SDK. +// But there is no official SDK yet, so we keep it here. +function hexLog(s) { + for (let i = 0; i < s.length; i++) { + putstr(s.charCodeAt(i).toString(16).padStart(2, "0")) + } + putstr("0a") +} + +console.log = hexLog + +function respond(res, status) { + var buffer = new ArrayBuffer(8); + var view = new DataView(buffer); + view.setUint32(0, status, true); + view.setUint32(4, res.length, true); + + for (let i = 0; i < res.length; i++) { + putstr(res.charCodeAt(i).toString(16).padStart(2, "0")) + } + for (let i = 0; i < view.buffer.byteLength; i++) { + putstr(view.getUint8(i).toString(16).padStart(2, "0")); + } +} + +respond("Hello world!", 200) \ No newline at end of file diff --git a/internal/runtime/runtime_test.go b/internal/runtime/runtime_test.go index eca7211..dffe104 100644 --- a/internal/runtime/runtime_test.go +++ b/internal/runtime/runtime_test.go @@ -17,7 +17,7 @@ import ( ) func TestRuntimeInvokeJSCode(t *testing.T) { - b, err := os.ReadFile("../../examples/js/index.js") + b, err := os.ReadFile("../_testdata/helloworld.js") require.Nil(t, err) req := &proto.HTTPRequest{ @@ -42,14 +42,15 @@ func TestRuntimeInvokeJSCode(t *testing.T) { scriptArgs := []string{"", "-e", string(b)} require.Nil(t, r.Invoke(bytes.NewReader(breq), nil, scriptArgs...)) - _, _, status, err := shared.ParseStdout("js", out) + _, res, status, err := shared.ParseStdout("js", out) require.Nil(t, err) require.Equal(t, http.StatusOK, status) + require.Equal(t, "Hello world!", string(res)) require.Nil(t, r.Close()) } func TestRuntimeInvokeGoCode(t *testing.T) { - b, err := os.ReadFile("../../examples/go/app.wasm") + b, err := os.ReadFile("../_testdata/helloworld.wasm") require.Nil(t, err) req := &proto.HTTPRequest{ @@ -71,8 +72,9 @@ func TestRuntimeInvokeGoCode(t *testing.T) { r, err := New(context.Background(), args) require.Nil(t, err) require.Nil(t, r.Invoke(bytes.NewReader(breq), nil)) - _, _, status, err := shared.ParseStdout("go", out) + _, res, status, err := shared.ParseStdout("go", out) require.Nil(t, err) require.Equal(t, http.StatusOK, status) + require.Equal(t, "Hello world!", string(res)) require.Nil(t, r.Close()) } diff --git a/internal/shared/shared.go b/internal/shared/shared.go index 3e1a804..0079d4e 100644 --- a/internal/shared/shared.go +++ b/internal/shared/shared.go @@ -30,7 +30,6 @@ func ParseStdout(runtime string, stdout io.Reader) (logs []byte, resp []byte, st magicStart := outLen - magicLen status = int(binary.LittleEndian.Uint32(stdoutb[magicStart : magicStart+4])) respLen := binary.LittleEndian.Uint32(stdoutb[magicStart+4:]) - fmt.Println(status) if int(respLen) > outLen-magicLen { err = fmt.Errorf("response length exceeds available data") return