github.com/qiniu/go-sdk/v7@v7.27.0/internal/clientv2/client_test.go (about) 1 //go:build unit 2 // +build unit 3 4 package clientv2 5 6 import ( 7 "fmt" 8 "net/http" 9 "testing" 10 ) 11 12 const headerKey = "request" 13 14 type testClient struct { 15 statusCode int 16 } 17 18 func (t testClient) Do(req *http.Request) (*http.Response, error) { 19 value := req.Header.Get(headerKey) 20 value += " -> Do" 21 req.Header.Set(headerKey, value) 22 fmt.Printf("=== Client Do ===\n") 23 return &http.Response{ 24 Request: req, 25 StatusCode: t.statusCode, 26 Header: req.Header, 27 }, nil 28 } 29 30 func TestInterceptor(t *testing.T) { 31 // 不配置拦截器 32 c := NewClient(&testClient{}) 33 resp, _ := c.Do(&http.Request{ 34 Header: http.Header{}, 35 }) 36 37 v := resp.Header.Get(headerKey) 38 if v != " -> Do" { 39 t.Fatal() 40 } 41 42 // 配置多个拦截器 43 interceptor01 := NewSimpleInterceptor(func(req *http.Request, handler Handler) (*http.Response, error) { 44 value := req.Header.Get(headerKey) 45 value += " -> request-01" 46 req.Header.Set(headerKey, value) 47 48 rep, err := handler(req) 49 50 value = rep.Header.Get(headerKey) 51 value += " -> response-01" 52 rep.Header.Set(headerKey, value) 53 return rep, err 54 }) 55 56 interceptor02 := NewSimpleInterceptor(func(req *http.Request, handler Handler) (*http.Response, error) { 57 value := req.Header.Get(headerKey) 58 value += " -> request-02" 59 req.Header.Set(headerKey, value) 60 61 rep, err := handler(req) 62 63 value = rep.Header.Get(headerKey) 64 value += " -> response-02" 65 rep.Header.Set(headerKey, value) 66 return rep, err 67 }) 68 69 interceptor03 := NewSimpleInterceptor(func(req *http.Request, handler Handler) (*http.Response, error) { 70 value := req.Header.Get(headerKey) 71 value += " -> request-03" 72 req.Header.Set(headerKey, value) 73 74 rep, err := handler(req) 75 76 value = rep.Header.Get(headerKey) 77 value += " -> response-03" 78 rep.Header.Set(headerKey, value) 79 return rep, err 80 }) 81 82 c = NewClient(&testClient{}, interceptor01, interceptor02, interceptor03) 83 resp, _ = c.Do(&http.Request{ 84 Header: http.Header{}, 85 }) 86 87 v = resp.Header.Get(headerKey) 88 if v != " -> request-01 -> request-02 -> request-03 -> Do -> response-03 -> response-02 -> response-01" { 89 t.Fatalf("Unexpected header value: %s", v) 90 } 91 }