/*******************************************************************************
* Copyright (c) 2005, 2014 springside.github.io
*
* Licensed under the Apache License, Version 2.0 (the "License");
*******************************************************************************/
package org.springside.modules.nosql.redis;
import static org.assertj.core.api.Assertions.*;
import java.util.HashMap;
import java.util.Map;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.mockito.Mockito;
import org.springside.modules.nosql.redis.JedisTemplate.JedisAction;
import org.springside.modules.nosql.redis.JedisTemplate.JedisActionNoResult;
import org.springside.modules.nosql.redis.pool.JedisPool;
import redis.clients.jedis.Jedis;
import com.lordofthejars.nosqlunit.redis.EmbeddedRedis;
import com.lordofthejars.nosqlunit.redis.EmbeddedRedis.EmbeddedRedisRuleBuilder;
import com.lordofthejars.nosqlunit.redis.EmbeddedRedisInstances;
public class JedisShardedTemplateTest {
private JedisShardedTemplate jedisTemplate;
@ClassRule
public static EmbeddedRedis embeddedRedisRule = EmbeddedRedisRuleBuilder.newEmbeddedRedisRule().build();
@Before
public void setup() {
Jedis embeddedRedis = EmbeddedRedisInstances.getInstance().getDefaultJedis();
JedisPool jedisPool1 = Mockito.mock(JedisPool.class);
Mockito.when(jedisPool1.getResource()).thenReturn(embeddedRedis);
JedisPool jedisPool2 = Mockito.mock(JedisPool.class);
Mockito.when(jedisPool2.getResource()).thenReturn(embeddedRedis);
jedisTemplate = new JedisShardedTemplate(new JedisPool[] { jedisPool1, jedisPool2 });
}
@Test
public void stringActions() {
String key = "test.string.key";
String notExistKey = key + "not.exist";
String value = "123";
// get/set
jedisTemplate.set(key, value);
assertThat(jedisTemplate.get(key)).isEqualTo(value);
assertThat(jedisTemplate.get(notExistKey)).isNull();
// setnx
assertThat(jedisTemplate.setnx(key, value)).isFalse();
assertThat(jedisTemplate.setnx(key + "nx", value)).isTrue();
// incr/decr
jedisTemplate.incr(key);
assertThat(jedisTemplate.get(key)).isEqualTo("124");
jedisTemplate.decr(key);
assertThat(jedisTemplate.get(key)).isEqualTo("123");
}
@Test
public void hashActions() {
String key = "test.hash.key";
String field1 = "aa";
String field2 = "bb";
String notExistField = field1 + "not.exist";
String value1 = "123";
String value2 = "456";
// hget/hset
jedisTemplate.hset(key, field1, value1);
assertThat(jedisTemplate.hget(key, field1)).isEqualTo(value1);
assertThat(jedisTemplate.hget(key, notExistField)).isNull();
// hmget/hmset
Map<String, String> map = new HashMap<String, String>();
map.put(field1, value1);
map.put(field2, value2);
jedisTemplate.hmset(key, map);
assertThat(jedisTemplate.hmget(key, new String[] { field1, field2 })).containsExactly(value1, value2);
// hkeys
assertThat(jedisTemplate.hkeys(key)).contains(field1, field2);
// hdel
assertThat(jedisTemplate.hdel(key, field1));
assertThat(jedisTemplate.hget(key, field1)).isNull();
}
@Test
public void listActions() {
String key = "test.list.key";
String value = "123";
String value2 = "456";
// push/pop single element
jedisTemplate.lpush(key, value);
assertThat(jedisTemplate.llen(key)).isEqualTo(1);
assertThat(jedisTemplate.rpop(key)).isEqualTo(value);
assertThat(jedisTemplate.rpop(key)).isNull();
// push/pop two elements
jedisTemplate.lpush(key, value);
jedisTemplate.lpush(key, value2);
assertThat(jedisTemplate.llen(key)).isEqualTo(2);
assertThat(jedisTemplate.rpop(key)).isEqualTo(value);
assertThat(jedisTemplate.rpop(key)).isEqualTo(value2);
// remove elements
jedisTemplate.lpush(key, value);
jedisTemplate.lpush(key, value);
jedisTemplate.lpush(key, value);
assertThat(jedisTemplate.llen(key)).isEqualTo(3);
assertThat(jedisTemplate.lremFirst(key, value)).isTrue();
assertThat(jedisTemplate.llen(key)).isEqualTo(2);
assertThat(jedisTemplate.lremAll(key, value)).isTrue();
assertThat(jedisTemplate.llen(key)).isEqualTo(0);
assertThat(jedisTemplate.lremAll(key, value)).isFalse();
}
@Test
public void orderedSetActions() {
String key = "test.orderedSet.key";
String member = "abc";
String member2 = "def";
double score1 = 1;
double score11 = 11;
double score2 = 2;
// zadd
assertThat(jedisTemplate.zadd(key, score1, member)).isTrue();
assertThat(jedisTemplate.zadd(key, score2, member2)).isTrue();
// zcard
assertThat(jedisTemplate.zcard(key)).isEqualTo(2);
assertThat(jedisTemplate.zcard(key + "not.exist")).isEqualTo(0);
// zrem
assertThat(jedisTemplate.zrem(key, member2)).isTrue();
assertThat(jedisTemplate.zcard(key)).isEqualTo(1);
assertThat(jedisTemplate.zrem(key, member2 + "not.exist")).isFalse();
// unique & zscore
assertThat(jedisTemplate.zadd(key, score11, member)).isFalse();
assertThat(jedisTemplate.zcard(key)).isEqualTo(1);
assertThat(jedisTemplate.zscore(key, member)).isEqualTo(score11);
assertThat(jedisTemplate.zscore(key, member + "not.exist")).isNull();
}
@Test
public void execute() {
final String key = "test.string.key";
final String value = "123";
jedisTemplate.execute(key, new JedisActionNoResult() {
@Override
public void action(Jedis jedis) {
jedis.set(key, value);
}
});
assertThat(jedisTemplate.get(key)).isEqualTo(value);
String result = jedisTemplate.execute(key, new JedisAction<String>() {
@Override
public String action(Jedis jedis) {
return jedis.get(key);
}
});
assertThat(result).isEqualTo(value);
}
}