package service_test import ( "fmt" "testing" "time" "apigo.cc/gojs" _ "apigo.cc/gojs/console" _ "apigo.cc/gojs/http" _ "apigo.cc/gojs/service" _ "apigo.cc/gojs/util" "github.com/ssgo/httpclient" "github.com/ssgo/u" ) var rt *gojs.Runtime var addr = "" const runTimes = 100 func TestStart(t *testing.T) { gojs.ExportForDev() rt = gojs.New() err := rt.StartFromFile("start.js") if err != nil { t.Fatal("start failed", err) } r, err := rt.RunMain() if err != nil { t.Fatal("start failed", err) } addr = u.String(r) } func TestJsEcho(t *testing.T) { for i := 0; i < runTimes; i++ { name := u.UniqueId() r, err := rt.RunCode("test('" + name + "')") if err != nil { t.Fatal("test js get failed, got error", err) } else if r != name { t.Fatal("test js get failed, name not match", r, name) } } } func TestGoEcho(t *testing.T) { hc := httpclient.GetClientH2C(0) for i := 0; i < runTimes; i++ { name := u.UniqueId() r := hc.Get("http://" + addr + "/echo?name=" + name) if r.Error != nil { t.Fatal("test go get failed, got error", r.Error) } else if r.String() != name { t.Fatal("test go get failed, name not match", r, name) } } } func TestJsAsyncEcho(t *testing.T) { ch := make(chan bool, runTimes) t1 := time.Now().UnixMilli() for i := 0; i < runTimes; i++ { go func() { name := u.UniqueId() r, err := rt.RunCode("test('" + name + "')") ch <- true if err != nil { t.Fatal("test js async get failed, got error", err) } else if r != name { t.Fatal("test js async get failed, name not match", r, name) } }() } for i := 0; i < runTimes; i++ { <-ch } t2 := time.Now().UnixMilli() - t1 fmt.Println(u.BGreen("js async test time:"), t2, "ms") } func TestGoAsyncEcho(t *testing.T) { hc := httpclient.GetClientH2C(0) ch := make(chan bool, runTimes*10) t1 := time.Now().UnixMilli() lastName := "" lastResult := "" for i := 0; i < runTimes*10; i++ { name := fmt.Sprint("N", i) lastName = name go func() { r := hc.Get("http://" + addr + "/echo?name=" + name) lastResult = r.String() ch <- true if r.Error != nil { t.Fatal("test go async get failed, got error", r.Error) } else if r.String() != name { t.Fatal("test go async get failed, name not match", r, name) } }() } for i := 0; i < runTimes*10; i++ { <-ch } t2 := time.Now().UnixMilli() - t1 fmt.Println(u.BGreen("go async test time:"), t2, "ms") fmt.Println(u.BGreen("last name:"), lastName, lastResult) } func TestStop(t *testing.T) { go func() { time.Sleep(100 * time.Millisecond) _, _ = rt.RunCode("s.stop()") }() gojs.WaitAll() time.Sleep(100 * time.Millisecond) // if err != nil { // t.Fatal("stop failed", err) // } }