...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package clientv3
16
17 import (
18 "context"
19 "reflect"
20 "testing"
21
22 "go.etcd.io/etcd/api/v3/v3rpc/rpctypes"
23 "go.etcd.io/etcd/api/v3/version"
24 "google.golang.org/grpc/metadata"
25 )
26
27 func TestMetadataWithRequireLeader(t *testing.T) {
28 ctx := context.TODO()
29 _, ok := metadata.FromOutgoingContext(ctx)
30 if ok {
31 t.Fatal("expected no outgoing metadata ctx key")
32 }
33
34
35 md := metadata.Pairs(rpctypes.MetadataRequireLeaderKey, "invalid")
36
37 md.Set("hello", "1", "2")
38 ctx = metadata.NewOutgoingContext(ctx, md)
39
40
41 ctx = WithRequireLeader(ctx)
42 md, ok = metadata.FromOutgoingContext(ctx)
43 if !ok {
44 t.Fatal("expected outgoing metadata ctx key")
45 }
46 if ss := md.Get(rpctypes.MetadataRequireLeaderKey); !reflect.DeepEqual(ss, []string{rpctypes.MetadataHasLeader}) {
47 t.Fatalf("unexpected metadata for %q %v", rpctypes.MetadataRequireLeaderKey, ss)
48 }
49 if ss := md.Get("hello"); !reflect.DeepEqual(ss, []string{"1", "2"}) {
50 t.Fatalf("unexpected metadata for 'hello' %v", ss)
51 }
52 }
53
54 func TestMetadataWithClientAPIVersion(t *testing.T) {
55 ctx := withVersion(WithRequireLeader(context.TODO()))
56
57 md, ok := metadata.FromOutgoingContext(ctx)
58 if !ok {
59 t.Fatal("expected outgoing metadata ctx key")
60 }
61 if ss := md.Get(rpctypes.MetadataRequireLeaderKey); !reflect.DeepEqual(ss, []string{rpctypes.MetadataHasLeader}) {
62 t.Fatalf("unexpected metadata for %q %v", rpctypes.MetadataRequireLeaderKey, ss)
63 }
64 if ss := md.Get(rpctypes.MetadataClientAPIVersionKey); !reflect.DeepEqual(ss, []string{version.APIVersion}) {
65 t.Fatalf("unexpected metadata for %q %v", rpctypes.MetadataClientAPIVersionKey, ss)
66 }
67 }
68
View as plain text