package org.redisson; import java.io.IOException; import java.util.Iterator; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.reactivestreams.Publisher; import org.redisson.api.RCollectionReactive; import org.redisson.api.RScoredSortedSetReactive; import org.redisson.api.RedissonReactiveClient; import org.redisson.config.Config; import reactor.rx.Promise; import reactor.rx.Streams; public abstract class BaseReactiveTest { protected RedissonReactiveClient redisson; protected static RedissonReactiveClient defaultRedisson; @BeforeClass public static void beforeClass() throws IOException, InterruptedException { if (!RedissonRuntimeEnvironment.isTravis) { RedisRunner.startDefaultRedisServerInstance(); defaultRedisson = createInstance(); } } @AfterClass public static void afterClass() throws IOException, InterruptedException { if (!RedissonRuntimeEnvironment.isTravis) { RedisRunner.shutDownDefaultRedisServerInstance(); defaultRedisson.shutdown(); } } @Before public void before() throws IOException, InterruptedException { if (RedissonRuntimeEnvironment.isTravis) { RedisRunner.startDefaultRedisServerInstance(); redisson = createInstance(); } else { if (redisson == null) { redisson = defaultRedisson; } redisson.getKeys().flushall(); } } @After public void after() throws InterruptedException { if (RedissonRuntimeEnvironment.isTravis) { redisson.shutdown(); RedisRunner.shutDownDefaultRedisServerInstance(); } } public static <V> Iterable<V> sync(RScoredSortedSetReactive<V> list) { return Streams.create(list.iterator()).toList().poll(); } public static <V> Iterable<V> sync(RCollectionReactive<V> list) { return Streams.create(list.iterator()).toList().poll(); } public static <V> Iterator<V> toIterator(Publisher<V> pub) { return Streams.create(pub).toList().poll().iterator(); } public static <V> Iterable<V> toIterable(Publisher<V> pub) { return Streams.create(pub).toList().poll(); } public static <V> V sync(Publisher<V> ob) { Promise<V> promise; if (Promise.class.isAssignableFrom(ob.getClass())) { promise = (Promise<V>) ob; } else { promise = Streams.wrap(ob).next(); } V val = promise.poll(); if (promise.isError()) { throw new RuntimeException(promise.reason()); } return val; } public static RedissonReactiveClient createInstance() { Config config = BaseTest.createConfig(); return Redisson.createReactive(config); } }