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