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