github.com/cloudwego/kitex@v0.9.0/client/context_middleware_test.go (about) 1 /* 2 * Copyright 2022 CloudWeGo Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package client 18 19 import ( 20 "context" 21 "testing" 22 23 "github.com/golang/mock/gomock" 24 25 "github.com/cloudwego/kitex/internal/mocks" 26 "github.com/cloudwego/kitex/internal/test" 27 "github.com/cloudwego/kitex/pkg/endpoint" 28 ) 29 30 func TestContextMiddlewares(t *testing.T) { 31 ctx := context.Background() 32 var mw endpoint.Middleware = func(next endpoint.Endpoint) endpoint.Endpoint { 33 return func(ctx context.Context, req, resp interface{}) (err error) { 34 return next(ctx, req, resp) 35 } 36 } 37 38 cmw := getContextMiddleware(ctx) 39 test.Assert(t, cmw == nil) 40 ctx = WithContextMiddlewares(ctx, mw) 41 cmw = getContextMiddleware(ctx) 42 test.Assert(t, cmw != nil) 43 } 44 45 func TestCallWithContextMiddlewares(t *testing.T) { 46 ctrl := gomock.NewController(t) 47 defer ctrl.Finish() 48 49 mtd := mocks.MockMethod 50 var beforeCall, afterCall int 51 var mw1 endpoint.Middleware = func(next endpoint.Endpoint) endpoint.Endpoint { 52 return func(ctx context.Context, req, resp interface{}) (err error) { 53 beforeCall++ 54 err = next(ctx, req, resp) 55 afterCall++ 56 return err 57 } 58 } 59 var mw2 endpoint.Middleware = func(next endpoint.Endpoint) endpoint.Endpoint { 60 return func(ctx context.Context, req, resp interface{}) (err error) { 61 beforeCall++ 62 err = next(ctx, req, resp) 63 afterCall++ 64 return err 65 } 66 } 67 68 ctx := context.Background() 69 cli := newMockClient(t, ctrl) 70 req, res := new(MockTStruct), new(MockTStruct) 71 err := cli.Call(ctx, mtd, req, res) 72 test.Assert(t, err == nil) 73 test.Assert(t, beforeCall == 0) 74 test.Assert(t, afterCall == 0) 75 76 ctx = WithContextMiddlewares(ctx, mw1) 77 err = cli.Call(ctx, mtd, req, res) 78 test.Assert(t, err == nil) 79 test.Assert(t, beforeCall == 1) 80 test.Assert(t, afterCall == 1) 81 82 beforeCall = 0 83 afterCall = 0 84 ctx = WithContextMiddlewares(ctx, mw2) 85 err = cli.Call(ctx, mtd, req, res) 86 test.Assert(t, err == nil) 87 test.Assert(t, beforeCall == 2) 88 test.Assert(t, afterCall == 2) 89 }