diff options
author | zpencer <spencerfang@google.com> | 2017-11-13 15:58:29 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-13 15:58:29 -0800 |
commit | 47bee4feee2830b3cf34f14d2a13e06c8260aba9 (patch) | |
tree | 350650504994924f235ea9bd902ded377832f983 /testing | |
parent | 51bbc1a4bd7bcf85722f65949aff5dcbfda3ab9a (diff) | |
download | grpc-grpc-java-47bee4feee2830b3cf34f14d2a13e06c8260aba9.tar.gz |
core,netty: plumb fake clock into transport tracer tests (#3724)
Diffstat (limited to 'testing')
-rw-r--r-- | testing/src/main/java/io/grpc/internal/testing/AbstractTransportTest.java | 52 |
1 files changed, 36 insertions, 16 deletions
diff --git a/testing/src/main/java/io/grpc/internal/testing/AbstractTransportTest.java b/testing/src/main/java/io/grpc/internal/testing/AbstractTransportTest.java index 0626100d8..d782ef2db 100644 --- a/testing/src/main/java/io/grpc/internal/testing/AbstractTransportTest.java +++ b/testing/src/main/java/io/grpc/internal/testing/AbstractTransportTest.java @@ -190,6 +190,21 @@ public abstract class AbstractTransportTest { } } + /** + * Moves the clock forward, for tests that require moving the clock forward. It is the transport + * subclass's responsibility to implement this method. + */ + protected void advanceClock(long offset, TimeUnit unit) { + throw new UnsupportedOperationException(); + } + + /** + * Returns the current time, for tests that rely on the clock. + */ + protected long currentTimeMillis() { + throw new UnsupportedOperationException(); + } + // TODO(ejona): // multiple streams on same transport // multiple client transports to same server @@ -1409,23 +1424,23 @@ public abstract class AbstractTransportTest { serverTransportListener.transport.getTransportStats().get(); assertEquals(1, serverAfter.streamsStarted); serverFirstTimestampNanos = serverAfter.lastStreamCreatedTimeNanos; - assertThat(System.currentTimeMillis() - - TimeUnit.NANOSECONDS.toMillis(serverAfter.lastStreamCreatedTimeNanos)).isAtMost(50L); + assertEquals( + currentTimeMillis(), + TimeUnit.NANOSECONDS.toMillis(serverAfter.lastStreamCreatedTimeNanos)); TransportTracer.Stats clientAfter = client.getTransportStats().get(); assertEquals(1, clientAfter.streamsStarted); clientFirstTimestampNanos = clientAfter.lastStreamCreatedTimeNanos; - assertThat(System.currentTimeMillis() - - TimeUnit.NANOSECONDS.toMillis(clientFirstTimestampNanos)).isAtMost(50L); + assertEquals( + currentTimeMillis(), + TimeUnit.NANOSECONDS.toMillis(clientFirstTimestampNanos)); ServerStream serverStream = serverStreamCreation.stream; serverStream.close(Status.OK, new Metadata()); } - // lastStreamCreatedTimeNanos is converted from the system milli clock. Sleep a bit to ensure - // it has moved forward in time. - // TODO(zpencer): plumb in a fake clock instead - Thread.sleep(5); + final long elapsedMillis = 100; + advanceClock(100, TimeUnit.MILLISECONDS); // start second stream { @@ -1444,17 +1459,21 @@ public abstract class AbstractTransportTest { TransportTracer.Stats serverAfter = serverTransportListener.transport.getTransportStats().get(); assertEquals(2, serverAfter.streamsStarted); - assertTrue(serverAfter.lastStreamCreatedTimeNanos > serverFirstTimestampNanos); + assertEquals( + TimeUnit.MILLISECONDS.toNanos(elapsedMillis), + serverAfter.lastStreamCreatedTimeNanos - serverFirstTimestampNanos); long serverSecondTimestamp = TimeUnit.NANOSECONDS.toMillis(serverAfter.lastStreamCreatedTimeNanos); - assertThat(System.currentTimeMillis() - serverSecondTimestamp).isAtMost(50L); + assertEquals(currentTimeMillis(), serverSecondTimestamp); TransportTracer.Stats clientAfter = client.getTransportStats().get(); assertEquals(2, clientAfter.streamsStarted); - assertTrue(clientAfter.lastStreamCreatedTimeNanos > clientFirstTimestampNanos); + assertEquals( + TimeUnit.MILLISECONDS.toNanos(elapsedMillis), + clientAfter.lastStreamCreatedTimeNanos - clientFirstTimestampNanos); long clientSecondTimestamp = TimeUnit.NANOSECONDS.toMillis(clientAfter.lastStreamCreatedTimeNanos); - assertThat(System.currentTimeMillis() - clientSecondTimestamp).isAtMost(50L); + assertEquals(currentTimeMillis(), clientSecondTimestamp); ServerStream serverStream = serverStreamCreation.stream; serverStream.close(Status.OK, new Metadata()); @@ -1618,12 +1637,12 @@ public abstract class AbstractTransportTest { assertEquals(1, serverAfter.messagesReceived); long serverTimestamp = TimeUnit.NANOSECONDS.toMillis(serverAfter.lastMessageReceivedTimeNanos); - assertThat(System.currentTimeMillis() - serverTimestamp).isAtMost(50L); + assertEquals(currentTimeMillis(), serverTimestamp); TransportTracer.Stats clientAfter = client.getTransportStats().get(); assertEquals(1, clientAfter.messagesSent); long clientTimestamp = TimeUnit.NANOSECONDS.toMillis(clientAfter.lastMessageSentTimeNanos); - assertThat(System.currentTimeMillis() - clientTimestamp).isAtMost(50L); + assertEquals(currentTimeMillis(), clientTimestamp); serverStream.close(Status.OK, new Metadata()); } @@ -1663,12 +1682,13 @@ public abstract class AbstractTransportTest { serverTransportListener.transport.getTransportStats().get(); assertEquals(1, serverAfter.messagesSent); long serverTimestmap = TimeUnit.NANOSECONDS.toMillis(serverAfter.lastMessageSentTimeNanos); - assertThat(System.currentTimeMillis() - serverTimestmap).isAtMost(50L); + assertEquals(currentTimeMillis(), serverTimestmap); TransportTracer.Stats clientAfter = client.getTransportStats().get(); assertEquals(1, clientAfter.messagesReceived); long clientTimestmap = TimeUnit.NANOSECONDS.toMillis(clientAfter.lastMessageReceivedTimeNanos); - assertThat(System.currentTimeMillis() - clientTimestmap).isAtMost(50L); + assertEquals(currentTimeMillis(), clientTimestmap); + serverStream.close(Status.OK, new Metadata()); } |