// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. //go:build script package js_test import ( "github.com/TeaOSLab/EdgeNode/internal/js" "github.com/TeaOSLab/EdgeNode/internal/utils/testutils" "github.com/iwind/TeaGo/types" "sync" "testing" ) func TestIsolate_GetContext(t *testing.T) { isolate, err := js.NewIsolate() if err != nil { t.Fatal(err) } ctx, err := isolate.GetContext() if err != nil { t.Fatal(err) } defer isolate.PutContext(ctx) v, err := ctx.Run("1+1", "") if err != nil { t.Fatal(err) } t.Log(v) } func TestIsolate_GetContext2(t *testing.T) { isolate, err := js.NewIsolate() if err != nil { t.Fatal(err) } var count = 100 if testutils.IsSingleTesting() { count = 10000 } var wg = sync.WaitGroup{} wg.Add(count) for i := 0; i < count; i++ { go func() { defer wg.Done() ctx, err := isolate.GetContext() if err != nil { t.Log(err) return } defer isolate.PutContext(ctx) _, err = ctx.Run("1+1", "") if err != nil { t.Log(err) } }() } wg.Wait() t.Log(isolate.ContextPool().Size()) } func TestIsolate_GetContext_Request(t *testing.T) { isolate, err := js.NewIsolate() if err != nil { t.Fatal(err) } ctx, err := isolate.GetContext() if err != nil { t.Fatal(err) } var reqObjectId = ctx.AddGoRequestObject(&FakeRequest{ host: "example.com", remoteAddr: "127.0.0.1", }) defer isolate.PutContext(ctx) v, err := ctx.Run(`let req = new gojs.net.http.Request() req.setGoObject(`+types.String(reqObjectId)+`) req.host + ' @ ' + req.remoteAddr + ' @ ' + req.url`, "") if err != nil { t.Fatal(err) } t.Log(v) } func BenchmarkIsolate_GetContext(b *testing.B) { isolate, err := js.NewIsolate() if err != nil { b.Fatal(err) } unboundScript, err := isolate.Compile("req.host() + ' @ ' + req.remoteAddr() + ' @ ' + req.proto() + ' @ ' + req.url()", "") if err != nil { b.Fatal(err) } b.RunParallel(func(pb *testing.PB) { for pb.Next() { func() { ctx, err := isolate.GetContext() if err != nil { return } defer isolate.PutContext(ctx) // TODO 需要重新实现测试用例 /**err = ctx.BindRequest(&FakeRequest{ host: "example.com", remoteAddr: "127.0.0.1", }) if err != nil { b.Log(err) return }**/ _, err = ctx.RunScript(unboundScript) if err != nil { b.Log(err) return } }() } }) }