diff --git a/xds/src/main/java/io/grpc/xds/ClientXdsClient.java b/xds/src/main/java/io/grpc/xds/ClientXdsClient.java index 5af2042d478..47aab05aad8 100644 --- a/xds/src/main/java/io/grpc/xds/ClientXdsClient.java +++ b/xds/src/main/java/io/grpc/xds/ClientXdsClient.java @@ -385,7 +385,8 @@ static EnvoyServerProtoData.Listener parseServerSideListener( Listener proto, Set rdsResources, TlsContextManager tlsContextManager, FilterRegistry filterRegistry, Set certProviderInstances, boolean parseHttpFilter) throws ResourceInvalidException { - if (!proto.getTrafficDirection().equals(TrafficDirection.INBOUND)) { + if (!proto.getTrafficDirection().equals(TrafficDirection.INBOUND) + && !proto.getTrafficDirection().equals(TrafficDirection.UNSPECIFIED)) { throw new ResourceInvalidException( "Listener " + proto.getName() + " with invalid traffic direction: " + proto.getTrafficDirection()); diff --git a/xds/src/test/java/io/grpc/xds/ClientXdsClientDataTest.java b/xds/src/test/java/io/grpc/xds/ClientXdsClientDataTest.java index a4665285b7e..fdc39d6f6f8 100644 --- a/xds/src/test/java/io/grpc/xds/ClientXdsClientDataTest.java +++ b/xds/src/test/java/io/grpc/xds/ClientXdsClientDataTest.java @@ -2006,6 +2006,16 @@ public void parseServerSideListener_invalidTrafficDirection() throws ResourceInv listener, new HashSet(), null, filterRegistry, null, true /* does not matter */); } + @Test + public void parseServerSideListener_noTrafficDirection() throws ResourceInvalidException { + Listener listener = + Listener.newBuilder() + .setName("listener1") + .build(); + ClientXdsClient.parseServerSideListener( + listener, new HashSet(), null, filterRegistry, null, true /* does not matter */); + } + @Test public void parseServerSideListener_listenerFiltersPresent() throws ResourceInvalidException { Listener listener =