mirror of
https://gitee.com/johng/gf
synced 2026-06-06 16:21:40 +08:00
improve ghttp.GracefulServer; add more unit test case for ghttp.Server.Middleware
This commit is contained in:
@ -11,14 +11,12 @@ import (
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/gogf/gf/os/glog"
|
||||
"github.com/gogf/gf/os/gproc"
|
||||
"log"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/gogf/gf/os/glog"
|
||||
"github.com/gogf/gf/os/gproc"
|
||||
)
|
||||
|
||||
// 优雅的Web Server对象封装
|
||||
@ -154,22 +152,12 @@ func (s *gracefulServer) getNetListener(itemFunc string) (net.Listener, error) {
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
// 如果监听失败,1秒后重试,最多重试3次
|
||||
for i := 0; i < 3; i++ {
|
||||
ln, err = net.Listen("tcp", itemFunc)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("%d: net.Listen error: %v", gproc.Pid(), err)
|
||||
time.Sleep(time.Second)
|
||||
} else {
|
||||
err = nil
|
||||
break
|
||||
}
|
||||
}
|
||||
ln, err = net.Listen("tcp", itemFunc)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
err = fmt.Errorf("%d: net.Listen error: %v", gproc.Pid(), err)
|
||||
}
|
||||
}
|
||||
return ln, nil
|
||||
return ln, err
|
||||
}
|
||||
|
||||
// 执行请求优雅关闭
|
||||
|
||||
@ -61,6 +61,33 @@ func Test_BindMiddleware_Basic1(t *testing.T) {
|
||||
}
|
||||
|
||||
func Test_BindMiddleware_Basic2(t *testing.T) {
|
||||
p := ports.PopRand()
|
||||
s := g.Server(p)
|
||||
s.BindHandler("/test/test", func(r *ghttp.Request) {
|
||||
r.Response.Write("test")
|
||||
})
|
||||
s.BindMiddleware("/*", func(r *ghttp.Request) {
|
||||
r.Response.Write("1")
|
||||
r.Middleware.Next()
|
||||
r.Response.Write("2")
|
||||
})
|
||||
s.SetPort(p)
|
||||
s.SetDumpRouteMap(false)
|
||||
s.Start()
|
||||
defer s.Shutdown()
|
||||
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
gtest.Case(t, func() {
|
||||
client := ghttp.NewClient()
|
||||
client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p))
|
||||
|
||||
gtest.Assert(client.GetContent("/"), "12")
|
||||
gtest.Assert(client.GetContent("/test"), "12")
|
||||
gtest.Assert(client.GetContent("/test/test"), "1test2")
|
||||
})
|
||||
}
|
||||
|
||||
func Test_BindMiddleware_Basic3(t *testing.T) {
|
||||
p := ports.PopRand()
|
||||
s := g.Server(p)
|
||||
s.BindHandler("/test/test", func(r *ghttp.Request) {
|
||||
|
||||
Reference in New Issue
Block a user