@Test public void noCommandsExecutedAfterConnectionIsDisconnected() throws Exception { RedisCommands<String, String> connection = client.connect().sync(); connection.quit(); Wait.untilTrue(() -> !connection.isOpen()).waitOrTimeout(); try { connection.incr(key); } catch (RedisException e) { assertThat(e).isInstanceOf(RedisException.class); } connection.close(); RedisCommands<String, String> connection2 = client.connect().sync(); connection2.quit(); try { Wait.untilTrue(() -> !connection.isOpen()).waitOrTimeout(); connection2.incr(key); } catch (Exception e) { assertThat(e).isExactlyInstanceOf(RedisException.class).hasMessageContaining("not connected"); } connection2.close(); }
@Test public void commandIsExecutedOnce() throws Exception { RedisCommands<String, String> connection = client.connect().sync(); connection.set(key, "1"); connection.incr(key); assertThat(connection.get(key)).isEqualTo("2"); connection.incr(key); assertThat(connection.get(key)).isEqualTo("3"); connection.incr(key); assertThat(connection.get(key)).isEqualTo("4"); connection.close(); }
@Test public void commandCancelledOverSyncAPIAfterConnectionIsDisconnected() throws Exception { RedisCommands<String, String> connection = client.connect().sync(); RedisCommands<String, String> verificationConnection = client.connect().sync(); connection.set(key, "1"); ConnectionWatchdog connectionWatchdog = Connections.getConnectionWatchdog(connection.getStatefulConnection()); connectionWatchdog.setListenOnChannelInactive(false); connection.quit(); Wait.untilTrue(() -> !connection.isOpen()).waitOrTimeout(); try { connection.incr(key); } catch (RedisException e) { assertThat(e).isExactlyInstanceOf(RedisCommandTimeoutException.class); } assertThat(verificationConnection.get("key")).isEqualTo("1"); assertThat(getQueue(getRedisChannelHandler(connection))).isEmpty(); assertThat(getCommandBuffer(getRedisChannelHandler(connection)).size()).isGreaterThan(0); connectionWatchdog.setListenOnChannelInactive(true); connectionWatchdog.scheduleReconnect(); while (!getCommandBuffer(getRedisChannelHandler(connection)).isEmpty() || !getQueue(getRedisChannelHandler(connection)).isEmpty()) { Thread.sleep(10); } assertThat(connection.get(key)).isEqualTo("1"); connection.close(); verificationConnection.close(); }