mirror of https://github.com/grpc/grpc-java.git
core: Don't use real time when comparing deadline in ClientCallImplTest
We can just compare the Deadline instances instead of asserting that very little time has passed during the test. Real time probably still matters in the test, but only insofar that the deadline is not expired by the time ClientCallImpl sees it. This fixes a test failure seen in the emulated aarch64 CI. Note that the message says "ns" when it should say "ms", but this change deletes the code with that typo. ``` java.lang.AssertionError: timeout: 548 ns at org.junit.Assert.fail(Assert.java:89) at org.junit.Assert.assertTrue(Assert.java:42) at io.grpc.internal.ClientCallImplTest.assertTimeoutBetween(ClientCallImplTest.java:1102) at io.grpc.internal.ClientCallImplTest.contextDeadlineShouldBePropagatedToStream(ClientCallImplTest.java:828) ```
This commit is contained in:
parent
2c6d6e62dc
commit
af117e9764
|
|
@ -807,8 +807,8 @@ public class ClientCallImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void contextDeadlineShouldBePropagatedToStream() {
|
public void contextDeadlineShouldBePropagatedToStream() {
|
||||||
Context context = Context.current()
|
Deadline deadline = Deadline.after(1000, TimeUnit.MILLISECONDS);
|
||||||
.withDeadlineAfter(1000, TimeUnit.MILLISECONDS, deadlineCancellationExecutor);
|
Context context = Context.current().withDeadline(deadline, deadlineCancellationExecutor);
|
||||||
Context origContext = context.attach();
|
Context origContext = context.attach();
|
||||||
|
|
||||||
ClientCallImpl<Void, Void> call = new ClientCallImpl<>(
|
ClientCallImpl<Void, Void> call = new ClientCallImpl<>(
|
||||||
|
|
@ -822,16 +822,13 @@ public class ClientCallImplTest {
|
||||||
|
|
||||||
context.detach(origContext);
|
context.detach(origContext);
|
||||||
|
|
||||||
ArgumentCaptor<Deadline> deadlineCaptor = ArgumentCaptor.forClass(Deadline.class);
|
verify(stream).setDeadline(eq(deadline));
|
||||||
verify(stream).setDeadline(deadlineCaptor.capture());
|
|
||||||
|
|
||||||
assertTimeoutBetween(deadlineCaptor.getValue().timeRemaining(TimeUnit.MILLISECONDS), 600, 1000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void contextDeadlineShouldOverrideLargerCallOptionsDeadline() {
|
public void contextDeadlineShouldOverrideLargerCallOptionsDeadline() {
|
||||||
Context context = Context.current()
|
Deadline deadline = Deadline.after(1000, TimeUnit.MILLISECONDS);
|
||||||
.withDeadlineAfter(1000, TimeUnit.MILLISECONDS, deadlineCancellationExecutor);
|
Context context = Context.current().withDeadline(deadline, deadlineCancellationExecutor);
|
||||||
Context origContext = context.attach();
|
Context origContext = context.attach();
|
||||||
|
|
||||||
CallOptions callOpts = baseCallOptions.withDeadlineAfter(2000, TimeUnit.MILLISECONDS);
|
CallOptions callOpts = baseCallOptions.withDeadlineAfter(2000, TimeUnit.MILLISECONDS);
|
||||||
|
|
@ -846,19 +843,17 @@ public class ClientCallImplTest {
|
||||||
|
|
||||||
context.detach(origContext);
|
context.detach(origContext);
|
||||||
|
|
||||||
ArgumentCaptor<Deadline> deadlineCaptor = ArgumentCaptor.forClass(Deadline.class);
|
verify(stream).setDeadline(eq(deadline));
|
||||||
verify(stream).setDeadline(deadlineCaptor.capture());
|
|
||||||
|
|
||||||
assertTimeoutBetween(deadlineCaptor.getValue().timeRemaining(TimeUnit.MILLISECONDS), 600, 1000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void contextDeadlineShouldNotOverrideSmallerCallOptionsDeadline() {
|
public void contextDeadlineShouldNotOverrideSmallerCallOptionsDeadline() {
|
||||||
Context context = Context.current()
|
Context context = Context.current()
|
||||||
.withDeadlineAfter(2000, TimeUnit.MILLISECONDS, deadlineCancellationExecutor);
|
.withDeadlineAfter(2000, TimeUnit.MILLISECONDS, deadlineCancellationExecutor);
|
||||||
|
Deadline deadline = Deadline.after(1000, TimeUnit.MILLISECONDS);
|
||||||
Context origContext = context.attach();
|
Context origContext = context.attach();
|
||||||
|
|
||||||
CallOptions callOpts = baseCallOptions.withDeadlineAfter(1000, TimeUnit.MILLISECONDS)
|
CallOptions callOpts = baseCallOptions.withDeadline(deadline)
|
||||||
.withOption(NAME_RESOLUTION_DELAYED, 1200000000L);
|
.withOption(NAME_RESOLUTION_DELAYED, 1200000000L);
|
||||||
ClientCallImpl<Void, Void> call = new ClientCallImpl<>(
|
ClientCallImpl<Void, Void> call = new ClientCallImpl<>(
|
||||||
method,
|
method,
|
||||||
|
|
@ -871,10 +866,8 @@ public class ClientCallImplTest {
|
||||||
|
|
||||||
context.detach(origContext);
|
context.detach(origContext);
|
||||||
|
|
||||||
ArgumentCaptor<Deadline> deadlineCaptor = ArgumentCaptor.forClass(Deadline.class);
|
verify(stream).setDeadline(eq(deadline));
|
||||||
verify(stream).setDeadline(deadlineCaptor.capture());
|
|
||||||
|
|
||||||
assertTimeoutBetween(deadlineCaptor.getValue().timeRemaining(TimeUnit.MILLISECONDS), 600, 1000);
|
|
||||||
fakeClock.forwardNanos(TimeUnit.MILLISECONDS.toNanos(1000));
|
fakeClock.forwardNanos(TimeUnit.MILLISECONDS.toNanos(1000));
|
||||||
verify(stream, timeout(1000)).cancel(statusCaptor.capture());
|
verify(stream, timeout(1000)).cancel(statusCaptor.capture());
|
||||||
String deadlineExceedDescription = statusCaptor.getValue().getDescription();
|
String deadlineExceedDescription = statusCaptor.getValue().getDescription();
|
||||||
|
|
@ -884,7 +877,8 @@ public class ClientCallImplTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void callOptionsDeadlineShouldBePropagatedToStream() {
|
public void callOptionsDeadlineShouldBePropagatedToStream() {
|
||||||
CallOptions callOpts = baseCallOptions.withDeadlineAfter(1000, TimeUnit.MILLISECONDS);
|
Deadline deadline = Deadline.after(1000, TimeUnit.MILLISECONDS);
|
||||||
|
CallOptions callOpts = baseCallOptions.withDeadline(deadline);
|
||||||
ClientCallImpl<Void, Void> call = new ClientCallImpl<>(
|
ClientCallImpl<Void, Void> call = new ClientCallImpl<>(
|
||||||
method,
|
method,
|
||||||
MoreExecutors.directExecutor(),
|
MoreExecutors.directExecutor(),
|
||||||
|
|
@ -894,10 +888,7 @@ public class ClientCallImplTest {
|
||||||
channelCallTracer, configSelector);
|
channelCallTracer, configSelector);
|
||||||
call.start(callListener, new Metadata());
|
call.start(callListener, new Metadata());
|
||||||
|
|
||||||
ArgumentCaptor<Deadline> deadlineCaptor = ArgumentCaptor.forClass(Deadline.class);
|
verify(stream).setDeadline(eq(deadline));
|
||||||
verify(stream).setDeadline(deadlineCaptor.capture());
|
|
||||||
|
|
||||||
assertTimeoutBetween(deadlineCaptor.getValue().timeRemaining(TimeUnit.MILLISECONDS), 600, 1000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -1097,11 +1088,6 @@ public class ClientCallImplTest {
|
||||||
assertEquals(attrs, call.getAttributes());
|
assertEquals(attrs, call.getAttributes());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void assertTimeoutBetween(long timeout, long from, long to) {
|
|
||||||
assertTrue("timeout: " + timeout + " ns", timeout <= to);
|
|
||||||
assertTrue("timeout: " + timeout + " ns", timeout >= from);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final class DelayedExecutor implements Executor {
|
private static final class DelayedExecutor implements Executor {
|
||||||
private final BlockingQueue<Runnable> commands = new LinkedBlockingQueue<>();
|
private final BlockingQueue<Runnable> commands = new LinkedBlockingQueue<>();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue