api:Provide a default implementation for new method added to ManagedTranport.Listener to support ClientTransportFilters (#10795)

* Provide a default implementation for new method added to ManagedTransport.Listener to support ClientTransportFilters
* Relax test constraint to reduce flakiness due to timing.
* Add test for listener.filterTransport.
This commit is contained in:
Larry Safran 2024-01-04 14:19:13 -08:00 committed by GitHub
parent f01c110f77
commit 4b2e5eddd2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 68 additions and 3 deletions

View File

@ -706,7 +706,7 @@ public class ContextTest {
@Test
public void innerDeadlineCompletesBeforeOuter() throws Exception {
Context base = Context.current().withDeadline(Deadline.after(2, TimeUnit.SECONDS), scheduler);
Context base = Context.current().withDeadline(Deadline.after(3, TimeUnit.SECONDS), scheduler);
Context child = base.withDeadline(Deadline.after(1, TimeUnit.SECONDS), scheduler);
child.addListener(cancellationListener, MoreExecutors.directExecutor());
assertFalse(base.isCancelled());
@ -719,7 +719,7 @@ public class ContextTest {
deadlineLatch = new CountDownLatch(1);
base.addListener(cancellationListener, MoreExecutors.directExecutor());
assertTrue(deadlineLatch.await(2, TimeUnit.SECONDS));
assertTrue(deadlineLatch.await(4, TimeUnit.SECONDS));
assertTrue(base.isCancelled());
assertTrue(base.cancellationCause() instanceof TimeoutException);
assertNotSame(base.cancellationCause(), child.cancellationCause());

View File

@ -110,6 +110,8 @@ public interface ManagedClientTransport extends ClientTransport {
* Called just before {@link #transportReady} to allow direct modification of transport
* Attributes.
*/
Attributes filterTransport(Attributes attributes);
default Attributes filterTransport(Attributes attributes) {
return attributes;
}
}
}

View File

@ -0,0 +1,63 @@
/*
* Copyright 2024 The gRPC Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.grpc.internal;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import io.grpc.Attributes;
import io.grpc.Status;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@RunWith(JUnit4.class)
public class ManagedClientTransportTest {
@Test
public void testListener() {
ManagedClientTransport.Listener listener = new ManagedClientTransport.Listener() {
@Override
public void transportShutdown(Status s) {}
@Override
public void transportTerminated() {}
@Override
public void transportReady() {}
@Override
public void transportInUse(boolean inUse) {}
};
// Test that the listener methods do not throw.
listener.transportShutdown(Status.OK);
listener.transportTerminated();
listener.transportReady();
listener.transportInUse(true);
assertNull(listener.filterTransport(null));
Attributes attributes = Attributes.newBuilder()
.set(Attributes.Key.create("yolo"), "To be, or not to be?")
.set(Attributes.Key.create("foo"), "bar!")
.set(Attributes.Key.create("bar"), "foo?")
.build();
assertEquals(attributes, listener.filterTransport(attributes));
}
}