package com.lambdaworks.redis;
import static org.assertj.core.api.Assertions.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import rx.observers.TestSubscriber;
import com.lambdaworks.RandomKeys;
import com.lambdaworks.redis.GeoArgs.Unit;
import com.lambdaworks.redis.api.StatefulRedisConnection;
import com.lambdaworks.redis.api.rx.RedisReactiveCommands;
public class ReactiveStreamingOutputTest extends AbstractRedisClientTest {
private RedisReactiveCommands<String, String> reactive;
private TestSubscriber<String> subscriber = TestSubscriber.create();
@Rule
public ExpectedException exception = ExpectedException.none();
private StatefulRedisConnection<String, String> stateful;
@Before
public void openReactiveConnection() throws Exception {
stateful = client.connect();
reactive = stateful.reactive();
}
@After
public void closeReactiveConnection() throws Exception {
reactive.close();
}
@Test
public void keyListCommandShouldReturnAllElements() throws Exception {
redis.mset(RandomKeys.MAP);
reactive.keys("*").subscribe(subscriber);
subscriber.awaitTerminalEvent();
assertThat(subscriber.getOnNextEvents()).containsAll(RandomKeys.KEYS);
}
@Test
public void valueListCommandShouldReturnAllElements() throws Exception {
redis.mset(RandomKeys.MAP);
reactive.mget(RandomKeys.KEYS.toArray(new String[RandomKeys.COUNT])).subscribe(subscriber);
subscriber.awaitTerminalEvent();
assertThat(subscriber.getOnNextEvents()).containsAll(RandomKeys.VALUES);
}
@Test
public void stringListCommandShouldReturnAllElements() throws Exception {
reactive.configGet("*").subscribe(subscriber);
subscriber.awaitTerminalEvent();
assertThat(subscriber.getOnNextEvents().size()).isGreaterThan(120);
}
@Test
public void booleanListCommandShouldReturnAllElements() throws Exception {
TestSubscriber<Boolean> subscriber = TestSubscriber.create();
reactive.scriptExists("a", "b", "c").subscribe(subscriber);
subscriber.awaitTerminalEvent();
assertThat(subscriber.getOnNextEvents()).hasSize(3).doesNotContainNull();
}
@Test
public void scoredValueListCommandShouldReturnAllElements() throws Exception {
TestSubscriber<ScoredValue<String>> subscriber = TestSubscriber.create();
redis.zadd(key, 1d, "v1", 2d, "v2", 3d, "v3");
reactive.zrangeWithScores(key, 0, -1).subscribe(subscriber);
subscriber.awaitTerminalEvent();
assertThat(subscriber.getOnNextEvents()).hasSize(3).contains(sv(1, "v1"), sv(2, "v2"), sv(3, "v3"));
}
@Test
public void geoWithinListCommandShouldReturnAllElements() throws Exception {
TestSubscriber<GeoWithin<String>> subscriber = TestSubscriber.create();
redis.geoadd(key, 50, 20, "value1");
redis.geoadd(key, 50, 21, "value2");
reactive.georadius(key, 50, 20, 1000, Unit.km, new GeoArgs().withHash()).subscribe(subscriber);
subscriber.awaitTerminalEvent();
assertThat(subscriber.getOnNextEvents()).hasSize(2).contains(
new GeoWithin<String>("value1", null, 3542523898362974L, null),
new GeoWithin<>("value2", null, 3542609801095198L, null));
}
@Test
public void geoCoordinatesListCommandShouldReturnAllElements() throws Exception {
TestSubscriber<GeoCoordinates> subscriber = TestSubscriber.create();
redis.geoadd(key, 50, 20, "value1");
redis.geoadd(key, 50, 21, "value2");
reactive.geopos(key, "value1", "value2").subscribe(subscriber);
subscriber.awaitTerminalEvent();
assertThat(subscriber.getOnNextEvents()).hasSize(2).doesNotContainNull();
}
}