diff --git a/Makefile b/Makefile index 77ee21a82..79e6cda2e 100644 --- a/Makefile +++ b/Makefile @@ -89,7 +89,7 @@ test: .PHONY: test-coverage test-coverage: @${TOOLS_SHELL} test_coverage - @echo "go test with coverage finished" + @echo "go test with coverage finished" .PHONY: lint lint: $(LINTER) diff --git a/transport/http/client_test.go b/transport/http/client_test.go index 9a0dd7829..119c8c0bf 100644 --- a/transport/http/client_test.go +++ b/transport/http/client_test.go @@ -10,13 +10,12 @@ import ( "io" "log" "net/http" - nethttp "net/http" "reflect" "strconv" "testing" "time" - kratosErrors "github.com/go-kratos/kratos/v2/errors" + kratoserrors "github.com/go-kratos/kratos/v2/errors" "github.com/go-kratos/kratos/v2/middleware" "github.com/go-kratos/kratos/v2/registry" "github.com/go-kratos/kratos/v2/selector" @@ -24,7 +23,7 @@ import ( type mockRoundTripper struct{} -func (rt *mockRoundTripper) RoundTrip(req *nethttp.Request) (resp *nethttp.Response, err error) { +func (rt *mockRoundTripper) RoundTrip(req *http.Request) (resp *http.Response, err error) { return } @@ -129,7 +128,7 @@ func TestWithRequestEncoder(t *testing.T) { func TestWithResponseDecoder(t *testing.T) { o := &clientOptions{} - v := func(ctx context.Context, res *nethttp.Response, out interface{}) error { return nil } + v := func(ctx context.Context, res *http.Response, out interface{}) error { return nil } WithResponseDecoder(v)(o) if o.decoder == nil { t.Errorf("expected encoder to be not nil") @@ -138,7 +137,7 @@ func TestWithResponseDecoder(t *testing.T) { func TestWithErrorDecoder(t *testing.T) { o := &clientOptions{} - v := func(ctx context.Context, res *nethttp.Response) error { return nil } + v := func(ctx context.Context, res *http.Response) error { return nil } WithErrorDecoder(v)(o) if o.errorDecoder == nil { t.Errorf("expected encoder to be not nil") @@ -199,27 +198,24 @@ func TestWithNodeFilter(t *testing.T) { } func TestDefaultRequestEncoder(t *testing.T) { - req1 := &nethttp.Request{ - Header: make(nethttp.Header), - Body: io.NopCloser(bytes.NewBufferString("{\"a\":\"1\", \"b\": 2}")), - } - req1.Header.Set("Content-Type", "application/xml") + r, _ := http.NewRequest(http.MethodPost, "", io.NopCloser(bytes.NewBufferString(`{"a":"1", "b": 2}`))) + r.Header.Set("Content-Type", "application/xml") v1 := &struct { A string `json:"a"` B int64 `json:"b"` }{"a", 1} - b, err1 := DefaultRequestEncoder(context.TODO(), "application/json", v1) - if err1 != nil { - t.Errorf("expected no error, got %v", err1) + b, err := DefaultRequestEncoder(context.TODO(), "application/json", v1) + if err != nil { + t.Fatal(err) } v1b := &struct { A string `json:"a"` B int64 `json:"b"` }{} - err1 = json.Unmarshal(b, v1b) - if err1 != nil { - t.Errorf("expected no error, got %v", err1) + err = json.Unmarshal(b, v1b) + if err != nil { + t.Fatal(err) } if !reflect.DeepEqual(v1b, v1) { t.Errorf("expected %v, got %v", v1, v1b) @@ -227,8 +223,8 @@ func TestDefaultRequestEncoder(t *testing.T) { } func TestDefaultResponseDecoder(t *testing.T) { - resp1 := &nethttp.Response{ - Header: make(nethttp.Header), + resp1 := &http.Response{ + Header: make(http.Header), StatusCode: 200, Body: io.NopCloser(bytes.NewBufferString("{\"a\":\"1\", \"b\": 2}")), } @@ -236,19 +232,19 @@ func TestDefaultResponseDecoder(t *testing.T) { A string `json:"a"` B int64 `json:"b"` }{} - err1 := DefaultResponseDecoder(context.TODO(), resp1, &v1) - if err1 != nil { - t.Errorf("expected no error, got %v", err1) + err := DefaultResponseDecoder(context.TODO(), resp1, &v1) + if err != nil { + t.Fatal(err) } - if !reflect.DeepEqual("1", v1.A) { + if v1.A != "1" { t.Errorf("expected %v, got %v", "1", v1.A) } - if !reflect.DeepEqual(int64(2), v1.B) { + if v1.B != int64(2) { t.Errorf("expected %v, got %v", 2, v1.B) } - resp2 := &nethttp.Response{ - Header: make(nethttp.Header), + resp2 := &http.Response{ + Header: make(http.Header), StatusCode: 200, Body: io.NopCloser(bytes.NewBufferString("{badjson}")), } @@ -256,22 +252,22 @@ func TestDefaultResponseDecoder(t *testing.T) { A string `json:"a"` B int64 `json:"b"` }{} - err2 := DefaultResponseDecoder(context.TODO(), resp2, &v2) - terr1 := &json.SyntaxError{} - if !errors.As(err2, &terr1) { - t.Errorf("expected %v, got %v", terr1, err2) + err = DefaultResponseDecoder(context.TODO(), resp2, &v2) + syntaxErr := &json.SyntaxError{} + if !errors.As(err, &syntaxErr) { + t.Errorf("expected %v, got %v", syntaxErr, err) } } func TestDefaultErrorDecoder(t *testing.T) { for i := 200; i < 300; i++ { - resp := &nethttp.Response{Header: make(nethttp.Header), StatusCode: i} + resp := &http.Response{Header: make(http.Header), StatusCode: i} if DefaultErrorDecoder(context.TODO(), resp) != nil { t.Errorf("expected no error, got %v", DefaultErrorDecoder(context.TODO(), resp)) } } - resp1 := &nethttp.Response{ - Header: make(nethttp.Header), + resp1 := &http.Response{ + Header: make(http.Header), StatusCode: 300, Body: io.NopCloser(bytes.NewBufferString("{\"foo\":\"bar\"}")), } @@ -279,28 +275,28 @@ func TestDefaultErrorDecoder(t *testing.T) { t.Errorf("expected error, got nil") } - resp2 := &nethttp.Response{ - Header: make(nethttp.Header), + resp2 := &http.Response{ + Header: make(http.Header), StatusCode: 500, Body: io.NopCloser(bytes.NewBufferString("{\"code\":54321, \"message\": \"hi\", \"reason\": \"FOO\"}")), } - err2 := DefaultErrorDecoder(context.TODO(), resp2) - if err2 == nil { + err := DefaultErrorDecoder(context.TODO(), resp2) + if err == nil { t.Errorf("expected error, got nil") } - if !reflect.DeepEqual(int32(500), err2.(*kratosErrors.Error).Code) { - t.Errorf("expected %v, got %v", 500, err2.(*kratosErrors.Error).Code) + if err.(*kratoserrors.Error).Code != int32(500) { + t.Errorf("expected %v, got %v", 500, err.(*kratoserrors.Error).Code) } - if !reflect.DeepEqual("hi", err2.(*kratosErrors.Error).Message) { - t.Errorf("expected %v, got %v", "hi", err2.(*kratosErrors.Error).Message) + if err.(*kratoserrors.Error).Message != "hi" { + t.Errorf("expected %v, got %v", "hi", err.(*kratoserrors.Error).Message) } - if !reflect.DeepEqual("FOO", err2.(*kratosErrors.Error).Reason) { - t.Errorf("expected %v, got %v", "FOO", err2.(*kratosErrors.Error).Reason) + if err.(*kratoserrors.Error).Reason != "FOO" { + t.Errorf("expected %v, got %v", "FOO", err.(*kratoserrors.Error).Reason) } } func TestCodecForResponse(t *testing.T) { - resp := &nethttp.Response{Header: make(nethttp.Header)} + resp := &http.Response{Header: make(http.Header)} resp.Header.Set("Content-Type", "application/xml") c := CodecForResponse(resp) if !reflect.DeepEqual("xml", c.Name()) { @@ -346,7 +342,7 @@ func TestNewClient(t *testing.T) { }), ) if err != nil { - t.Error(err) + t.Fatal(err) } err = client.Invoke(context.Background(), http.MethodPost, "/go", map[string]string{"name": "kratos"}, nil, EmptyCallOption{}, &mockCallOption{}) diff --git a/transport/http/codec_test.go b/transport/http/codec_test.go index b701b70fc..8efd23322 100644 --- a/transport/http/codec_test.go +++ b/transport/http/codec_test.go @@ -3,53 +3,50 @@ package http import ( "bytes" "io" - nethttp "net/http" - "reflect" + "net/http" "testing" "github.com/go-kratos/kratos/v2/errors" ) func TestDefaultRequestDecoder(t *testing.T) { - bodyString := "{\"a\":\"1\", \"b\": 2}" - - req1 := &nethttp.Request{ - Header: make(nethttp.Header), - Body: io.NopCloser(bytes.NewBufferString(bodyString)), - } - req1.Header.Set("Content-Type", "application/json") + var ( + bodyStr = `{"a":"1", "b": 2}` + r, _ = http.NewRequest(http.MethodPost, "", io.NopCloser(bytes.NewBufferString(bodyStr))) + ) + r.Header.Set("Content-Type", "application/json") v1 := &struct { A string `json:"a"` B int64 `json:"b"` }{} - err1 := DefaultRequestDecoder(req1, &v1) - if err1 != nil { - t.Errorf("expected no error, got %v", err1) + err := DefaultRequestDecoder(r, &v1) + if err != nil { + t.Fatal(err) } - if !reflect.DeepEqual("1", v1.A) { + if v1.A != "1" { t.Errorf("expected %v, got %v", "1", v1.A) } - if !reflect.DeepEqual(int64(2), v1.B) { + if v1.B != int64(2) { t.Errorf("expected %v, got %v", 2, v1.B) } - data, err := io.ReadAll(req1.Body) + data, err := io.ReadAll(r.Body) if err != nil { - t.Errorf("expected no error, got %v", err1) + t.Fatal(err) } - if !reflect.DeepEqual([]byte(bodyString), data) { - t.Errorf("expected %v, got %v", bodyString, data) + if bodyStr != string(data) { + t.Errorf("expected %v, got %v", bodyStr, string(data)) } } type mockResponseWriter struct { StatusCode int Data []byte - header nethttp.Header + header http.Header } -func (w *mockResponseWriter) Header() nethttp.Header { +func (w *mockResponseWriter) Header() http.Header { return w.header } @@ -62,27 +59,28 @@ func (w *mockResponseWriter) WriteHeader(statusCode int) { w.StatusCode = statusCode } -type dataWithStatusCode struct { - A string `json:"a"` - B int64 `json:"b"` -} - func TestDefaultResponseEncoder(t *testing.T) { - w := &mockResponseWriter{StatusCode: 200, header: make(nethttp.Header)} - req1 := &nethttp.Request{ - Header: make(nethttp.Header), - } - req1.Header.Set("Content-Type", "application/json") - - v1 := &dataWithStatusCode{A: "1", B: 2} - err := DefaultResponseEncoder(w, req1, v1) + var ( + w = &mockResponseWriter{StatusCode: 200, header: make(http.Header)} + r, _ = http.NewRequest(http.MethodPost, "", nil) + v = &struct { + A string `json:"a"` + B int64 `json:"b"` + }{ + A: "1", + B: 2, + } + ) + r.Header.Set("Content-Type", "application/json") + + err := DefaultResponseEncoder(w, r, v) if err != nil { - t.Errorf("expected no error, got %v", err) + t.Fatal(err) } - if !reflect.DeepEqual("application/json", w.Header().Get("Content-Type")) { + if w.Header().Get("Content-Type") != "application/json" { t.Errorf("expected %v, got %v", "application/json", w.Header().Get("Content-Type")) } - if !reflect.DeepEqual(200, w.StatusCode) { + if w.StatusCode != 200 { t.Errorf("expected %v, got %v", 200, w.StatusCode) } if w.Data == nil { @@ -90,19 +88,19 @@ func TestDefaultResponseEncoder(t *testing.T) { } } -func TestDefaultResponseEncoderWithError(t *testing.T) { - w := &mockResponseWriter{header: make(nethttp.Header)} - req := &nethttp.Request{ - Header: make(nethttp.Header), - } - req.Header.Set("Content-Type", "application/json") +func TestDefaultErrorEncoder(t *testing.T) { + var ( + w = &mockResponseWriter{header: make(http.Header)} + r, _ = http.NewRequest(http.MethodPost, "", nil) + err = errors.New(511, "", "") + ) + r.Header.Set("Content-Type", "application/json") - se := errors.New(511, "", "") - DefaultErrorEncoder(w, req, se) - if !reflect.DeepEqual("application/json", w.Header().Get("Content-Type")) { + DefaultErrorEncoder(w, r, err) + if w.Header().Get("Content-Type") != "application/json" { t.Errorf("expected %v, got %v", "application/json", w.Header().Get("Content-Type")) } - if !reflect.DeepEqual(511, w.StatusCode) { + if w.StatusCode != 511 { t.Errorf("expected %v, got %v", 511, w.StatusCode) } if w.Data == nil { @@ -111,20 +109,20 @@ func TestDefaultResponseEncoderWithError(t *testing.T) { } func TestDefaultResponseEncoderEncodeNil(t *testing.T) { - w := &mockResponseWriter{StatusCode: 204, header: make(nethttp.Header)} - req1 := &nethttp.Request{ - Header: make(nethttp.Header), - } - req1.Header.Set("Content-Type", "application/json") + var ( + w = &mockResponseWriter{StatusCode: 204, header: make(http.Header)} + r, _ = http.NewRequest(http.MethodPost, "", io.NopCloser(bytes.NewBufferString(""))) + ) + r.Header.Set("Content-Type", "application/json") - err := DefaultResponseEncoder(w, req1, nil) + err := DefaultResponseEncoder(w, r, nil) if err != nil { - t.Errorf("expected no error, got %v", err) + t.Fatal(err) } - if !reflect.DeepEqual("", w.Header().Get("Content-Type")) { + if w.Header().Get("Content-Type") != "" { t.Errorf("expected empty string, got %v", w.Header().Get("Content-Type")) } - if !reflect.DeepEqual(204, w.StatusCode) { + if w.StatusCode != 204 { t.Errorf("expected %v, got %v", 204, w.StatusCode) } if w.Data != nil { @@ -133,31 +131,23 @@ func TestDefaultResponseEncoderEncodeNil(t *testing.T) { } func TestCodecForRequest(t *testing.T) { - req1 := &nethttp.Request{ - Header: make(nethttp.Header), - Body: io.NopCloser(bytes.NewBufferString("")), - } - req1.Header.Set("Content-Type", "application/xml") - - c, ok := CodecForRequest(req1, "Content-Type") + r, _ := http.NewRequest(http.MethodPost, "", io.NopCloser(bytes.NewBufferString(""))) + r.Header.Set("Content-Type", "application/xml") + c, ok := CodecForRequest(r, "Content-Type") if !ok { - t.Errorf("expected true, got %v", ok) + t.Fatalf("expected true, got %v", ok) } - if !reflect.DeepEqual("xml", c.Name()) { + if c.Name() != "xml" { t.Errorf("expected %v, got %v", "xml", c.Name()) } - req2 := &nethttp.Request{ - Header: make(nethttp.Header), - Body: io.NopCloser(bytes.NewBufferString("{\"a\":\"1\", \"b\": 2}")), - } - req2.Header.Set("Content-Type", "blablablabla") - - c, ok = CodecForRequest(req2, "Content-Type") + r, _ = http.NewRequest(http.MethodPost, "", io.NopCloser(bytes.NewBufferString(`{"a":"1", "b": 2}`))) + r.Header.Set("Content-Type", "blablablabla") + c, ok = CodecForRequest(r, "Content-Type") if ok { - t.Errorf("expected false, got %v", ok) + t.Fatalf("expected false, got %v", ok) } - if !reflect.DeepEqual("json", c.Name()) { + if c.Name() != "json" { t.Errorf("expected %v, got %v", "json", c.Name()) } }