gitee.com/sasukebo/go-micro/v4@v4.7.1/util/wrapper/wrapper_test.go (about) 1 package wrapper 2 3 import ( 4 "context" 5 "reflect" 6 "testing" 7 8 "gitee.com/sasukebo/go-micro/v4/auth" 9 "gitee.com/sasukebo/go-micro/v4/client" 10 "gitee.com/sasukebo/go-micro/v4/metadata" 11 "gitee.com/sasukebo/go-micro/v4/server" 12 ) 13 14 func TestWrapper(t *testing.T) { 15 testData := []struct { 16 existing metadata.Metadata 17 headers metadata.Metadata 18 overwrite bool 19 }{ 20 { 21 existing: metadata.Metadata{}, 22 headers: metadata.Metadata{ 23 "Foo": "bar", 24 }, 25 overwrite: true, 26 }, 27 { 28 existing: metadata.Metadata{ 29 "Foo": "bar", 30 }, 31 headers: metadata.Metadata{ 32 "Foo": "baz", 33 }, 34 overwrite: false, 35 }, 36 } 37 38 for _, d := range testData { 39 c := &fromServiceWrapper{ 40 headers: d.headers, 41 } 42 43 ctx := metadata.NewContext(context.Background(), d.existing) 44 ctx = c.setHeaders(ctx) 45 md, _ := metadata.FromContext(ctx) 46 47 for k, v := range d.headers { 48 if d.overwrite && md[k] != v { 49 t.Fatalf("Expected %s=%s got %s=%s", k, v, k, md[k]) 50 } 51 if !d.overwrite && md[k] != d.existing[k] { 52 t.Fatalf("Expected %s=%s got %s=%s", k, d.existing[k], k, md[k]) 53 } 54 } 55 } 56 } 57 58 type testAuth struct { 59 verifyCount int 60 inspectCount int 61 namespace string 62 inspectAccount *auth.Account 63 verifyError error 64 65 auth.Auth 66 } 67 68 func (a *testAuth) Verify(acc *auth.Account, res *auth.Resource, opts ...auth.VerifyOption) error { 69 a.verifyCount = a.verifyCount + 1 70 return a.verifyError 71 } 72 73 func (a *testAuth) Inspect(token string) (*auth.Account, error) { 74 a.inspectCount = a.inspectCount + 1 75 return a.inspectAccount, nil 76 } 77 78 func (a *testAuth) Options() auth.Options { 79 return auth.Options{Namespace: a.namespace} 80 } 81 82 type testRequest struct { 83 service string 84 endpoint string 85 86 server.Request 87 } 88 89 func (r testRequest) Service() string { 90 return r.service 91 } 92 93 func (r testRequest) Endpoint() string { 94 return r.endpoint 95 } 96 97 type testClient struct { 98 callCount int 99 callRsp interface{} 100 client.Client 101 } 102 103 func (c *testClient) Call(ctx context.Context, req client.Request, rsp interface{}, opts ...client.CallOption) error { 104 c.callCount++ 105 106 if c.callRsp != nil { 107 val := reflect.ValueOf(rsp).Elem() 108 val.Set(reflect.ValueOf(c.callRsp).Elem()) 109 } 110 111 return nil 112 } 113 114 type testRsp struct { 115 value string 116 }