diff --git a/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java b/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java index 93413aa22a3..1c60f82846d 100644 --- a/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java +++ b/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java @@ -20,7 +20,6 @@ import static com.google.common.base.Preconditions.checkNotNull; import static io.grpc.internal.GrpcUtil.DEFAULT_MAX_MESSAGE_SIZE; -import android.util.Log; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.MoreExecutors; @@ -38,8 +37,6 @@ import io.grpc.internal.ManagedChannelImplBuilder.ClientTransportFactoryBuilder; import io.grpc.internal.SharedResourceHolder; import io.grpc.internal.TransportTracer; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.util.Collection; @@ -49,15 +46,11 @@ import javax.annotation.Nullable; import org.chromium.net.BidirectionalStream; import org.chromium.net.CronetEngine; -import org.chromium.net.ExperimentalBidirectionalStream; -import org.chromium.net.ExperimentalCronetEngine; /** Convenience class for building channels with the cronet transport. */ @ExperimentalApi("There is no plan to make this API stable, given transport API instability") public final class CronetChannelBuilder extends ForwardingChannelBuilder2 { - private static final String LOG_TAG = "CronetChannelBuilder"; - /** BidirectionalStream.Builder factory used for getting the gRPC BidirectionalStream. */ public static abstract class StreamBuilderFactory { public abstract BidirectionalStream.Builder newBidirectionalStreamBuilder( @@ -91,7 +84,7 @@ public static CronetChannelBuilder forAddress(String name, int port) { private final CronetEngine cronetEngine; private final ManagedChannelImplBuilder managedChannelImplBuilder; - private TransportTracer.Factory transportTracerFactory = TransportTracer.getDefaultFactory(); + private final TransportTracer.Factory transportTracerFactory = TransportTracer.getDefaultFactory(); private boolean alwaysUsePut = false; @@ -139,7 +132,7 @@ protected ManagedChannelBuilder delegate() { * Sets the maximum message size allowed to be received on the channel. If not called, * defaults to {@link io.grpc.internal.GrpcUtil#DEFAULT_MAX_MESSAGE_SIZE}. */ - public final CronetChannelBuilder maxMessageSize(int maxMessageSize) { + public CronetChannelBuilder maxMessageSize(int maxMessageSize) { checkArgument(maxMessageSize >= 0, "maxMessageSize must be >= 0"); this.maxMessageSize = maxMessageSize; return this; @@ -148,7 +141,7 @@ public final CronetChannelBuilder maxMessageSize(int maxMessageSize) { /** * Sets the Cronet channel to always use PUT instead of POST. Defaults to false. */ - public final CronetChannelBuilder alwaysUsePut(boolean enable) { + public CronetChannelBuilder alwaysUsePut(boolean enable) { this.alwaysUsePut = enable; return this; } @@ -170,7 +163,7 @@ public final CronetChannelBuilder alwaysUsePut(boolean enable) { * application. * @return the builder to facilitate chaining. */ - final CronetChannelBuilder setTrafficStatsTag(int tag) { + CronetChannelBuilder setTrafficStatsTag(int tag) { trafficStatsTagSet = true; trafficStatsTag = tag; return this; @@ -180,7 +173,7 @@ final CronetChannelBuilder setTrafficStatsTag(int tag) { * Sets specific UID to use when accounting socket traffic caused by this channel. See {@link * android.net.TrafficStats} for more information. Designed for use when performing an operation * on behalf of another application. Caller must hold {@link - * android.Manifest.permission#MODIFY_NETWORK_ACCOUNTING} permission. By default traffic is + * android.Manifest.permission#UPDATE_DEVICE_STATS} permission. By default traffic is * attributed to UID of caller. * *

NOTE:Setting a UID disallows sharing of sockets with channels with other UIDs, which @@ -191,7 +184,7 @@ final CronetChannelBuilder setTrafficStatsTag(int tag) { * @param uid the UID to attribute socket traffic caused by this channel. * @return the builder to facilitate chaining. */ - final CronetChannelBuilder setTrafficStatsUid(int uid) { + CronetChannelBuilder setTrafficStatsUid(int uid) { trafficStatsUidSet = true; trafficStatsUid = uid; return this; @@ -207,7 +200,7 @@ final CronetChannelBuilder setTrafficStatsUid(int uid) { * * @since 1.12.0 */ - public final CronetChannelBuilder scheduledExecutorService( + public CronetChannelBuilder scheduledExecutorService( ScheduledExecutorService scheduledExecutorService) { this.scheduledExecutorService = checkNotNull(scheduledExecutorService, "scheduledExecutorService"); @@ -296,11 +289,6 @@ public Collection> getSupportedSocketAddressTypes * StreamBuilderFactory impl that applies TrafficStats tags to stream builders that are produced. */ private static class TaggingStreamFactory extends StreamBuilderFactory { - private static volatile boolean loadSetTrafficStatsTagAttempted; - private static volatile boolean loadSetTrafficStatsUidAttempted; - private static volatile Method setTrafficStatsTagMethod; - private static volatile Method setTrafficStatsUidMethod; - private final CronetEngine cronetEngine; private final boolean trafficStatsTagSet; private final int trafficStatsTag; @@ -323,74 +311,16 @@ private static class TaggingStreamFactory extends StreamBuilderFactory { @Override public BidirectionalStream.Builder newBidirectionalStreamBuilder( String url, BidirectionalStream.Callback callback, Executor executor) { - ExperimentalBidirectionalStream.Builder builder = - ((ExperimentalCronetEngine) cronetEngine) + BidirectionalStream.Builder builder = + cronetEngine .newBidirectionalStreamBuilder(url, callback, executor); if (trafficStatsTagSet) { - setTrafficStatsTag(builder, trafficStatsTag); + builder.setTrafficStatsTag(trafficStatsTag); } if (trafficStatsUidSet) { - setTrafficStatsUid(builder, trafficStatsUid); + builder.setTrafficStatsUid(trafficStatsUid); } return builder; } - - private static void setTrafficStatsTag(ExperimentalBidirectionalStream.Builder builder, - int tag) { - if (!loadSetTrafficStatsTagAttempted) { - synchronized (TaggingStreamFactory.class) { - if (!loadSetTrafficStatsTagAttempted) { - try { - setTrafficStatsTagMethod = ExperimentalBidirectionalStream.Builder.class - .getMethod("setTrafficStatsTag", int.class); - } catch (NoSuchMethodException e) { - Log.w(LOG_TAG, - "Failed to load method ExperimentalBidirectionalStream.Builder.setTrafficStatsTag", - e); - } finally { - loadSetTrafficStatsTagAttempted = true; - } - } - } - } - if (setTrafficStatsTagMethod != null) { - try { - setTrafficStatsTagMethod.invoke(builder, tag); - } catch (InvocationTargetException e) { - throw new RuntimeException(e.getCause() == null ? e.getTargetException() : e.getCause()); - } catch (IllegalAccessException e) { - Log.w(LOG_TAG, "Failed to set traffic stats tag: " + tag, e); - } - } - } - - private static void setTrafficStatsUid(ExperimentalBidirectionalStream.Builder builder, - int uid) { - if (!loadSetTrafficStatsUidAttempted) { - synchronized (TaggingStreamFactory.class) { - if (!loadSetTrafficStatsUidAttempted) { - try { - setTrafficStatsUidMethod = ExperimentalBidirectionalStream.Builder.class - .getMethod("setTrafficStatsUid", int.class); - } catch (NoSuchMethodException e) { - Log.w(LOG_TAG, - "Failed to load method ExperimentalBidirectionalStream.Builder.setTrafficStatsUid", - e); - } finally { - loadSetTrafficStatsUidAttempted = true; - } - } - } - } - if (setTrafficStatsUidMethod != null) { - try { - setTrafficStatsUidMethod.invoke(builder, uid); - } catch (InvocationTargetException e) { - throw new RuntimeException(e.getCause() == null ? e.getTargetException() : e.getCause()); - } catch (IllegalAccessException e) { - Log.w(LOG_TAG, "Failed to set traffic stats uid: " + uid, e); - } - } - } } } diff --git a/cronet/src/main/java/io/grpc/cronet/CronetClientStream.java b/cronet/src/main/java/io/grpc/cronet/CronetClientStream.java index 5bf7118d2fd..9ae97652316 100644 --- a/cronet/src/main/java/io/grpc/cronet/CronetClientStream.java +++ b/cronet/src/main/java/io/grpc/cronet/CronetClientStream.java @@ -40,11 +40,9 @@ import io.grpc.internal.TransportFrameUtil; import io.grpc.internal.TransportTracer; import io.grpc.internal.WritableBuffer; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.nio.Buffer; import java.nio.ByteBuffer; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -55,7 +53,6 @@ import javax.annotation.concurrent.GuardedBy; import org.chromium.net.BidirectionalStream; import org.chromium.net.CronetException; -import org.chromium.net.ExperimentalBidirectionalStream; import org.chromium.net.UrlResponseInfo; /** @@ -66,9 +63,6 @@ class CronetClientStream extends AbstractClientStream { private static final ByteBuffer EMPTY_BUFFER = ByteBuffer.allocateDirect(0); private static final String LOG_TAG = "grpc-java-cronet"; - private static volatile boolean loadAddRequestAnnotationAttempted; - private static volatile Method addRequestAnnotationMethod; - @Deprecated static final CallOptions.Key CRONET_ANNOTATION_KEY = CallOptions.Key.create("cronet-annotation"); @@ -194,14 +188,12 @@ public void writeHeaders(Metadata metadata, byte[] payload) { builder.delayRequestHeadersUntilFirstFlush(true); } if (annotation != null || annotations != null) { - ExperimentalBidirectionalStream.Builder expBidiStreamBuilder = - (ExperimentalBidirectionalStream.Builder) builder; if (annotation != null) { - addRequestAnnotation(expBidiStreamBuilder, annotation); + builder.addRequestAnnotation(annotation); } if (annotations != null) { for (Object o : annotations) { - addRequestAnnotation(expBidiStreamBuilder, o); + builder.addRequestAnnotation(o); } } } @@ -255,7 +247,7 @@ public void cancel(Status reason) { class TransportState extends Http2ClientStreamTransportState { private final Object lock; @GuardedBy("lock") - private Collection pendingData = new ArrayList(); + private final Collection pendingData = new ArrayList<>(); @GuardedBy("lock") private boolean streamReady; @GuardedBy("lock") @@ -367,35 +359,6 @@ private static boolean isApplicationHeader(String key) { && !TE_HEADER.name().equalsIgnoreCase(key); } - private static void addRequestAnnotation(ExperimentalBidirectionalStream.Builder builder, - Object annotation) { - if (!loadAddRequestAnnotationAttempted) { - synchronized (CronetClientStream.class) { - if (!loadAddRequestAnnotationAttempted) { - try { - addRequestAnnotationMethod = ExperimentalBidirectionalStream.Builder.class - .getMethod("addRequestAnnotation", Object.class); - } catch (NoSuchMethodException e) { - Log.w(LOG_TAG, - "Failed to load method ExperimentalBidirectionalStream.Builder.addRequestAnnotation", - e); - } finally { - loadAddRequestAnnotationAttempted = true; - } - } - } - } - if (addRequestAnnotationMethod != null) { - try { - addRequestAnnotationMethod.invoke(builder, annotation); - } catch (InvocationTargetException e) { - throw new RuntimeException(e.getCause() == null ? e.getTargetException() : e.getCause()); - } catch (IllegalAccessException e) { - Log.w(LOG_TAG, "Failed to add request annotation: " + annotation, e); - } - } - } - private void setGrpcHeaders(BidirectionalStream.Builder builder) { // Psuedo-headers are set by cronet. // All non-pseudo headers must come after pseudo headers. @@ -409,10 +372,10 @@ private void setGrpcHeaders(BidirectionalStream.Builder builder) { // String and byte array. byte[][] serializedHeaders = TransportFrameUtil.toHttp2Headers(headers); for (int i = 0; i < serializedHeaders.length; i += 2) { - String key = new String(serializedHeaders[i], Charset.forName("UTF-8")); + String key = new String(serializedHeaders[i], StandardCharsets.UTF_8); // TODO(ericgribkoff): log an error or throw an exception if (isApplicationHeader(key)) { - String value = new String(serializedHeaders[i + 1], Charset.forName("UTF-8")); + String value = new String(serializedHeaders[i + 1], StandardCharsets.UTF_8); builder.addHeader(key, value); } } @@ -589,8 +552,8 @@ private void reportHeaders(List> headers, boolean endO byte[][] headerValues = new byte[headerList.size()][]; for (int i = 0; i < headerList.size(); i += 2) { - headerValues[i] = headerList.get(i).getBytes(Charset.forName("UTF-8")); - headerValues[i + 1] = headerList.get(i + 1).getBytes(Charset.forName("UTF-8")); + headerValues[i] = headerList.get(i).getBytes(StandardCharsets.UTF_8); + headerValues[i + 1] = headerList.get(i + 1).getBytes(StandardCharsets.UTF_8); } Metadata metadata = InternalMetadata.newMetadata(TransportFrameUtil.toRawSerializedHeaders(headerValues)); diff --git a/cronet/src/main/java/io/grpc/cronet/CronetClientTransport.java b/cronet/src/main/java/io/grpc/cronet/CronetClientTransport.java index 800d9155854..b0b18620d0c 100644 --- a/cronet/src/main/java/io/grpc/cronet/CronetClientTransport.java +++ b/cronet/src/main/java/io/grpc/cronet/CronetClientTransport.java @@ -56,7 +56,7 @@ class CronetClientTransport implements ConnectionClientTransport { private final Object lock = new Object(); @GuardedBy("lock") private final Set streams = Collections.newSetFromMap( - new IdentityHashMap()); + new IdentityHashMap<>()); private final Executor executor; private final int maxMessageSize; private final boolean alwaysUsePut; @@ -64,6 +64,7 @@ class CronetClientTransport implements ConnectionClientTransport { private Attributes attrs; private final boolean useGetForSafeMethods; private final boolean usePutForIdempotentMethods; + private final StreamBuilderFactory streamFactory; // Indicates the transport is in go-away state: no new streams will be processed, // but existing streams may continue. @GuardedBy("lock") @@ -79,7 +80,6 @@ class CronetClientTransport implements ConnectionClientTransport { @GuardedBy("lock") // Whether this transport has started. private boolean started; - private StreamBuilderFactory streamFactory; CronetClientTransport( StreamBuilderFactory streamFactory, @@ -205,9 +205,9 @@ public void shutdownNow(Status status) { // streams.remove() streamsCopy = new ArrayList<>(streams); } - for (int i = 0; i < streamsCopy.size(); i++) { + for (CronetClientStream cronetClientStream : streamsCopy) { // Avoid deadlock by calling into stream without lock held - streamsCopy.get(i).cancel(status); + cronetClientStream.cancel(status); } stopIfNecessary(); } @@ -255,7 +255,7 @@ public InternalLogId getLogId() { */ void stopIfNecessary() { synchronized (lock) { - if (goAway && !stopped && streams.size() == 0) { + if (goAway && !stopped && streams.isEmpty()) { stopped = true; } else { return; diff --git a/cronet/src/main/java/io/grpc/cronet/InternalCronetChannelBuilder.java b/cronet/src/main/java/io/grpc/cronet/InternalCronetChannelBuilder.java index f61685937a8..2954f1eee81 100644 --- a/cronet/src/main/java/io/grpc/cronet/InternalCronetChannelBuilder.java +++ b/cronet/src/main/java/io/grpc/cronet/InternalCronetChannelBuilder.java @@ -47,7 +47,7 @@ public static void setTrafficStatsTag(CronetChannelBuilder builder, int tag) { * Sets specific UID to use when accounting socket traffic caused by this channel. See {@link * android.net.TrafficStats} for more information. Designed for use when performing an operation * on behalf of another application. Caller must hold {@link - * android.Manifest.permission#MODIFY_NETWORK_ACCOUNTING} permission. By default traffic is + * android.Manifest.permission#UPDATE_DEVICE_STATS} permission. By default traffic is * attributed to UID of caller. * *

NOTE:Setting a UID disallows sharing of sockets with channels with other UIDs, which diff --git a/cronet/src/test/java/io/grpc/cronet/CronetChannelBuilderTest.java b/cronet/src/test/java/io/grpc/cronet/CronetChannelBuilderTest.java index b31b742577d..41f48bc03bb 100644 --- a/cronet/src/test/java/io/grpc/cronet/CronetChannelBuilderTest.java +++ b/cronet/src/test/java/io/grpc/cronet/CronetChannelBuilderTest.java @@ -35,7 +35,7 @@ import io.grpc.testing.TestMethodDescriptors; import java.net.InetSocketAddress; import java.util.concurrent.ScheduledExecutorService; -import org.chromium.net.ExperimentalCronetEngine; +import org.chromium.net.CronetEngine; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -50,7 +50,7 @@ public final class CronetChannelBuilderTest { @Rule public final MockitoRule mocks = MockitoJUnit.rule(); - @Mock private ExperimentalCronetEngine mockEngine; + @Mock private CronetEngine mockEngine; @Mock private ChannelLogger channelLogger; private final ClientStreamTracer[] tracers = diff --git a/cronet/src/test/java/io/grpc/cronet/CronetClientStreamTest.java b/cronet/src/test/java/io/grpc/cronet/CronetClientStreamTest.java index cfbe27a6257..e2b0e0b26ca 100644 --- a/cronet/src/test/java/io/grpc/cronet/CronetClientStreamTest.java +++ b/cronet/src/test/java/io/grpc/cronet/CronetClientStreamTest.java @@ -18,6 +18,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; @@ -46,7 +47,7 @@ import java.io.ByteArrayInputStream; import java.nio.Buffer; import java.nio.ByteBuffer; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -54,7 +55,6 @@ import java.util.concurrent.Executor; import org.chromium.net.BidirectionalStream; import org.chromium.net.CronetException; -import org.chromium.net.ExperimentalBidirectionalStream; import org.chromium.net.UrlResponseInfo; import org.chromium.net.impl.UrlResponseInfoImpl; import org.junit.Before; @@ -76,17 +76,12 @@ public final class CronetClientStreamTest { @Mock private CronetClientTransport transport; private Metadata metadata = new Metadata(); @Mock private StreamBuilderFactory factory; - @Mock private ExperimentalBidirectionalStream cronetStream; + @Mock private BidirectionalStream cronetStream; @Mock private ClientStreamListener clientListener; - @Mock private ExperimentalBidirectionalStream.Builder builder; + @Mock private BidirectionalStream.Builder builder; private final Object lock = new Object(); private final TransportTracer transportTracer = TransportTracer.getDefaultFactory().create(); - private final Executor executor = new Executor() { - @Override - public void execute(Runnable r) { - r.run(); - } - }; + private final Executor executor = Runnable::run; CronetClientStream clientStream; private MethodDescriptor.Marshaller marshaller = TestMethodDescriptors.voidMarshaller(); @@ -108,7 +103,7 @@ void setStream(CronetClientStream stream) { @Override @SuppressWarnings("GuardedBy") public void run() { - assertTrue(stream != null); + assertNotNull(stream); stream.transportState().start(factory); } } @@ -172,9 +167,9 @@ public void write() { String[] requests = new String[5]; WritableBuffer[] buffers = new WritableBuffer[5]; for (int i = 0; i < 5; ++i) { - requests[i] = new String("request" + String.valueOf(i)); + requests[i] = "request" + i; buffers[i] = allocator.allocate(requests[i].length()); - buffers[i].write(requests[i].getBytes(Charset.forName("UTF-8")), 0, requests[i].length()); + buffers[i].write(requests[i].getBytes(StandardCharsets.UTF_8), 0, requests[i].length()); // The 3rd and 5th writeFrame calls have flush=true. clientStream.abstractClientStreamSink().writeFrame(buffers[i], false, i == 2 || i == 4, 1); } @@ -207,27 +202,19 @@ public void write() { } private static List> responseHeader(String status) { - Map headers = new HashMap(); + Map headers = new HashMap<>(); headers.put(":status", status); headers.put("content-type", "application/grpc"); headers.put("test-key", "test-value"); - List> headerList = new ArrayList>(3); - for (Map.Entry entry : headers.entrySet()) { - headerList.add(entry); - } - return headerList; + return new ArrayList<>(headers.entrySet()); } private static List> trailers(int status) { - Map trailers = new HashMap(); + Map trailers = new HashMap<>(); trailers.put("grpc-status", String.valueOf(status)); trailers.put("content-type", "application/grpc"); trailers.put("test-trailer-key", "test-trailer-value"); - List> trailerList = new ArrayList>(3); - for (Map.Entry entry : trailers.entrySet()) { - trailerList.add(entry); - } - return trailerList; + return new ArrayList<>(trailers.entrySet()); } private static ByteBuffer createMessageFrame(byte[] bytes) { @@ -267,7 +254,7 @@ public void read() { callback.onReadCompleted( cronetStream, info, - createMessageFrame(new String("response1").getBytes(Charset.forName("UTF-8"))), + createMessageFrame("response1".getBytes(StandardCharsets.UTF_8)), false); // Haven't request any message, so no callback is called here. verify(clientListener, times(0)).messagesAvailable(isA(MessageProducer.class)); @@ -297,9 +284,9 @@ public void streamSucceeded() { verify(cronetStream, times(0)).write(isA(ByteBuffer.class), isA(Boolean.class)); // Send the first data frame. CronetWritableBufferAllocator allocator = new CronetWritableBufferAllocator(); - String request = new String("request"); + String request = "request"; WritableBuffer writableBuffer = allocator.allocate(request.length()); - writableBuffer.write(request.getBytes(Charset.forName("UTF-8")), 0, request.length()); + writableBuffer.write(request.getBytes(StandardCharsets.UTF_8), 0, request.length()); clientStream.abstractClientStreamSink().writeFrame(writableBuffer, false, true, 1); ArgumentCaptor bufferCaptor = ArgumentCaptor.forClass(ByteBuffer.class); verify(cronetStream, times(1)).write(bufferCaptor.capture(), isA(Boolean.class)); @@ -318,7 +305,7 @@ public void streamSucceeded() { callback.onReadCompleted( cronetStream, info, - createMessageFrame(new String("response").getBytes(Charset.forName("UTF-8"))), + createMessageFrame("response".getBytes(StandardCharsets.UTF_8)), false); verify(clientListener, times(1)).messagesAvailable(isA(MessageProducer.class)); verify(cronetStream, times(2)).read(isA(ByteBuffer.class)); @@ -681,8 +668,8 @@ public void getUnaryRequest() { true, false); callback.setStream(stream); - ExperimentalBidirectionalStream.Builder getBuilder = - mock(ExperimentalBidirectionalStream.Builder.class); + BidirectionalStream.Builder getBuilder = + mock(BidirectionalStream.Builder.class); when(getFactory.newBidirectionalStreamBuilder( any(String.class), any(BidirectionalStream.Callback.class), any(Executor.class))) .thenReturn(getBuilder); @@ -694,7 +681,7 @@ public void getUnaryRequest() { .newBidirectionalStreamBuilder( isA(String.class), isA(BidirectionalStream.Callback.class), isA(Executor.class)); - byte[] msg = "request".getBytes(Charset.forName("UTF-8")); + byte[] msg = "request".getBytes(StandardCharsets.UTF_8); stream.writeMessage(new ByteArrayInputStream(msg)); // We still haven't built the stream or sent anything. verify(cronetStream, times(0)).write(isA(ByteBuffer.class), isA(Boolean.class)); @@ -738,8 +725,8 @@ public void idempotentMethod_usesHttpPut() { true, true); callback.setStream(stream); - ExperimentalBidirectionalStream.Builder builder = - mock(ExperimentalBidirectionalStream.Builder.class); + BidirectionalStream.Builder builder = + mock(BidirectionalStream.Builder.class); when(factory.newBidirectionalStreamBuilder( any(String.class), any(BidirectionalStream.Callback.class), any(Executor.class))) .thenReturn(builder); @@ -770,8 +757,8 @@ public void alwaysUsePutOption_usesHttpPut() { true, true); callback.setStream(stream); - ExperimentalBidirectionalStream.Builder builder = - mock(ExperimentalBidirectionalStream.Builder.class); + BidirectionalStream.Builder builder = + mock(BidirectionalStream.Builder.class); when(factory.newBidirectionalStreamBuilder( any(String.class), any(BidirectionalStream.Callback.class), any(Executor.class))) .thenReturn(builder); @@ -810,8 +797,8 @@ public void reservedHeadersStripped() { false, false); callback.setStream(stream); - ExperimentalBidirectionalStream.Builder builder = - mock(ExperimentalBidirectionalStream.Builder.class); + BidirectionalStream.Builder builder = + mock(BidirectionalStream.Builder.class); when(factory.newBidirectionalStreamBuilder( any(String.class), any(BidirectionalStream.Callback.class), any(Executor.class))) .thenReturn(builder); diff --git a/cronet/src/test/java/io/grpc/cronet/CronetClientTransportTest.java b/cronet/src/test/java/io/grpc/cronet/CronetClientTransportTest.java index cc18f33aaea..03c31f93329 100644 --- a/cronet/src/test/java/io/grpc/cronet/CronetClientTransportTest.java +++ b/cronet/src/test/java/io/grpc/cronet/CronetClientTransportTest.java @@ -17,7 +17,7 @@ package io.grpc.cronet; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertNotNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; @@ -71,12 +71,7 @@ public final class CronetClientTransportTest { private MethodDescriptor descriptor = TestMethodDescriptors.voidMethod(); @Mock private ManagedClientTransport.Listener clientTransportListener; @Mock private BidirectionalStream.Builder builder; - private final Executor executor = new Executor() { - @Override - public void execute(Runnable r) { - r.run(); - } - }; + private final Executor executor = Runnable::run; @Before public void setUp() { @@ -96,7 +91,7 @@ public void setUp() { false, false); Runnable callback = transport.start(clientTransportListener); - assertTrue(callback != null); + assertNotNull(callback); callback.run(); verify(clientTransportListener).transportReady(); } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a7100e97f0e..e7a1f375cae 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,10 +23,8 @@ auto-value-annotations = "com.google.auto.value:auto-value-annotations:1.10.4" checkstyle = "com.puppycrawl.tools:checkstyle:10.12.5" commons-math3 = "org.apache.commons:commons-math3:3.6.1" conscrypt = "org.conscrypt:conscrypt-openjdk-uber:2.5.2" -# Update notes / 2023-07-19 sergiitk: -# Cronet (API and Embedded) upgrade is blocked by https://github.com/grpc/grpc-java/issues/10396. -cronet-api = "org.chromium.net:cronet-api:108.5359.79" -cronet-embedded = "org.chromium.net:cronet-embedded:108.5359.79" +cronet-api = "org.chromium.net:cronet-api:119.6045.31" +cronet-embedded = "org.chromium.net:cronet-embedded:119.6045.31" errorprone-annotations = "com.google.errorprone:error_prone_annotations:2.23.0" errorprone-core = "com.google.errorprone:error_prone_core:2.23.0" google-api-protos = "com.google.api.grpc:proto-google-common-protos:2.29.0"