Initial commit (code only without large binaries)
This commit is contained in:
127
EdgeNode/internal/js/isolate_test.go
Normal file
127
EdgeNode/internal/js/isolate_test.go
Normal file
@@ -0,0 +1,127 @@
|
||||
// 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
|
||||
}
|
||||
}()
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user