From fc0687a4a359f544be7512839f84fea1c0980028 Mon Sep 17 00:00:00 2001 From: "Penn (Dapeng) Zhang" Date: Fri, 12 Mar 2021 13:32:11 -0800 Subject: [PATCH] xds: fix Node.toBuilder() bug --- .../main/java/io/grpc/xds/EnvoyProtoData.java | 16 +++++++++------- .../java/io/grpc/xds/EnvoyProtoDataTest.java | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/xds/src/main/java/io/grpc/xds/EnvoyProtoData.java b/xds/src/main/java/io/grpc/xds/EnvoyProtoData.java index 3fa822d26c6..8274b23a5d2 100644 --- a/xds/src/main/java/io/grpc/xds/EnvoyProtoData.java +++ b/xds/src/main/java/io/grpc/xds/EnvoyProtoData.java @@ -204,14 +204,16 @@ static Builder newBuilder() { } Builder toBuilder() { - Builder builder = new Builder().setId(id).setCluster(cluster); - if (metadata != null) { - builder.setMetadata(metadata); - } - if (locality != null) { - builder.setLocality(locality); - } + Builder builder = new Builder(); + builder.id = id; + builder.cluster = cluster; + builder.metadata = metadata; + builder.locality = locality; + builder.buildVersion = buildVersion; builder.listeningAddresses.addAll(listeningAddresses); + builder.userAgentName = userAgentName; + builder.userAgentVersion = userAgentVersion; + builder.clientFeatures.addAll(clientFeatures); return builder; } diff --git a/xds/src/test/java/io/grpc/xds/EnvoyProtoDataTest.java b/xds/src/test/java/io/grpc/xds/EnvoyProtoDataTest.java index 65e801c97dd..1e372e5974e 100644 --- a/xds/src/test/java/io/grpc/xds/EnvoyProtoDataTest.java +++ b/xds/src/test/java/io/grpc/xds/EnvoyProtoDataTest.java @@ -122,4 +122,22 @@ public void convertNode() { .build(); assertThat(node.toEnvoyProtoNodeV2()).isEqualTo(nodeProtoV2); } + + @Test + public void nodeToBuilderPropagatesAllAttributes() { + Node node = Node.newBuilder() + .setId("id") + .setCluster("cluster") + .setMetadata(ImmutableMap.of("key1", "value1", "key2", "value2")) + .setLocality(Locality.create("region", "zone", "subzone")) + .setBuildVersion("v1") + .setUserAgentName("grpc-java") + .setUserAgentVersion("v1.0.9") + .addListeningAddresses(new Address("localhost", 8080)) + .addListeningAddresses(new Address("localhost", 8081)) + .addClientFeatures("feature1") + .addClientFeatures("feature2") + .build(); + assertThat(node.toBuilder().build()).isEqualTo(node); + } }