117 lines
2.6 KiB
Go
117 lines
2.6 KiB
Go
package http_test
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"apigo.cc/gojs"
|
|
_ "apigo.cc/gojs/console"
|
|
_ "apigo.cc/gojs/http"
|
|
"github.com/gorilla/websocket"
|
|
"github.com/ssgo/s"
|
|
"github.com/ssgo/u"
|
|
)
|
|
|
|
var as *s.AsyncServer
|
|
|
|
func TestStart(t *testing.T) {
|
|
s.Config.Listen = "18001,http|18002,h2c"
|
|
s.Register(0, "/echo", func(in struct{ Name string }) string {
|
|
return in.Name
|
|
}, "")
|
|
s.RegisterWebsocket(0, "/ws", nil, func(conn *websocket.Conn) {
|
|
typ, data, _ := conn.ReadMessage()
|
|
conn.WriteMessage(typ, data)
|
|
typ, data, _ = conn.ReadMessage()
|
|
conn.WriteMessage(typ, data)
|
|
typ, data, _ = conn.ReadMessage()
|
|
conn.WriteMessage(typ, data)
|
|
conn.Close()
|
|
}, nil, nil, nil, "")
|
|
as = s.AsyncStart()
|
|
gojs.ExportForDev()
|
|
}
|
|
|
|
func TestHttp(t *testing.T) {
|
|
vm := gojs.New()
|
|
vm.RunCode("import http from 'apigo.cc/gojs/http'")
|
|
testIsOk(t, vm, `http.get('http://127.0.0.1:18001/echo?name=Tom').string()`, "Tom")
|
|
testIsOk(t, vm, `http.post('http://127.0.0.1:18001/echo',{name:'Tom'}).string()`, "Tom")
|
|
vm.RunCode("let h2 = http.newH2C()")
|
|
testIsOk(t, vm, `h2.get('http://127.0.0.1:18002/echo?name=Tom').string()`, "Tom")
|
|
testIsOk(t, vm, `h2.post('http://127.0.0.1:18002/echo',{name:'Tom'}).string()`, "Tom")
|
|
}
|
|
|
|
func TestWS(t *testing.T) {
|
|
vm := gojs.New()
|
|
var err error
|
|
var r any
|
|
_, err = vm.RunFile("ws_test.js")
|
|
if err != nil {
|
|
t.Fatal("ws error", err)
|
|
}
|
|
|
|
r, err = vm.RunCode("testSync()")
|
|
if err != nil {
|
|
t.Fatal("ws error", err)
|
|
}
|
|
if r != true {
|
|
t.Fatal("ws check failed", r)
|
|
}
|
|
|
|
// 异步测试
|
|
_, err = vm.RunCode("testAsync()")
|
|
if err != nil {
|
|
t.Fatal("ws error", err)
|
|
}
|
|
time.Sleep(time.Millisecond * 100)
|
|
|
|
// 检查结果
|
|
r, err = vm.RunCode("asyncResult")
|
|
if err != nil {
|
|
t.Fatal("ws error", err)
|
|
}
|
|
testHas(t, u.String(r), "Tom1", "Tom2", "Tom3")
|
|
|
|
// 重连后再次测试
|
|
r, err = vm.RunCode("testAsync2()")
|
|
if err != nil {
|
|
t.Fatal("ws error", err)
|
|
}
|
|
time.Sleep(time.Millisecond * 100)
|
|
|
|
r, err = vm.RunCode("asyncResult")
|
|
if err != nil {
|
|
t.Fatal("ws error", err)
|
|
}
|
|
testHas(t, u.String(r), "Tom1", "Tom2", "Tom3", "Tom4", "Tom5", "Tom6")
|
|
|
|
// 主动关闭连接
|
|
_, err = vm.RunCode("closeAsync()")
|
|
if err != nil {
|
|
t.Fatal("ws error", err)
|
|
}
|
|
}
|
|
|
|
func TestStop(t *testing.T) {
|
|
as.Stop()
|
|
}
|
|
|
|
func testHas(t *testing.T, r string, checks ...string) {
|
|
for _, check := range checks {
|
|
if !strings.Contains(r, check) {
|
|
t.Fatal("not exists", r, check)
|
|
}
|
|
}
|
|
}
|
|
|
|
func testIsOk(t *testing.T, vm *gojs.Runtime, code string, check string) {
|
|
r, err := vm.RunCode(code)
|
|
if err != nil {
|
|
t.Fatal(code, err)
|
|
} else if r != check {
|
|
t.Fatal(code, r, check)
|
|
}
|
|
}
|