Files
waf-platform/EdgeNode/internal/js/isolate_test.go
2026-02-04 20:27:13 +08:00

128 lines
2.4 KiB
Go

// 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
}
}()
}
})
}