Files
sponge/pkg/gin/middleware/logging_test.go
zhuyasen 083a0499c1 init
2022-09-19 23:24:11 +08:00

154 lines
3.1 KiB
Go

package middleware
import (
"fmt"
"net"
"testing"
"github.com/zhufuyi/sponge/pkg/gin/response"
"github.com/zhufuyi/sponge/pkg/gohttp"
"github.com/zhufuyi/sponge/pkg/logger"
"github.com/zhufuyi/sponge/pkg/utils"
"github.com/gin-gonic/gin"
)
var requestAddr string
func initServer1() {
addr := getAddr()
r := gin.Default()
r.Use(RequestID())
// 默认打印日志
// r.Use(Logging())
// 自定义打印日志
r.Use(Logging(
WithMaxLen(400),
//WithRequestIDFromHeader(),
WithRequestIDFromContext(),
//WithIgnoreRoutes("/hello"), // 忽略/hello
))
// 自定义zap log
//log, _ := logger.Init(logger.WithFormat("json"))
//r.Use(Logging(
// WithLog(log),
//))
helloFun := func(c *gin.Context) {
logger.Info("test request id", utils.FieldRequestIDFromContext(c))
response.Success(c, "hello world")
}
r.GET("/hello", helloFun)
r.DELETE("/hello", helloFun)
r.POST("/hello", helloFun)
r.PUT("/hello", helloFun)
r.PATCH("/hello", helloFun)
go func() {
err := r.Run(addr)
if err != nil {
panic(err)
}
}()
}
// ------------------------------------------------------------------------------------------
func TestRequest(t *testing.T) {
initServer1()
wantHello := "hello world"
result := &gohttp.StdResult{}
type User struct {
Name string `json:"name"`
}
t.Run("get hello", func(t *testing.T) {
err := gohttp.Get(result, requestAddr+"/hello", gohttp.KV{"id": "100"})
if err != nil {
t.Error(err)
return
}
got := result.Data.(string)
if got != wantHello {
t.Errorf("got: %s, want: %s", got, wantHello)
}
})
t.Run("delete hello", func(t *testing.T) {
err := gohttp.Delete(result, requestAddr+"/hello", gohttp.KV{"id": "100"})
if err != nil {
t.Error(err)
return
}
got := result.Data.(string)
if got != wantHello {
t.Errorf("got: %s, want: %s", got, wantHello)
}
})
t.Run("post hello", func(t *testing.T) {
err := gohttp.Post(result, requestAddr+"/hello", &User{"foo"})
if err != nil {
t.Error(err)
return
}
got := result.Data.(string)
if got != wantHello {
t.Errorf("got: %s, want: %s", got, wantHello)
}
})
t.Run("put hello", func(t *testing.T) {
err := gohttp.Put(result, requestAddr+"/hello", &User{"foo"})
if err != nil {
t.Error(err)
return
}
got := result.Data.(string)
if got != wantHello {
t.Errorf("got: %s, want: %s", got, wantHello)
}
})
t.Run("patch hello", func(t *testing.T) {
err := gohttp.Patch(result, requestAddr+"/hello", &User{"foo"})
if err != nil {
t.Error(err)
return
}
got := result.Data.(string)
if got != wantHello {
t.Errorf("got: %s, want: %s", got, wantHello)
}
})
}
func getAddr() string {
port, _ := getAvailablePort()
requestAddr = fmt.Sprintf("http://localhost:%d", port)
return fmt.Sprintf(":%d", port)
}
func getAvailablePort() (int, error) {
address, err := net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:0", "0.0.0.0"))
if err != nil {
return 0, err
}
listener, err := net.ListenTCP("tcp", address)
if err != nil {
return 0, err
}
port := listener.Addr().(*net.TCPAddr).Port
err = listener.Close()
return port, err
}