cronet: fill in transport attributes as required by CallCredentials (#4532)

This commit is contained in:
Kun Zhang 2018-06-07 15:28:23 -07:00 committed by GitHub
parent c05d0f40ea
commit 11e2d6d7f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 3 deletions

View File

@ -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) {

View File

@ -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 =