diff --git a/tests/integration/clientv3/naming/resolver_test.go b/tests/integration/clientv3/naming/resolver_test.go index 40dc177214b..6e898318f1a 100644 --- a/tests/integration/clientv3/naming/resolver_test.go +++ b/tests/integration/clientv3/naming/resolver_test.go @@ -33,7 +33,7 @@ import ( integration2 "go.etcd.io/etcd/tests/v3/framework/integration" ) -func testEtcdGRPCResolver(t *testing.T, lbPolicy string) { +func testEtcdGRPCResolver(t *testing.T, lbPolicy string, meta any) { // Setup two new dummy stub servers payloadBody := []byte{'1'} s1 := grpctesting.NewDummyStubServer(payloadBody) @@ -57,8 +57,14 @@ func testEtcdGRPCResolver(t *testing.T, lbPolicy string) { t.Fatal("failed to create EndpointManager", err) } - e1 := endpoints.Endpoint{Addr: s1.Addr()} - e2 := endpoints.Endpoint{Addr: s2.Addr()} + e1 := endpoints.Endpoint{ + Addr: s1.Addr(), + Metadata: meta, + } + e2 := endpoints.Endpoint{ + Addr: s2.Addr(), + Metadata: meta, + } err = em.AddEndpoint(context.TODO(), "foo/e1", e1) if err != nil { @@ -130,7 +136,7 @@ func TestEtcdGrpcResolverPickFirst(t *testing.T) { integration2.BeforeTest(t) // Pick first is the default load balancer policy for grpc-go - testEtcdGRPCResolver(t, "pick_first") + testEtcdGRPCResolver(t, "pick_first", nil) } // TestEtcdGrpcResolverRoundRobin mimics scenarios described in grpc_naming.md doc. @@ -138,7 +144,34 @@ func TestEtcdGrpcResolverRoundRobin(t *testing.T) { integration2.BeforeTest(t) // Round robin is a common alternative for more production oriented scenarios - testEtcdGRPCResolver(t, "round_robin") + testEtcdGRPCResolver(t, "round_robin", nil) +} + +type testMetaInfo struct { + ServerName string + Metadata any +} + +// TestEtcdGrpcResolverPickFirstWithMetaInfo mimics scenarios described in grpc_naming.md doc. +func TestEtcdGrpcResolverPickFirstWithMetaInfo(t *testing.T) { + integration2.BeforeTest(t) + + // Pick first is the default load balancer policy for grpc-go + testEtcdGRPCResolver(t, "pick_first", &testMetaInfo{ + ServerName: "s1", + Metadata: "testMeta", + }) +} + +// TestEtcdGrpcResolverRoundRobinWithMetaInfo mimics scenarios described in grpc_naming.md doc. +func TestEtcdGrpcResolverRoundRobinWithMetaInfo(t *testing.T) { + integration2.BeforeTest(t) + + // Round robin is a common alternative for more production oriented scenarios + testEtcdGRPCResolver(t, "round_robin", &testMetaInfo{ + ServerName: "s1", + Metadata: "testMeta", + }) } func TestEtcdEndpointManager(t *testing.T) {