226 lines
6.5 KiB
Java
Raw Normal View History

package com.baeldung;
import java.io.IOException;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Pipeline;
import redis.clients.jedis.Response;
import redis.clients.jedis.Transaction;
import redis.embedded.RedisServer;
/**
* Unit test for Redis Java library - Jedis.
*/
public class JedisTest {
2016-07-10 11:03:46 +02:00
private Jedis jedis;
private static RedisServer redisServer;
2016-07-10 11:03:46 +02:00
public JedisTest() {
jedis = new Jedis();
}
2016-07-07 20:33:37 +02:00
2016-07-10 11:03:46 +02:00
@BeforeClass
public static void setUp() throws IOException {
redisServer = new RedisServer(6379);
redisServer.start();
}
2016-07-07 20:33:37 +02:00
2016-07-10 11:03:46 +02:00
@AfterClass
public static void destroy() {
redisServer.stop();
}
2016-07-10 11:03:46 +02:00
@After
public void flush() {
jedis.flushAll();
}
2016-07-10 11:03:46 +02:00
@Test
public void givenAString_thenSaveItAsRedisStrings() {
2016-07-10 11:03:46 +02:00
String key = "key";
String value = "value";
2016-07-10 11:03:46 +02:00
jedis.set(key, value);
String value2 = jedis.get(key);
2016-07-10 11:03:46 +02:00
Assert.assertEquals(value, value2);
}
2016-07-10 11:03:46 +02:00
@Test
public void givenListElements_thenSaveThemInRedisList() {
2016-07-10 11:03:46 +02:00
String queue = "queue#tasks";
2016-07-10 11:03:46 +02:00
String taskOne = "firstTask";
String taskTwo = "secondTask";
String taskThree = "thirdTask";
2016-07-10 11:03:46 +02:00
jedis.lpush(queue, taskOne, taskTwo);
2016-07-10 11:03:46 +02:00
String taskReturnedOne = jedis.rpop(queue);
2016-07-10 11:03:46 +02:00
jedis.lpush(queue, taskThree);
Assert.assertEquals(taskOne, taskReturnedOne);
2016-07-10 11:03:46 +02:00
String taskReturnedTwo = jedis.rpop(queue);
String taskReturnedThree = jedis.rpop(queue);
2016-07-10 11:03:46 +02:00
Assert.assertEquals(taskTwo, taskReturnedTwo);
Assert.assertEquals(taskThree, taskReturnedThree);
2016-07-10 11:03:46 +02:00
String taskReturnedFour = jedis.rpop(queue);
Assert.assertNull(taskReturnedFour);
}
2016-07-10 11:03:46 +02:00
@Test
public void givenSetElements_thenSaveThemInRedisSet() {
2016-07-10 11:03:46 +02:00
String countries = "countries";
2016-07-10 11:03:46 +02:00
String countryOne = "Spain";
String countryTwo = "Ireland";
String countryThree = "Ireland";
2016-07-10 11:03:46 +02:00
jedis.sadd(countries, countryOne);
2016-07-10 11:03:46 +02:00
Set<String> countriesSet = jedis.smembers(countries);
Assert.assertEquals(1, countriesSet.size());
2016-07-10 11:03:46 +02:00
jedis.sadd(countries, countryTwo);
countriesSet = jedis.smembers(countries);
Assert.assertEquals(2, countriesSet.size());
2016-07-10 11:03:46 +02:00
jedis.sadd(countries, countryThree);
countriesSet = jedis.smembers(countries);
Assert.assertEquals(2, countriesSet.size());
2016-07-10 11:03:46 +02:00
boolean exists = jedis.sismember(countries, countryThree);
Assert.assertTrue(exists);
}
2016-07-10 11:03:46 +02:00
@Test
public void givenObjectFields_thenSaveThemInRedisHash() {
2016-07-10 11:03:46 +02:00
String key = "user#1";
2016-07-10 11:03:46 +02:00
String field = "name";
String value = "William";
2016-07-10 11:03:46 +02:00
String field2 = "job";
String value2 = "politician";
2016-07-10 11:03:46 +02:00
jedis.hset(key, field, value);
jedis.hset(key, field2, value2);
2016-07-10 11:03:46 +02:00
String value3 = jedis.hget(key, field);
Assert.assertEquals(value, value3);
2016-07-10 11:03:46 +02:00
Map<String, String> fields = jedis.hgetAll(key);
String value4 = fields.get(field2);
Assert.assertEquals(value2, value4);
}
2016-07-10 11:03:46 +02:00
@Test
public void givenARanking_thenSaveItInRedisSortedSet() {
2016-07-10 11:03:46 +02:00
String key = "ranking";
2016-07-10 11:03:46 +02:00
Map<String, Double> scores = new HashMap<>();
2016-07-10 11:03:46 +02:00
scores.put("PlayerOne", 3000.0);
scores.put("PlayerTwo", 1500.0);
scores.put("PlayerThree", 8200.0);
2016-07-10 11:03:46 +02:00
for (String player : scores.keySet()) {
jedis.zadd(key, scores.get(player), player);
}
2016-07-10 11:03:46 +02:00
Set<String> players = jedis.zrevrange(key, 0, 1);
Assert.assertEquals("PlayerThree", players.iterator().next());
2016-07-10 11:03:46 +02:00
long rank = jedis.zrevrank(key, "PlayerOne");
Assert.assertEquals(1, rank);
}
2016-07-10 11:03:46 +02:00
@Test
public void givenMultipleOperationsThatNeedToBeExecutedAtomically_thenWrapThemInATransaction() {
2016-07-10 11:03:46 +02:00
String friendsPrefix = "friends#";
2016-07-10 11:03:46 +02:00
String userOneId = "4352523";
String userTwoId = "5552321";
2016-07-10 11:03:46 +02:00
Transaction t = jedis.multi();
t.sadd(friendsPrefix + userOneId, userTwoId);
t.sadd(friendsPrefix + userTwoId, userOneId);
t.exec();
2016-07-10 11:03:46 +02:00
boolean exists = jedis.sismember(friendsPrefix + userOneId, userTwoId);
Assert.assertTrue(exists);
2016-07-10 11:03:46 +02:00
exists = jedis.sismember(friendsPrefix + userTwoId, userOneId);
Assert.assertTrue(exists);
}
2016-07-10 11:03:46 +02:00
@Test
public void givenMultipleIndependentOperations_whenNetworkOptimizationIsImportant_thenWrapThemInAPipeline() {
2016-07-10 11:03:46 +02:00
String userOneId = "4352523";
String userTwoId = "4849888";
Pipeline p = jedis.pipelined();
p.sadd("searched#" + userOneId, "paris");
p.zadd("ranking", 126, userOneId);
p.zadd("ranking", 325, userTwoId);
Response<Boolean> pipeExists = p.sismember("searched#" + userOneId, "paris");
Response<Set<String>> pipeRanking = p.zrange("ranking", 0, -1);
p.sync();
Assert.assertTrue(pipeExists.get());
Assert.assertEquals(2, pipeRanking.get().size());
}
@Test
public void givenAPoolConfiguration_thenCreateAJedisPool() {
2016-07-10 11:03:46 +02:00
final JedisPoolConfig poolConfig = buildPoolConfig();
try (JedisPool jedisPool = new JedisPool(poolConfig, "localhost"); Jedis jedis = jedisPool.getResource()) {
// do simple operation to verify that the Jedis resource is working
// properly
String key = "key";
String value = "value";
jedis.set(key, value);
String value2 = jedis.get(key);
Assert.assertEquals(value, value2);
// flush Redis
jedis.flushAll();
}
}
private JedisPoolConfig buildPoolConfig() {
final JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(128);
poolConfig.setMaxIdle(128);
poolConfig.setMinIdle(16);
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
poolConfig.setTestWhileIdle(true);
poolConfig.setMinEvictableIdleTimeMillis(Duration.ofSeconds(60).toMillis());
poolConfig.setTimeBetweenEvictionRunsMillis(Duration.ofSeconds(30).toMillis());
poolConfig.setNumTestsPerEvictionRun(3);
poolConfig.setBlockWhenExhausted(true);
return poolConfig;
}
}