Add support for microseconds using TIME.

Closes #526.
Original pull request: #526.
This commit is contained in:
Mark Paluch
2021-03-02 14:51:18 +01:00
parent 773acd09b2
commit 102ee017aa
17 changed files with 154 additions and 47 deletions

View File

@@ -26,6 +26,8 @@ import static org.springframework.data.redis.connection.RedisGeoCommands.GeoRadi
import static org.springframework.data.redis.core.ScanOptions.*;
import java.time.Duration;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;
@@ -2117,6 +2119,31 @@ public abstract class AbstractConnectionIntegrationTests {
assertThat((Long) results.get(0) > 0).isTrue();
}
@Test // GH-526
void testGetTimeShouldRequestServerTimeAsMicros() {
actual.add(connection.time(TimeUnit.MICROSECONDS));
actual.add(connection.time(TimeUnit.SECONDS));
actual.add(connection.time(TimeUnit.HOURS));
List<Object> results = getResults();
assertThat(results).isNotEmpty();
assertThat(results.get(0)).isNotNull();
Instant now = Instant.now();
Instant reference = Instant.parse("1970-01-01T00:00:00.0Z");
Instant micros = reference.plus(Duration.ofNanos(TimeUnit.MICROSECONDS.toNanos((Long) results.get(0))));
Instant seconds = reference.plus(Duration.ofNanos(TimeUnit.SECONDS.toNanos((Long) results.get(1))));
Instant hours = reference.plus(Duration.ofNanos(TimeUnit.HOURS.toNanos((Long) results.get(2))));
assertThat(micros).isCloseTo(now, within(1, ChronoUnit.MINUTES));
assertThat(seconds).isCloseTo(now, within(1, ChronoUnit.MINUTES));
assertThat(hours).isCloseTo(now, within(1, ChronoUnit.HOURS));
}
@Test // DATAREDIS-269
public void clientSetNameWorksCorrectly() {
connection.setClientName("foo".getBytes());

View File

@@ -319,13 +319,11 @@ class LettuceClusterConnectionUnitTests {
void timeShouldBeExecutedOnArbitraryNode() {
List<byte[]> values = Arrays.asList("1449655759".getBytes(), "92217".getBytes());
when(clusterConnection1Mock.time()).thenReturn(values);
when(clusterConnection2Mock.time()).thenReturn(values);
when(clusterConnection3Mock.time()).thenReturn(values);
when(dedicatedConnectionMock.time()).thenReturn(new LettuceServerCommands.CompletedRedisFuture<>(values));
connection.time();
verifyInvocationsAcross("time", times(1), clusterConnection1Mock, clusterConnection2Mock, clusterConnection3Mock);
verify(dedicatedConnectionMock).time();
}
@Test // DATAREDIS-315