xds/e2e: Use `Metadata` field from `BackendOptions` only when it is non-nil (#8619)
Fixes: #8545
Check BackendOptions.Metadata field before assigning it to
`v3corepb.Metadata`.
RELEASE NOTES: N/A
diff --git a/internal/testutils/xds/e2e/clientresources.go b/internal/testutils/xds/e2e/clientresources.go
index b8ebf8b..be375d4 100644
--- a/internal/testutils/xds/e2e/clientresources.go
+++ b/internal/testutils/xds/e2e/clientresources.go
@@ -712,11 +712,7 @@
},
}
}
- metadata, err := structpb.NewStruct(b.Metadata)
- if err != nil {
- panic(err)
- }
- lbEndpoints = append(lbEndpoints, &v3endpointpb.LbEndpoint{
+ lbEndpoint := &v3endpointpb.LbEndpoint{
HostIdentifier: &v3endpointpb.LbEndpoint_Endpoint{Endpoint: &v3endpointpb.Endpoint{
Address: &v3corepb.Address{Address: &v3corepb.Address_SocketAddress{
SocketAddress: &v3corepb.SocketAddress{
@@ -729,12 +725,20 @@
}},
HealthStatus: b.HealthStatus,
LoadBalancingWeight: &wrapperspb.UInt32Value{Value: b.Weight},
- Metadata: &v3corepb.Metadata{
+ }
+
+ if b.Metadata != nil {
+ metadata, err := structpb.NewStruct(b.Metadata)
+ if err != nil {
+ panic(fmt.Sprintf("failed to marshal metadata: %v", err))
+ }
+ lbEndpoint.Metadata = &v3corepb.Metadata{
FilterMetadata: map[string]*structpb.Struct{
"envoy.lb": metadata,
},
- },
- })
+ }
+ }
+ lbEndpoints = append(lbEndpoints, lbEndpoint)
}
l := locality.Locality