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  }