diff --git a/core/src/main/java/io/grpc/MethodDescriptor.java b/core/src/main/java/io/grpc/MethodDescriptor.java index f908ddeec9..355beffc93 100644 --- a/core/src/main/java/io/grpc/MethodDescriptor.java +++ b/core/src/main/java/io/grpc/MethodDescriptor.java @@ -438,7 +438,8 @@ public final class MethodDescriptor { .setFullMethodName(fullMethodName) .setIdempotent(idempotent) .setSafe(safe) - .setSampledToLocalTracing(sampledToLocalTracing); + .setSampledToLocalTracing(sampledToLocalTracing) + .setSchemaDescriptor(schemaDescriptor); } /** diff --git a/core/src/test/java/io/grpc/MethodDescriptorTest.java b/core/src/test/java/io/grpc/MethodDescriptorTest.java index 4f2ca1d3ef..3992b73183 100644 --- a/core/src/test/java/io/grpc/MethodDescriptorTest.java +++ b/core/src/test/java/io/grpc/MethodDescriptorTest.java @@ -16,8 +16,10 @@ package io.grpc; +import static junit.framework.TestCase.assertSame; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import io.grpc.MethodDescriptor.MethodType; @@ -129,4 +131,43 @@ public class MethodDescriptorTest { .build(); assertTrue(md4.isSampledToLocalTracing()); } + + @Test + public void toBuilderTest() { + MethodDescriptor md1 = MethodDescriptor.newBuilder() + .setType(MethodType.UNARY) + .setFullMethodName("package.service/method") + .setRequestMarshaller(StringMarshaller.INSTANCE) + .setResponseMarshaller(StringMarshaller.INSTANCE) + .setSampledToLocalTracing(true) + .setIdempotent(true) + .setSafe(true) + .setSchemaDescriptor(new Object()) + .build(); + // Verify that we are not using any default builder values, so if md1 and md2 matches, + // it's because toBuilder explicitly copied it. + MethodDescriptor defaults = MethodDescriptor.newBuilder() + .setType(MethodType.UNARY) + .setFullMethodName("package.service/method") + .setRequestMarshaller(StringMarshaller.INSTANCE) + .setResponseMarshaller(StringMarshaller.INSTANCE) + .build(); + assertNotEquals(md1.isSampledToLocalTracing(), defaults.isSampledToLocalTracing()); + assertNotEquals(md1.isIdempotent(), defaults.isIdempotent()); + assertNotEquals(md1.isSafe(), defaults.isSafe()); + assertNotEquals(md1.getSchemaDescriptor(), defaults.getSchemaDescriptor()); + + // Verify that the builder correctly copied over the values + MethodDescriptor md2 = md1.toBuilder( + IntegerMarshaller.INSTANCE, + IntegerMarshaller.INSTANCE).build(); + assertSame(md1.getType(), md2.getType()); + assertSame(md1.getFullMethodName(), md2.getFullMethodName()); + assertSame(IntegerMarshaller.INSTANCE, md2.getRequestMarshaller()); + assertSame(IntegerMarshaller.INSTANCE, md2.getResponseMarshaller()); + assertEquals(md1.isSampledToLocalTracing(), md2.isSampledToLocalTracing()); + assertEquals(md1.isIdempotent(), md2.isIdempotent()); + assertEquals(md1.isSafe(), md2.isSafe()); + assertSame(md1.getSchemaDescriptor(), md2.getSchemaDescriptor()); + } }