github.com/tetratelabs/wazero@v1.2.1/internal/gojs/http_test.go (about) 1 package gojs_test 2 3 import ( 4 "errors" 5 "io" 6 "net/http" 7 "strings" 8 "testing" 9 10 "github.com/tetratelabs/wazero" 11 "github.com/tetratelabs/wazero/internal/gojs/config" 12 "github.com/tetratelabs/wazero/internal/testing/require" 13 ) 14 15 type roundTripperFunc func(r *http.Request) (*http.Response, error) 16 17 func (f roundTripperFunc) RoundTrip(r *http.Request) (*http.Response, error) { 18 return f(r) 19 } 20 21 func Test_http(t *testing.T) { 22 t.Parallel() 23 24 rt := roundTripperFunc(func(req *http.Request) (*http.Response, error) { 25 if req.URL.Path == "/error" { 26 return nil, errors.New("error") 27 } 28 if req.Body != nil { 29 require.Equal(t, http.MethodPost, req.Method) 30 bytes, err := io.ReadAll(req.Body) 31 require.NoError(t, err) 32 require.Equal(t, "ice cream", string(bytes)) 33 } 34 return &http.Response{ 35 StatusCode: http.StatusOK, 36 Status: http.StatusText(http.StatusOK), 37 Header: http.Header{"Custom": {"1"}}, 38 Body: io.NopCloser(strings.NewReader("abcdef")), 39 ContentLength: 6, 40 }, nil 41 }) 42 43 stdout, stderr, err := compileAndRun(testCtx, "http", func(moduleConfig wazero.ModuleConfig) (wazero.ModuleConfig, *config.Config) { 44 config := config.NewConfig() 45 config.Rt = rt 46 return moduleConfig.WithEnv("BASE_URL", "http://host"), config 47 }) 48 49 require.EqualError(t, err, `module closed with exit_code(0)`) 50 require.Zero(t, stderr) 51 require.Equal(t, `Get "http://host/error": net/http: fetch() failed: error 52 1 53 abcdef 54 `, stdout) 55 }