提交 c93b0b27 authored 作者: mooncake9527's avatar mooncake9527

update

上级 7064757f
...@@ -159,7 +159,7 @@ func GetGinCtxTid(c *gin.Context) string { ...@@ -159,7 +159,7 @@ func GetGinCtxTid(c *gin.Context) string {
} }
func GenerateTid() string { func GenerateTid() string {
return xsf.Generate().String() return xsf.GenerateID().String()
} }
func GetCtxTid(ctx context.Context) string { func GetCtxTid(ctx context.Context) string {
......
...@@ -64,11 +64,10 @@ func TestCircuitBreaker(t *testing.T) { ...@@ -64,11 +64,10 @@ func TestCircuitBreaker(t *testing.T) {
defer wg.Done() defer wg.Done()
for i := 0; i < 100; i++ { for i := 0; i < 100; i++ {
result := &httpcli.StdResult{} result := &httpcli.StdResult{}
err := httpcli.Get(context.Background(), result, requestAddr+"/hello") req := httpcli.New()
req.SetURL(requestAddr + "/hello")
err := req.GET(context.Background()).Err()
if err != nil { if err != nil {
//if errors.Is(err, ErrNotAllowed) {
// atomic.AddInt32(&countBreaker, 1)
//}
atomic.AddInt32(&failures, 1) atomic.AddInt32(&failures, 1)
continue continue
} }
......
...@@ -81,7 +81,7 @@ func TestRequest(t *testing.T) { ...@@ -81,7 +81,7 @@ func TestRequest(t *testing.T) {
} }
t.Run("get ping", func(t *testing.T) { t.Run("get ping", func(t *testing.T) {
err := httpcli.Get(context.Background(), result, requestAddr+"/ping") err := httpcli.New().SetURL(requestAddr + "/ping").GET(context.Background()).BindJSON(result).Err()
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
...@@ -93,7 +93,7 @@ func TestRequest(t *testing.T) { ...@@ -93,7 +93,7 @@ func TestRequest(t *testing.T) {
}) })
t.Run("get hello", func(t *testing.T) { t.Run("get hello", func(t *testing.T) {
err := httpcli.Get(context.Background(), result, requestAddr+"/hello", httpcli.WithParams(map[string]interface{}{"id": "100"})) err := httpcli.New().SetURL(requestAddr + "/hello").SetParams(map[string]interface{}{"id": "100"}).GET(context.Background()).BindJSON(result).Err()
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
...@@ -105,7 +105,7 @@ func TestRequest(t *testing.T) { ...@@ -105,7 +105,7 @@ func TestRequest(t *testing.T) {
}) })
t.Run("delete hello", func(t *testing.T) { t.Run("delete hello", func(t *testing.T) {
err := httpcli.Delete(context.Background(), result, requestAddr+"/hello", httpcli.WithParams(map[string]interface{}{"id": "100"})) err := httpcli.New().SetURL(requestAddr + "/hello").SetParams(map[string]interface{}{"id": "100"}).DELETE(context.Background()).BindJSON(result).Err()
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
...@@ -117,7 +117,7 @@ func TestRequest(t *testing.T) { ...@@ -117,7 +117,7 @@ func TestRequest(t *testing.T) {
}) })
t.Run("post hello", func(t *testing.T) { t.Run("post hello", func(t *testing.T) {
err := httpcli.Post(context.Background(), result, requestAddr+"/hello", &User{"foo"}) err := httpcli.New().SetURL(requestAddr + "/hello").SetBody(User{"foo"}).POST(context.Background()).BindJSON(result).Err()
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
...@@ -129,7 +129,7 @@ func TestRequest(t *testing.T) { ...@@ -129,7 +129,7 @@ func TestRequest(t *testing.T) {
}) })
t.Run("put hello", func(t *testing.T) { t.Run("put hello", func(t *testing.T) {
err := httpcli.Put(context.Background(), result, requestAddr+"/hello", &User{"foo"}) err := httpcli.New().SetURL(requestAddr + "/hello").SetBody(User{"foo"}).PUT(context.Background()).BindJSON(result).Err()
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
...@@ -141,7 +141,7 @@ func TestRequest(t *testing.T) { ...@@ -141,7 +141,7 @@ func TestRequest(t *testing.T) {
}) })
t.Run("patch hello", func(t *testing.T) { t.Run("patch hello", func(t *testing.T) {
err := httpcli.Patch(context.Background(), result, requestAddr+"/hello", &User{"foo"}) err := httpcli.New().SetURL(requestAddr + "/hello").SetBody(User{"foo"}).PATCH(context.Background()).BindJSON(result).Err()
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
...@@ -188,7 +188,7 @@ func TestRequest2(t *testing.T) { ...@@ -188,7 +188,7 @@ func TestRequest2(t *testing.T) {
requestAddr := runLogHTTPServer2() requestAddr := runLogHTTPServer2()
result := &httpcli.StdResult{} result := &httpcli.StdResult{}
t.Run("get ping", func(t *testing.T) { t.Run("get ping", func(t *testing.T) {
err := httpcli.Get(context.Background(), result, requestAddr+"/ping") err := httpcli.New().SetURL(requestAddr + "/ping").GET(context.Background()).BindJSON(result).Err()
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
......
...@@ -65,7 +65,7 @@ func TestRateLimiter(t *testing.T) { ...@@ -65,7 +65,7 @@ func TestRateLimiter(t *testing.T) {
defer wg.Done() defer wg.Done()
for i := 0; i < 100; i++ { for i := 0; i < 100; i++ {
result := &httpcli.StdResult{} result := &httpcli.StdResult{}
if err := httpcli.Get(context.Background(), result, requestAddr+"/hello"); err != nil { if err := httpcli.New().SetURL(requestAddr + "/hello").GET(context.Background()).BindJSON(result).Err(); err != nil {
atomic.AddInt32(&failures, 1) atomic.AddInt32(&failures, 1)
} else { } else {
atomic.AddInt32(&success, 1) atomic.AddInt32(&success, 1)
......
...@@ -62,7 +62,7 @@ func TestFieldRequestIDFromContext(t *testing.T) { ...@@ -62,7 +62,7 @@ func TestFieldRequestIDFromContext(t *testing.T) {
t.Log(GetFromCtx(ctx, "foo")) t.Log(GetFromCtx(ctx, "foo"))
t.Log(ctxUtil.CtxTraceIDField(ctx)) t.Log(ctxUtil.CtxTraceIDField(ctx))
t.Log(GetFromCtx(ctx, "not-exist")) t.Log(GetFromCtx(ctx, "not-exist"))
t.Log(GetFromHeader(ctx, ctxUtil.HeaderXRequestIDKey)) t.Log(GetFromHeader(ctx, ctxUtil.HeaderXRequestIDKey.String()))
t.Log(GetFromHeader(ctx, "Accept")) t.Log(GetFromHeader(ctx, "Accept"))
t.Log(GetFromHeader(ctx, "not-exist")) t.Log(GetFromHeader(ctx, "not-exist"))
t.Log(GetFromHeaders(ctx, "Accept")) t.Log(GetFromHeaders(ctx, "Accept"))
...@@ -81,7 +81,7 @@ func TestFieldRequestIDFromContext(t *testing.T) { ...@@ -81,7 +81,7 @@ func TestFieldRequestIDFromContext(t *testing.T) {
req, _ := http.NewRequest("GET", requestAddr+"/ping", nil) req, _ := http.NewRequest("GET", requestAddr+"/ping", nil)
req.Header.Add("Accept", "application/json") req.Header.Add("Accept", "application/json")
req.Header.Add("Accept", "text/html") req.Header.Add("Accept", "text/html")
req.Header.Set(ctxUtil.HeaderXRequestIDKey, "2ab996de-cc03-412d-ba0a-79596efa6947") req.Header.Set(ctxUtil.HeaderXRequestIDKey.String(), "2ab996de-cc03-412d-ba0a-79596efa6947")
resp, err := http.DefaultClient.Do(req) resp, err := http.DefaultClient.Do(req)
assert.NoError(t, err) assert.NoError(t, err)
defer resp.Body.Close() defer resp.Body.Close()
......
...@@ -36,7 +36,7 @@ func TestTracing(t *testing.T) { ...@@ -36,7 +36,7 @@ func TestTracing(t *testing.T) {
time.Sleep(time.Millisecond * 200) time.Sleep(time.Millisecond * 200)
result := &httpcli.StdResult{} result := &httpcli.StdResult{}
err := httpcli.Get(context.Background(), result, requestAddr+"/hello") err := httpcli.New().SetURL(requestAddr + "/hello").GET(context.Background()).BindJSON(result).Err()
assert.NoError(t, err) assert.NoError(t, err)
t.Log(result) t.Log(result)
} }
......
...@@ -57,20 +57,21 @@ func runResponseHTTPServer() string { ...@@ -57,20 +57,21 @@ func runResponseHTTPServer() string {
func TestRespond(t *testing.T) { func TestRespond(t *testing.T) {
requestAddr := runResponseHTTPServer() requestAddr := runResponseHTTPServer()
var err error
result := &httpcli.StdResult{} result := &httpcli.StdResult{}
err := httpcli.Get(context.Background(), result, requestAddr+"/success") err = httpcli.New().GET(context.Background()).SetURL(requestAddr + "/success").BindJSON(result).Err()
assert.NoError(t, err) assert.NoError(t, err)
assert.NotEmpty(t, result.Data) assert.NotEmpty(t, result.Data)
result = &httpcli.StdResult{} result = &httpcli.StdResult{}
err = httpcli.Get(context.Background(), result, requestAddr+"/error") err = httpcli.New().GET(context.Background()).SetURL(requestAddr + "/error").BindJSON(result).Err()
assert.NoError(t, err) assert.NoError(t, err)
assert.NotEqual(t, errcode.Success.Code(), result.Code) assert.NotEqual(t, errcode.Success.Code(), result.Code)
for _, code := range httpResponseCodes { for _, code := range httpResponseCodes {
result := &httpcli.StdResult{} result := &httpcli.StdResult{}
url := fmt.Sprintf("%s/code/%d", requestAddr, code) url := fmt.Sprintf("%s/code/%d", requestAddr, code)
err := httpcli.Get(context.Background(), result, url) err := httpcli.New().GET(context.Background()).SetURL(url).BindJSON(result).Err()
if code == http.StatusOK { if code == http.StatusOK {
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, http.StatusOK, result.Code) assert.Equal(t, http.StatusOK, result.Code)
...@@ -81,7 +82,7 @@ func TestRespond(t *testing.T) { ...@@ -81,7 +82,7 @@ func TestRespond(t *testing.T) {
for _, out := range outs { for _, out := range outs {
result := &httpcli.StdResult{} result := &httpcli.StdResult{}
url := fmt.Sprintf("%s/out/code/%d", requestAddr, out.ToHTTPCode()) url := fmt.Sprintf("%s/out/code/%d", requestAddr, out.ToHTTPCode())
err := httpcli.Get(context.Background(), result, url) err := httpcli.New().GET(context.Background()).SetURL(url).BindJSON(result).Err()
if out.ToHTTPCode() == http.StatusOK { if out.ToHTTPCode() == http.StatusOK {
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, http.StatusOK, result.Code) assert.Equal(t, http.StatusOK, result.Code)
......
...@@ -58,7 +58,7 @@ func customVerifyHandler(claims *jwt.CustomClaims, tokenTail32 string) error { ...@@ -58,7 +58,7 @@ func customVerifyHandler(claims *jwt.CustomClaims, tokenTail32 string) error {
func TestJwtVerify(t *testing.T) { func TestJwtVerify(t *testing.T) {
jwt.Init() jwt.Init()
ctx := context.Background() ctx := context.Background()
token, _ := jwt.GenerateToken(expectedUid, expectedName) token, _, _ := jwt.GenerateToken(expectedUid, expectedName)
// success test // success test
ctx = metadata.NewIncomingContext(ctx, metadata.MD{headerAuthorize: []string{GetAuthorization(token)}}) ctx = metadata.NewIncomingContext(ctx, metadata.MD{headerAuthorize: []string{GetAuthorization(token)}})
...@@ -130,7 +130,7 @@ func TestUnaryServerJwtAuth(t *testing.T) { ...@@ -130,7 +130,7 @@ func TestUnaryServerJwtAuth(t *testing.T) {
// mock client ctx // mock client ctx
jwt.Init() jwt.Init()
token, _ := jwt.GenerateToken(expectedUid, expectedName) token, _, _ := jwt.GenerateToken(expectedUid, expectedName)
ctx := metadata.NewIncomingContext(context.Background(), metadata.MD{headerAuthorize: []string{GetAuthorization(token)}}) ctx := metadata.NewIncomingContext(context.Background(), metadata.MD{headerAuthorize: []string{GetAuthorization(token)}})
_, err := interceptor(ctx, nil, unaryServerInfo, unaryServerHandler) _, err := interceptor(ctx, nil, unaryServerInfo, unaryServerHandler)
...@@ -163,7 +163,7 @@ func TestStreamServerJwtAuth(t *testing.T) { ...@@ -163,7 +163,7 @@ func TestStreamServerJwtAuth(t *testing.T) {
assert.NotNil(t, interceptor) assert.NotNil(t, interceptor)
jwt.Init() jwt.Init()
token, _ := jwt.GenerateToken(expectedUid, expectedName) token, _, _ := jwt.GenerateToken(expectedUid, expectedName)
ctx := metadata.NewIncomingContext(context.Background(), metadata.MD{headerAuthorize: []string{authScheme + " " + token}}) ctx := metadata.NewIncomingContext(context.Background(), metadata.MD{headerAuthorize: []string{authScheme + " " + token}})
err := interceptor(nil, newStreamServer(ctx), streamServerInfo, streamServerHandler) err := interceptor(nil, newStreamServer(ctx), streamServerInfo, streamServerHandler)
assert.NoError(t, err) assert.NoError(t, err)
...@@ -225,7 +225,7 @@ func TestAuthOptions(t *testing.T) { ...@@ -225,7 +225,7 @@ func TestAuthOptions(t *testing.T) {
func TestSetJWTTokenToCtx(t *testing.T) { func TestSetJWTTokenToCtx(t *testing.T) {
jwt.Init() jwt.Init()
ctx := context.Background() ctx := context.Background()
token, _ := jwt.GenerateToken(expectedUid, expectedName) token, _, _ := jwt.GenerateToken(expectedUid, expectedName)
expected := []string{GetAuthorization(token)} expected := []string{GetAuthorization(token)}
ctx = SetJwtTokenToCtx(ctx, token) ctx = SetJwtTokenToCtx(ctx, token)
...@@ -236,7 +236,7 @@ func TestSetJWTTokenToCtx(t *testing.T) { ...@@ -236,7 +236,7 @@ func TestSetJWTTokenToCtx(t *testing.T) {
func TestSetAuthToCtx(t *testing.T) { func TestSetAuthToCtx(t *testing.T) {
jwt.Init() jwt.Init()
ctx := context.Background() ctx := context.Background()
token, _ := jwt.GenerateToken(expectedUid, expectedName) token, _, _ := jwt.GenerateToken(expectedUid, expectedName)
authorization := GetAuthorization(token) authorization := GetAuthorization(token)
expected := []string{authorization} expected := []string{authorization}
......
...@@ -27,27 +27,28 @@ type Claims struct { ...@@ -27,27 +27,28 @@ type Claims struct {
} }
// GenerateToken generate token by uid and name, use universal Claims // GenerateToken generate token by uid and name, use universal Claims
func GenerateToken(uid string, name ...string) (string, error) { func GenerateToken(uid string, name string) (string, time.Time, error) {
expireAt := time.Now()
if opt == nil { if opt == nil {
return "", errInit return "", expireAt, errInit
}
nameVal := ""
if len(name) > 0 {
nameVal = name[0]
} }
expireAt = time.Now().Add(opt.expire)
claims := Claims{ claims := Claims{
uid, uid,
nameVal, name,
jwt.RegisteredClaims{ jwt.RegisteredClaims{
ExpiresAt: jwt.NewNumericDate(time.Now().Add(opt.expire)), ExpiresAt: jwt.NewNumericDate(expireAt),
IssuedAt: jwt.NewNumericDate(time.Now()), IssuedAt: jwt.NewNumericDate(time.Now()),
Issuer: opt.issuer, Issuer: opt.issuer,
}, },
} }
token := jwt.NewWithClaims(opt.signingMethod, claims) token := jwt.NewWithClaims(opt.signingMethod, claims)
return token.SignedString(opt.signingKey) tk, err := token.SignedString(opt.signingKey)
if err != nil {
return tk, expireAt, err
}
return tk, expireAt, nil
} }
// ParseToken parse token, return universal Claims // ParseToken parse token, return universal Claims
......
...@@ -11,11 +11,11 @@ import ( ...@@ -11,11 +11,11 @@ import (
func TestGenerateToken(t *testing.T) { func TestGenerateToken(t *testing.T) {
opt = nil opt = nil
token, err := GenerateToken("123") token, _, err := GenerateToken("123", "")
assert.Error(t, err) assert.Error(t, err)
Init() Init()
token, err = GenerateToken("123") token, _, err = GenerateToken("123", "")
assert.NoError(t, err) assert.NoError(t, err)
v, err := ParseToken(token) v, err := ParseToken(token)
...@@ -47,7 +47,7 @@ func TestParseToken(t *testing.T) { ...@@ -47,7 +47,7 @@ func TestParseToken(t *testing.T) {
) )
// success // success
token, err := GenerateToken(uid, name) token, _, err := GenerateToken(uid, name)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
...@@ -69,7 +69,7 @@ func TestParseToken(t *testing.T) { ...@@ -69,7 +69,7 @@ func TestParseToken(t *testing.T) {
assert.Error(t, err) assert.Error(t, err)
// token has expired // token has expired
token, err = GenerateToken(uid, name) token, _, err = GenerateToken(uid, name)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
......
package dxsf
import (
"context"
"errors"
"fmt"
"net/http"
"os"
"time"
"gitlab.wanzhuangkj.com/tush/xpkg/httpcli"
"gitlab.wanzhuangkj.com/tush/xpkg/utils/xsf"
)
var (
host string
httpClient = &client{
cli: httpcli.NewClient(
&http.Client{
Transport: &http.Transport{
MaxIdleConnsPerHost: 4,
MaxIdleConns: 4,
IdleConnTimeout: 90 * time.Second,
},
}),
}
)
type client struct {
cli *httpcli.Client
}
func init() {
host = os.Getenv("XSF_HOST")
}
func GenerateApiID(ctx context.Context, bizTag string) (xsf.ID, error) {
url := fmt.Sprintf(`http://%s/api/leaf?biz_tag=%s`, host, bizTag)
reply := &IDReply{}
if err := httpClient.cli.NewRequest().SetRetry(3).SetContentType("application/json").SetURL(url).GET(ctx).BindJSON(reply).Err(); err != nil {
return xsf.ID(0), err
}
if reply.Code == 0 {
return xsf.ParseInt64(reply.Data.ID), nil
}
return xsf.ID(0), errors.New(reply.Msg)
}
type IDReply struct {
Code int `json:"code"`
Data struct {
ID int64 `json:"ID"`
} `json:"data"`
Msg string `json:"msg"`
}
...@@ -2,13 +2,16 @@ package xsf ...@@ -2,13 +2,16 @@ package xsf
import ( import (
"fmt" "fmt"
"os"
"strconv" "strconv"
"github.com/bwmarrin/snowflake" "github.com/bwmarrin/snowflake"
"gitlab.wanzhuangkj.com/tush/xpkg/xerrors/xerror" "gitlab.wanzhuangkj.com/tush/xpkg/xerrors/xerror"
) )
var node *snowflake.Node var (
node *snowflake.Node
)
type ID snowflake.ID type ID snowflake.ID
...@@ -66,33 +69,32 @@ func (j JSONSyntaxError) Error() string { ...@@ -66,33 +69,32 @@ func (j JSONSyntaxError) Error() string {
} }
// n [1,1023] // n [1,1023]
func Init(n int64) (err error) { func init() {
node, err = snowflake.NewNode(n) n, e := strconv.ParseInt(os.Getenv("XSF_NODE"), 10, 64)
if err != nil { if e != nil {
return err panic(e)
} }
return nil nod, e := snowflake.NewNode(n)
} if e != nil {
panic(e)
func Generate() ID { }
return ID(node.Generate()) node = nod
} }
func (x ID) String() string { func (x ID) String() string {
return snowflake.ID(x).String() return snowflake.ID(x).String()
} }
func (x ID) ToInt64() int64 { func (x ID) Int64() int64 {
return snowflake.ID(x).Int64() return snowflake.ID(x).Int64()
} }
func (x ID) ToInt() int { func (x ID) Int() int {
return int(snowflake.ID(x).Int64()) return int(snowflake.ID(x).Int64())
} }
func GenerateID() ID { func GenerateID() ID {
sid := Generate() return ID(node.Generate())
return ID(sid)
} }
func ParseInt64(val int64) ID { func ParseInt64(val int64) ID {
......
...@@ -36,8 +36,7 @@ func TestID_MarshalJSON(t *testing.T) { ...@@ -36,8 +36,7 @@ func TestID_MarshalJSON(t *testing.T) {
} }
func TestID_String(t *testing.T) { func TestID_String(t *testing.T) {
Init(10)
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
fmt.Println(Generate().String()) fmt.Println(GenerateID().String())
} }
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论