Fix wasm binding wasi http (#3077)
Signed-off-by: zhangchao <zchao9100@gmail.com>
This commit is contained in:
parent
e83b79e225
commit
f4ea274139
|
@ -93,7 +93,7 @@ func (out *outputBinding) Init(ctx context.Context, metadata bindings.Metadata)
|
|||
_ = out.runtime.Close(context.Background())
|
||||
return fmt.Errorf("can not instantiate wasi-http with strict sandbox")
|
||||
}
|
||||
err = wasi_http.Instantiate(ctx, out.runtime)
|
||||
err = wasi_http.MakeWasiHTTP().Instantiate(ctx, out.runtime)
|
||||
}
|
||||
if err != nil {
|
||||
_ = out.runtime.Close(context.Background())
|
||||
|
|
|
@ -17,9 +17,11 @@ import (
|
|||
"bytes"
|
||||
"context"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
@ -268,3 +270,41 @@ func Test_InvokeHttp(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestEnsureConcurrency(t *testing.T) {
|
||||
l := logger.NewLogger(t.Name())
|
||||
var buf bytes.Buffer
|
||||
l.SetOutput(&buf)
|
||||
|
||||
s := httptest.NewServer(&handler{})
|
||||
defer s.Close()
|
||||
|
||||
meta := metadata.Base{Properties: map[string]string{"url": urlHTTPFile}}
|
||||
|
||||
output := NewWasmOutput(l)
|
||||
defer output.(io.Closer).Close()
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
err := output.Init(ctx, bindings.Metadata{Base: meta})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Wasm is running in goroutine, use wait group to ensure all goroutines are finished
|
||||
wg := sync.WaitGroup{}
|
||||
// 100 is enough to trigger concurrency, and wasm should be executed run fast enough to not consuming too much time
|
||||
for i := 0; i < 100; i++ {
|
||||
wg.Add(1)
|
||||
go func(i int) {
|
||||
request := &bindings.InvokeRequest{
|
||||
Metadata: map[string]string{"args": fmt.Sprintf("%s/%d", s.URL, i)},
|
||||
Operation: ExecuteOperation,
|
||||
}
|
||||
expectedResp := fmt.Sprintf("Status: 200\nBody: \n/%d\n", i)
|
||||
resp, err := output.Invoke(ctx, request)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, expectedResp, string(resp.Data))
|
||||
wg.Done()
|
||||
}(i)
|
||||
}
|
||||
wg.Wait()
|
||||
}
|
||||
|
|
2
go.mod
2
go.mod
|
@ -96,7 +96,7 @@ require (
|
|||
github.com/sendgrid/sendgrid-go v3.13.0+incompatible
|
||||
github.com/sijms/go-ora/v2 v2.7.17
|
||||
github.com/spf13/cast v1.5.1
|
||||
github.com/stealthrocket/wasi-go v0.7.6-0.20230718231108-c3d30af59057
|
||||
github.com/stealthrocket/wasi-go v0.8.1-0.20230912180546-8efbab50fb58
|
||||
github.com/stretchr/testify v1.8.4
|
||||
github.com/supplyon/gremcos v0.1.40
|
||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.732
|
||||
|
|
4
go.sum
4
go.sum
|
@ -1852,8 +1852,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An
|
|||
github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
|
||||
github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
|
||||
github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU=
|
||||
github.com/stealthrocket/wasi-go v0.7.6-0.20230718231108-c3d30af59057 h1:BaBBX206PM1+qF5WQx7Ug7mbKqzizBONDMv4ST5EVNg=
|
||||
github.com/stealthrocket/wasi-go v0.7.6-0.20230718231108-c3d30af59057/go.mod h1:PJ5oVs2E1ciOJnsTnav4nvTtEcJ4D1jUZAewS9pzuZg=
|
||||
github.com/stealthrocket/wasi-go v0.8.1-0.20230912180546-8efbab50fb58 h1:mTC4gyv3lcJ1XpzZMAckqkvWUqeT5Bva4RAT1IoHAAA=
|
||||
github.com/stealthrocket/wasi-go v0.8.1-0.20230912180546-8efbab50fb58/go.mod h1:ZAYCOqLJkc9P6fcq14TV4cf+gJ2fHthp9kCGxBViagE=
|
||||
github.com/stealthrocket/wazergo v0.19.1 h1:BPrITETPgSFwiytwmToO0MbUC/+RGC39JScz1JmmG6c=
|
||||
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
|
||||
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
||||
|
|
Loading…
Reference in New Issue