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  }