diff --git a/cronet/src/main/java/io/grpc/cronet/CronetClientTransport.java b/cronet/src/main/java/io/grpc/cronet/CronetClientTransport.java index 54eddd677c..ba4d7cbc06 100644 --- a/cronet/src/main/java/io/grpc/cronet/CronetClientTransport.java +++ b/cronet/src/main/java/io/grpc/cronet/CronetClientTransport.java @@ -20,9 +20,11 @@ import com.google.common.base.Preconditions; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; import io.grpc.Attributes; +import io.grpc.CallCredentials; import io.grpc.CallOptions; import io.grpc.Metadata; import io.grpc.MethodDescriptor; +import io.grpc.SecurityLevel; import io.grpc.Status; import io.grpc.Status.Code; import io.grpc.cronet.CronetChannelBuilder.StreamBuilderFactory; @@ -57,6 +59,7 @@ class CronetClientTransport implements ConnectionClientTransport { private final int maxMessageSize; private final boolean alwaysUsePut; private final TransportTracer transportTracer; + private final Attributes attrs; // Indicates the transport is in go-away state: no new streams will be processed, // but existing streams may continue. @GuardedBy("lock") @@ -91,6 +94,10 @@ class CronetClientTransport implements ConnectionClientTransport { this.executor = Preconditions.checkNotNull(executor, "executor"); this.streamFactory = Preconditions.checkNotNull(streamFactory, "streamFactory"); this.transportTracer = Preconditions.checkNotNull(transportTracer, "transportTracer"); + this.attrs = Attributes.newBuilder() + .set(CallCredentials.ATTR_AUTHORITY, authority) + .set(CallCredentials.ATTR_SECURITY_LEVEL, SecurityLevel.PRIVACY_AND_INTEGRITY) + .build(); } @Override @@ -192,8 +199,7 @@ class CronetClientTransport implements ConnectionClientTransport { @Override public Attributes getAttributes() { - // TODO(zhangkun83): fill channel security attributes - return Attributes.EMPTY; + return attrs; } private void startGoAway(Status status) { diff --git a/cronet/src/test/java/io/grpc/cronet/CronetClientTransportTest.java b/cronet/src/test/java/io/grpc/cronet/CronetClientTransportTest.java index cefed621db..539ba1ccdb 100644 --- a/cronet/src/test/java/io/grpc/cronet/CronetClientTransportTest.java +++ b/cronet/src/test/java/io/grpc/cronet/CronetClientTransportTest.java @@ -16,6 +16,7 @@ package io.grpc.cronet; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.any; import static org.mockito.Mockito.mock; @@ -23,9 +24,12 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import io.grpc.Attributes; +import io.grpc.CallCredentials; import io.grpc.CallOptions; import io.grpc.Metadata; import io.grpc.MethodDescriptor; +import io.grpc.SecurityLevel; import io.grpc.Status; import io.grpc.cronet.CronetChannelBuilder.StreamBuilderFactory; import io.grpc.internal.ClientStreamListener; @@ -46,6 +50,8 @@ import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public final class CronetClientTransportTest { + private static final String AUTHORITY = "test.example.com"; + private CronetClientTransport transport; @Mock private StreamBuilderFactory streamFactory; @Mock private Executor executor; @@ -61,7 +67,7 @@ public final class CronetClientTransportTest { new CronetClientTransport( streamFactory, new InetSocketAddress("localhost", 443), - "", + AUTHORITY, null, executor, 5000, @@ -73,6 +79,14 @@ public final class CronetClientTransportTest { verify(clientTransportListener).transportReady(); } + @Test + public void transportAttributes() { + Attributes attrs = transport.getAttributes(); + assertEquals(AUTHORITY, attrs.get(CallCredentials.ATTR_AUTHORITY)); + assertEquals( + SecurityLevel.PRIVACY_AND_INTEGRITY, attrs.get(CallCredentials.ATTR_SECURITY_LEVEL)); + } + @Test public void shutdownTransport() throws Exception { CronetClientStream stream1 =