package com.lambdaworks.redis.cluster.commands.rx;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.LinkedHashMap;
import java.util.Map;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import rx.Observable;
import com.lambdaworks.redis.FastShutdown;
import com.lambdaworks.redis.RedisURI;
import com.lambdaworks.redis.TestSettings;
import com.lambdaworks.redis.api.sync.RedisCommands;
import com.lambdaworks.redis.cluster.ClusterTestUtil;
import com.lambdaworks.redis.cluster.RedisClusterClient;
import com.lambdaworks.redis.cluster.api.StatefulRedisClusterConnection;
import com.lambdaworks.redis.cluster.api.rx.RedisAdvancedClusterReactiveCommands;
import com.lambdaworks.redis.commands.StringCommandTest;
import com.lambdaworks.redis.commands.rx.RxSyncInvocationHandler;
/**
* @author Mark Paluch
*/
public class StringClusterRxCommandTest extends StringCommandTest {
private static RedisClusterClient redisClusterClient;
private StatefulRedisClusterConnection<String, String> clusterConnection;
@BeforeClass
public static void setupClient() {
redisClusterClient = new RedisClusterClient(RedisURI.Builder.redis(TestSettings.host(), TestSettings.port(900)).build());
}
@AfterClass
public static void closeClient() {
FastShutdown.shutdown(redisClusterClient);
}
@Before
public void openConnection() throws Exception {
redis = connect();
ClusterTestUtil.flushDatabaseOfAllNodes(clusterConnection);
}
@Override
protected RedisCommands<String, String> connect() {
clusterConnection = redisClusterClient.connectCluster().getStatefulConnection();
return RxSyncInvocationHandler.sync(redisClusterClient.connectCluster().getStatefulConnection());
}
@Test
public void msetnx() throws Exception {
redis.set("one", "1");
Map<String, String> map = new LinkedHashMap<>();
map.put("one", "1");
map.put("two", "2");
assertThat(redis.msetnx(map)).isFalse();
redis.del("one");
redis.del("two"); // probably set on a different node
assertThat(redis.msetnx(map)).isTrue();
assertThat(redis.get("two")).isEqualTo("2");
}
@Test
public void mget() throws Exception {
redis.set(key, value);
redis.set("key1", value);
redis.set("key2", value);
RedisAdvancedClusterReactiveCommands<String, String> reactive = clusterConnection.reactive();
Observable<String> mget = reactive.mget(key, "key1", "key2");
String first = mget.toBlocking().first();
assertThat(first).isEqualTo(value);
}
}