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

108 lines
2.3 KiB
Go

// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
//go:build script
// +build script
package js_test
import (
"github.com/TeaOSLab/EdgeNode/internal/js"
"github.com/iwind/TeaGo/types"
"testing"
"time"
)
func TestJSNetHTTPRequestLibrary(t *testing.T) {
isolate, err := js.NewIsolateWithContexts(1)
if err != nil {
t.Fatal(err)
}
defer isolate.Dispose()
ctx, err := isolate.GetContext()
if err != nil {
t.Fatal(err)
}
var before = time.Now()
defer func() {
t.Log(time.Since(before).Seconds()*1000, "ms")
}()
js.SharedJSConsoleLogLibrary.JSSetTesting(t)
var req = &FakeRequest{}
req.host = "example.com"
req.remoteAddr = "192.168.1.100"
var objId = ctx.AddGoObject(req)
defer isolate.PutContext(ctx)
v, err := ctx.Run(`
let req = new gojs.net.http.Request()
req.setGoObject(`+types.String(objId)+`)
// user codes
console.log("url:", req.url)
console.log("host:", req.host)
console.log("remoteAddr:", req.remoteAddr)
console.log("rawRemoteAddr:", req.rawRemoteAddr)
console.log("remotePort:", req.remotePort)
console.log("method:", req.method)
console.log("contentLength:", req.contentLength)
console.log("transferEncoding:", req.transferEncoding)
console.log("proto", req.proto)
console.log("protoMajor:", req.protoMajor)
console.log("protoMinor", req.protoMinor)
req.setHeader("Server", "goedge/1.0")
req.setHeader("Hello", "World")
req.setHeader("Hello-Deleted", "World")
req.setHeader("Content-Length", [1024])
req.setHeader("Set-Cookie", ["a=1", "b=2"])
req.deleteHeader("Hello-Deleted")
console.log("header", req.header)
req.setAttr("a", "b")
req.setVar("a", "b")
req.done()
`, "req.js")
if err != nil {
t.Fatal(ctx.WrapJSErr(err))
}
_ = v
}
func BenchmarkHTTPRequestLibrary(b *testing.B) {
isolate, err := js.NewIsolateWithContexts(128)
if err != nil {
b.Fatal(err)
}
defer isolate.Dispose()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
func() {
ctx, err := isolate.GetContext()
if err != nil {
b.Fatal(err)
}
defer isolate.PutContext(ctx)
var req = &FakeRequest{}
req.host = "example.com"
var objId = ctx.AddGoObject(req)
_, err = ctx.Run(`{
let req = new gojs.net.http.Request()
req.setGoObject(`+types.String(objId)+`)
// user codes
req.host
}`, "")
if err != nil {
b.Fatal(err)
}
}()
}
})
}