@@ -1304,7 +1304,7 @@ func setupManagementServerAndResolver(t *testing.T) (*e2e.ManagementServer, reso
13041304
13051305// configureXDSResources configures the management server with a route that
13061306// enables auto_host_rewrite and an endpoint with the specified hostname.
1307- func configureXDSResources (ctx context.Context , t * testing.T , mgmtServer * e2e.ManagementServer , nodeID string , serverAddr string , endpointHostname string , secLevel e2e.SecurityLevel ) {
1307+ func configureXDSResources (ctx context.Context , t * testing.T , mgmtServer * e2e.ManagementServer , nodeID , serverAddr , endpointHostname string , secLevel e2e.SecurityLevel , clusterType e2e. ClusterType ) {
13081308 t .Helper ()
13091309
13101310 const (
@@ -1314,16 +1314,30 @@ func configureXDSResources(ctx context.Context, t *testing.T, mgmtServer *e2e.Ma
13141314 endpointName = "endpoints-my-test-xds-service"
13151315 )
13161316
1317+ port := testutils .ParsePort (t , serverAddr )
1318+
13171319 resources := e2e .DefaultClientResources (e2e.ResourceParams {
13181320 DialTarget : serviceName ,
13191321 NodeID : nodeID ,
13201322 Host : "localhost" ,
1321- Port : testutils . ParsePort ( t , serverAddr ) ,
1323+ Port : port ,
13221324 SecLevel : secLevel ,
13231325 })
13241326
1325- // Set the endpoint hostname for authority rewriting.
1326- resources .Endpoints [0 ].Endpoints [0 ].LbEndpoints [0 ].GetEndpoint ().Hostname = endpointHostname
1327+ if clusterType == e2e .ClusterTypeLogicalDNS {
1328+ resources .Clusters = []* v3clusterpb.Cluster {
1329+ e2e .ClusterResourceWithOptions (e2e.ClusterOptions {
1330+ ClusterName : clusterName ,
1331+ Type : e2e .ClusterTypeLogicalDNS ,
1332+ DNSHostName : endpointHostname ,
1333+ DNSPort : port ,
1334+ }),
1335+ }
1336+ resources .Endpoints = nil
1337+ } else {
1338+ // Set the endpoint hostname for authority rewriting.
1339+ resources .Endpoints [0 ].Endpoints [0 ].LbEndpoints [0 ].GetEndpoint ().Hostname = endpointHostname
1340+ }
13271341
13281342 // Modify the route to enable AutoHostRewrite.
13291343 resources .Routes [0 ].VirtualHosts [0 ].Routes [0 ].GetRoute ().HostRewriteSpecifier = & v3routepb.RouteAction_AutoHostRewrite {
@@ -1339,54 +1353,84 @@ func configureXDSResources(ctx context.Context, t *testing.T, mgmtServer *e2e.Ma
13391353// rewritten to the endpoint's hostname. Also verifies that CallAuthority
13401354// call option takes precedence.
13411355func (s ) TestAuthorityOverriding (t * testing.T ) {
1342- testutils .SetEnvConfig (t , & envconfig .XDSAuthorityRewrite , true )
1343- mgmtServer , resolverBuilder , nodeID := setupManagementServerAndResolver (t )
1344-
1345- // Start a server backend exposing the test service.
1346- var gotAuthority string
1347- f := & stubserver.StubServer {
1348- EmptyCallF : func (ctx context.Context , _ * testpb.Empty ) (* testpb.Empty , error ) {
1349- if md , ok := metadata .FromIncomingContext (ctx ); ok {
1350- if authVals := md .Get (":authority" ); len (authVals ) > 0 {
1351- gotAuthority = authVals [0 ]
1352- }
1353- }
1354- return & testpb.Empty {}, nil
1356+ tests := []struct {
1357+ name string
1358+ clusterType e2e.ClusterType
1359+ }{
1360+ {
1361+ name : "EDS" ,
1362+ clusterType : e2e .ClusterTypeEDS ,
1363+ },
1364+ {
1365+ name : "LogicalDNS" ,
1366+ clusterType : e2e .ClusterTypeLogicalDNS ,
13551367 },
13561368 }
1357- server := stubserver .StartTestService (t , f )
1358- defer server .Stop ()
13591369
1360- const xdsAuthorityOverride = "rewritten.example.com"
1361- ctx , cancel := context . WithTimeout ( context . Background (), defaultTestTimeout )
1362- defer cancel ( )
1363- configureXDSResources ( ctx , t , mgmtServer , nodeID , server . Address , xdsAuthorityOverride , e2e . SecurityLevelNone )
1370+ for _ , test := range tests {
1371+ t . Run ( test . name , func ( t * testing. T ) {
1372+ testutils . SetEnvConfig ( t , & envconfig . XDSAuthorityRewrite , true )
1373+ mgmtServer , resolverBuilder , nodeID := setupManagementServerAndResolver ( t )
13641374
1365- // Create a ClientConn and make a successful RPC.
1366- cc , err := grpc .NewClient ("xds:///my-test-xds-service" , grpc .WithTransportCredentials (insecure .NewCredentials ()), grpc .WithResolvers (resolverBuilder ))
1367- if err != nil {
1368- t .Fatalf ("Failed to create client: %v" , err )
1369- }
1370- defer cc .Close ()
1375+ // Start a server backend exposing the test service.
1376+ var gotAuthority string
1377+ f := & stubserver.StubServer {
1378+ EmptyCallF : func (ctx context.Context , _ * testpb.Empty ) (* testpb.Empty , error ) {
1379+ if md , ok := metadata .FromIncomingContext (ctx ); ok {
1380+ if authVals := md .Get (":authority" ); len (authVals ) > 0 {
1381+ gotAuthority = authVals [0 ]
1382+ }
1383+ }
1384+ return & testpb.Empty {}, nil
1385+ },
1386+ }
1387+ server := stubserver .StartTestService (t , f )
1388+ defer server .Stop ()
13711389
1372- client := testgrpc .NewTestServiceClient (cc )
1373- if _ , err := client .EmptyCall (ctx , & testpb.Empty {}); err != nil {
1374- t .Fatalf ("client.EmptyCall() failed: %v" , err )
1375- }
1390+ ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
1391+ defer cancel ()
13761392
1377- if gotAuthority != xdsAuthorityOverride {
1378- t .Errorf ("invalid authority got: %q, want: %q" , gotAuthority , xdsAuthorityOverride )
1379- }
1393+ var hostname string
1394+ if test .clusterType == e2e .ClusterTypeEDS {
1395+ hostname = "rewritten.example.com"
1396+ } else {
1397+ hostname , _ = hostAndPortFromAddress (t , server .Address )
1398+ }
1399+ configureXDSResources (ctx , t , mgmtServer , nodeID , server .Address , hostname , e2e .SecurityLevelNone , test .clusterType )
13801400
1381- // The authority specified via the `CallAuthority` CallOption takes the
1382- // highest precedence when determining the `:authority` header.
1383- const userAuthorityOverride = "user-override.com"
1384- if _ , err := client .EmptyCall (ctx , & testpb.Empty {}, grpc .CallAuthority (userAuthorityOverride )); err != nil {
1385- t .Fatalf ("client.EmptyCall() failed: %v" , err )
1386- }
1401+ // Create a ClientConn and make a successful RPC.
1402+ cc , err := grpc .NewClient ("xds:///my-test-xds-service" , grpc .WithTransportCredentials (insecure .NewCredentials ()), grpc .WithResolvers (resolverBuilder ))
1403+ if err != nil {
1404+ t .Fatalf ("Failed to create client: %v" , err )
1405+ }
1406+ defer cc .Close ()
1407+
1408+ client := testgrpc .NewTestServiceClient (cc )
1409+ if _ , err := client .EmptyCall (ctx , & testpb.Empty {}); err != nil {
1410+ t .Fatalf ("client.EmptyCall() failed: %v" , err )
1411+ }
13871412
1388- if gotAuthority != userAuthorityOverride {
1389- t .Errorf ("Server received authority %q, want %q (user override)" , gotAuthority , userAuthorityOverride )
1413+ var wantAuthority string
1414+ if test .clusterType == e2e .ClusterTypeEDS {
1415+ wantAuthority = "rewritten.example.com"
1416+ } else {
1417+ wantAuthority = server .Address
1418+ }
1419+ if gotAuthority != wantAuthority {
1420+ t .Errorf ("invalid authority got: %q, want: %q" , gotAuthority , wantAuthority )
1421+ }
1422+
1423+ // The authority specified via the `CallAuthority` CallOption takes the
1424+ // highest precedence when determining the `:authority` header.
1425+ const userAuthorityOverride = "user-override.com"
1426+ if _ , err := client .EmptyCall (ctx , & testpb.Empty {}, grpc .CallAuthority (userAuthorityOverride )); err != nil {
1427+ t .Fatalf ("client.EmptyCall() failed: %v" , err )
1428+ }
1429+
1430+ if gotAuthority != userAuthorityOverride {
1431+ t .Errorf ("Server received authority %q, want %q (user override)" , gotAuthority , userAuthorityOverride )
1432+ }
1433+ })
13901434 }
13911435}
13921436
@@ -1442,7 +1486,7 @@ func (s) TestAuthorityOverridingWithTLS(t *testing.T) {
14421486
14431487 ctx , cancel := context .WithTimeout (context .Background (), defaultTestTimeout )
14441488 defer cancel ()
1445- configureXDSResources (ctx , t , mgmtServer , nodeID , f .Address , test .xdsAuthorityOverride , e2e .SecurityLevelMTLS )
1489+ configureXDSResources (ctx , t , mgmtServer , nodeID , f .Address , test .xdsAuthorityOverride , e2e .SecurityLevelMTLS , e2e . ClusterTypeEDS )
14461490
14471491 // Create ClientConn with TLS
14481492 cc , err := grpc .NewClient ("xds:///my-test-xds-service" , grpc .WithTransportCredentials (clientCreds ), grpc .WithResolvers (resolverBuilder ))
0 commit comments