go-micro.dev/v5@v5.12.0/metadata/metadata_test.go (about)

     1  package metadata
     2  
     3  import (
     4  	"context"
     5  	"reflect"
     6  	"testing"
     7  )
     8  
     9  func TestMetadataSet(t *testing.T) {
    10  	ctx := Set(context.TODO(), "Key", "val")
    11  
    12  	val, ok := Get(ctx, "Key")
    13  	if !ok {
    14  		t.Fatal("key Key not found")
    15  	}
    16  	if val != "val" {
    17  		t.Errorf("key Key with value val != %v", val)
    18  	}
    19  }
    20  
    21  func TestMetadataDelete(t *testing.T) {
    22  	md := Metadata{
    23  		"Foo": "bar",
    24  		"Baz": "empty",
    25  	}
    26  
    27  	ctx := NewContext(context.TODO(), md)
    28  	ctx = Delete(ctx, "Baz")
    29  
    30  	emd, ok := FromContext(ctx)
    31  	if !ok {
    32  		t.Fatal("key Key not found")
    33  	}
    34  
    35  	_, ok = emd["Baz"]
    36  	if ok {
    37  		t.Fatal("key Baz not deleted")
    38  	}
    39  }
    40  
    41  func TestMetadataCopy(t *testing.T) {
    42  	md := Metadata{
    43  		"Foo": "bar",
    44  		"bar": "baz",
    45  	}
    46  
    47  	cp := Copy(md)
    48  
    49  	for k, v := range md {
    50  		if cv := cp[k]; cv != v {
    51  			t.Fatalf("Got %s:%s for %s:%s", k, cv, k, v)
    52  		}
    53  	}
    54  }
    55  
    56  func TestMetadataContext(t *testing.T) {
    57  	md := Metadata{
    58  		"Foo": "bar",
    59  	}
    60  
    61  	ctx := NewContext(context.TODO(), md)
    62  
    63  	emd, ok := FromContext(ctx)
    64  	if !ok {
    65  		t.Errorf("Unexpected error retrieving metadata, got %t", ok)
    66  	}
    67  
    68  	if emd["Foo"] != md["Foo"] {
    69  		t.Errorf("Expected key: %s val: %s, got key: %s val: %s", "Foo", md["Foo"], "Foo", emd["Foo"])
    70  	}
    71  
    72  	if i := len(emd); i != 1 {
    73  		t.Errorf("Expected metadata length 1 got %d", i)
    74  	}
    75  }
    76  
    77  func TestMergeContext(t *testing.T) {
    78  	type args struct {
    79  		existing  Metadata
    80  		append    Metadata
    81  		overwrite bool
    82  	}
    83  	tests := []struct {
    84  		name string
    85  		args args
    86  		want Metadata
    87  	}{
    88  		{
    89  			name: "matching key, overwrite false",
    90  			args: args{
    91  				existing:  Metadata{"Foo": "bar", "Sumo": "demo"},
    92  				append:    Metadata{"Sumo": "demo2"},
    93  				overwrite: false,
    94  			},
    95  			want: Metadata{"Foo": "bar", "Sumo": "demo"},
    96  		},
    97  		{
    98  			name: "matching key, overwrite true",
    99  			args: args{
   100  				existing:  Metadata{"Foo": "bar", "Sumo": "demo"},
   101  				append:    Metadata{"Sumo": "demo2"},
   102  				overwrite: true,
   103  			},
   104  			want: Metadata{"Foo": "bar", "Sumo": "demo2"},
   105  		},
   106  	}
   107  	for _, tt := range tests {
   108  		t.Run(tt.name, func(t *testing.T) {
   109  			if got, _ := FromContext(MergeContext(NewContext(context.TODO(), tt.args.existing), tt.args.append, tt.args.overwrite)); !reflect.DeepEqual(got, tt.want) {
   110  				t.Errorf("MergeContext() = %v, want %v", got, tt.want)
   111  			}
   112  		})
   113  	}
   114  }