@@ -19,12 +19,18 @@ package xdsresource
1919import (
2020 "testing"
2121
22- v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
2322 "github.com/google/go-cmp/cmp"
2423 "google.golang.org/grpc/internal/testutils"
24+ "google.golang.org/protobuf/types/known/anypb"
25+
26+ v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
27+ v3gcpauthnpb "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/http/gcp_authn/v3"
2528)
2629
27- const proxyAddressTypeURL = "type.googleapis.com/envoy.config.core.v3.Address"
30+ const (
31+ proxyAddressTypeURL = "type.googleapis.com/envoy.config.core.v3.Address"
32+ audienceTypeURL = "type.googleapis.com/envoy.extensions.filters.http.gcp_authn.v3.Audience"
33+ )
2834
2935func setupProxyAddressConverter (t * testing.T ) {
3036 registerMetadataConverter (proxyAddressTypeURL , proxyAddressConvertor {})
@@ -33,6 +39,13 @@ func setupProxyAddressConverter(t *testing.T) {
3339 })
3440}
3541
42+ func setupAudienceConverter (t * testing.T ) {
43+ registerMetadataConverter (audienceTypeURL , audienceConverter {})
44+ t .Cleanup (func () {
45+ unregisterMetadataConverterForTesting (audienceTypeURL )
46+ })
47+ }
48+
3649func (s ) TestProxyAddressConverterSuccess (t * testing.T ) {
3750 setupProxyAddressConverter (t )
3851 converter := metadataConverterForType (proxyAddressTypeURL )
@@ -45,7 +58,7 @@ func (s) TestProxyAddressConverterSuccess(t *testing.T) {
4558 want ProxyAddressMetadataValue
4659 }{
4760 {
48- name : "valid IPv4 address and port " ,
61+ name : "valid_IPv4_address_and_port " ,
4962 addr : & v3corepb.Address {
5063 Address : & v3corepb.Address_SocketAddress {
5164 SocketAddress : & v3corepb.SocketAddress {
@@ -61,7 +74,7 @@ func (s) TestProxyAddressConverterSuccess(t *testing.T) {
6174 },
6275 },
6376 {
64- name : "valid full IPv6 address and port " ,
77+ name : "valid_full_IPv6_address_and_port " ,
6578 addr : & v3corepb.Address {
6679 Address : & v3corepb.Address_SocketAddress {
6780 SocketAddress : & v3corepb.SocketAddress {
@@ -77,7 +90,7 @@ func (s) TestProxyAddressConverterSuccess(t *testing.T) {
7790 },
7891 },
7992 {
80- name : "valid shortened IPv6 address " ,
93+ name : "valid_shortened_IPv6_address " ,
8194 addr : & v3corepb.Address {
8295 Address : & v3corepb.Address_SocketAddress {
8396 SocketAddress : & v3corepb.SocketAddress {
@@ -93,7 +106,7 @@ func (s) TestProxyAddressConverterSuccess(t *testing.T) {
93106 },
94107 },
95108 {
96- name : "valid link-local IPv6 address " ,
109+ name : "valid_link-local_IPv6_address " ,
97110 addr : & v3corepb.Address {
98111 Address : & v3corepb.Address_SocketAddress {
99112 SocketAddress : & v3corepb.SocketAddress {
@@ -109,7 +122,7 @@ func (s) TestProxyAddressConverterSuccess(t *testing.T) {
109122 },
110123 },
111124 {
112- name : "valid IPv4-mapped IPv6 address " ,
125+ name : "valid_IPv4-mapped_IPv6_address " ,
113126 addr : & v3corepb.Address {
114127 Address : & v3corepb.Address_SocketAddress {
115128 SocketAddress : & v3corepb.SocketAddress {
@@ -152,7 +165,7 @@ func (s) TestProxyAddressConverterFailure(t *testing.T) {
152165 wantErr string
153166 }{
154167 {
155- name : "invalid address " ,
168+ name : "invalid_address " ,
156169 addr : & v3corepb.Address {
157170 Address : & v3corepb.Address_SocketAddress {
158171 SocketAddress : & v3corepb.SocketAddress {
@@ -163,14 +176,14 @@ func (s) TestProxyAddressConverterFailure(t *testing.T) {
163176 wantErr : "address field is not a valid IPv4 or IPv6 address: \" invalid-ip\" " ,
164177 },
165178 {
166- name : "missing socket_address " ,
179+ name : "missing_socket_address " ,
167180 addr : & v3corepb.Address {
168181 // No SocketAddress field set.
169182 },
170183 wantErr : "no socket_address field in metadata" ,
171184 },
172185 {
173- name : "address is not a socket address " ,
186+ name : "address_is_not_a_socket_address " ,
174187 addr : & v3corepb.Address {
175188 Address : & v3corepb.Address_EnvoyInternalAddress {
176189 EnvoyInternalAddress : & v3corepb.EnvoyInternalAddress {
@@ -183,7 +196,7 @@ func (s) TestProxyAddressConverterFailure(t *testing.T) {
183196 wantErr : "no socket_address field in metadata" ,
184197 },
185198 {
186- name : "port value not set " ,
199+ name : "port_value_not_set " ,
187200 addr : & v3corepb.Address {
188201 Address : & v3corepb.Address_SocketAddress {
189202 SocketAddress : & v3corepb.SocketAddress {
@@ -206,3 +219,47 @@ func (s) TestProxyAddressConverterFailure(t *testing.T) {
206219 })
207220 }
208221}
222+
223+ func (s ) TestAudienceConverterSuccess (t * testing.T ) {
224+ setupAudienceConverter (t )
225+ converter := metadataConverterForType (audienceTypeURL )
226+ if converter == nil {
227+ t .Fatalf ("Converter for %q not found in registry" , audienceTypeURL )
228+ }
229+ tests := []struct {
230+ name string
231+ audience * anypb.Any
232+ want AudienceMetadataValue
233+ wantErr string
234+ }{
235+ {
236+ name : "valid_audience" ,
237+ audience : testutils .MarshalAny (t , & v3gcpauthnpb.Audience {Url : "https://example.com" }),
238+ want : AudienceMetadataValue {Audience : "https://example.com" },
239+ },
240+ {
241+ name : "empty_audience" ,
242+ audience : testutils .MarshalAny (t , & v3gcpauthnpb.Audience {Url : "" }),
243+ want : AudienceMetadataValue {Audience : "" },
244+ wantErr : "empty url field in audience metadata" ,
245+ },
246+ }
247+
248+ for _ , tt := range tests {
249+ t .Run (tt .name , func (t * testing.T ) {
250+ got , err := converter .convert (tt .audience )
251+ if tt .wantErr != "" {
252+ if err == nil || err .Error () != tt .wantErr {
253+ t .Errorf ("convert() got error = %v, wantErr = %q" , err , tt .wantErr )
254+ }
255+ return
256+ }
257+ if err != nil {
258+ t .Fatalf ("convert() failed with error: %v" , err )
259+ }
260+ if diff := cmp .Diff (tt .want , got ); diff != "" {
261+ t .Errorf ("convert(%s) returned unexpected diff (-want +got):\n %s" , tt .audience .GetTypeUrl (), diff )
262+ }
263+ })
264+ }
265+ }
0 commit comments