when a script returns Null value, jedis throws NullPointerException
This commit is contained in:
@@ -2775,8 +2775,10 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand
|
|||||||
if (result instanceof List<?>) {
|
if (result instanceof List<?>) {
|
||||||
List<?> list = (List<?>) result;
|
List<?> list = (List<?>) result;
|
||||||
List<String> listResult = new ArrayList<String>(list.size());
|
List<String> listResult = new ArrayList<String>(list.size());
|
||||||
for (Object bin : list)
|
for (Object bin : list) {
|
||||||
listResult.add(SafeEncoder.encode((byte[]) bin));
|
listResult.add((bin == null ? null : SafeEncoder
|
||||||
|
.encode((byte[]) bin)));
|
||||||
|
}
|
||||||
|
|
||||||
return listResult;
|
return listResult;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import java.util.List;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import redis.clients.jedis.exceptions.JedisDataException;
|
import redis.clients.jedis.exceptions.JedisDataException;
|
||||||
import redis.clients.jedis.exceptions.JedisException;
|
|
||||||
import redis.clients.util.SafeEncoder;
|
import redis.clients.util.SafeEncoder;
|
||||||
|
|
||||||
public class ScriptingCommandsTest extends JedisCommandTestBase {
|
public class ScriptingCommandsTest extends JedisCommandTestBase {
|
||||||
@@ -52,7 +51,8 @@ public class ScriptingCommandsTest extends JedisCommandTestBase {
|
|||||||
List<String> keys = new ArrayList<String>();
|
List<String> keys = new ArrayList<String>();
|
||||||
keys.add("key1");
|
keys.add("key1");
|
||||||
|
|
||||||
Long response = (Long)jedis.eval(script, keys, new ArrayList<String>());
|
Long response = (Long) jedis
|
||||||
|
.eval(script, keys, new ArrayList<String>());
|
||||||
|
|
||||||
assertEquals(new Long(2), response);
|
assertEquals(new Long(2), response);
|
||||||
}
|
}
|
||||||
@@ -62,77 +62,91 @@ public class ScriptingCommandsTest extends JedisCommandTestBase {
|
|||||||
String script = "return KEYS[1]";
|
String script = "return KEYS[1]";
|
||||||
List<String> keys = new ArrayList<String>();
|
List<String> keys = new ArrayList<String>();
|
||||||
keys.add("key1");
|
keys.add("key1");
|
||||||
String response = (String)jedis.eval(script, keys, new ArrayList<String>());
|
String response = (String) jedis.eval(script, keys,
|
||||||
|
new ArrayList<String>());
|
||||||
|
|
||||||
assertEquals("key1", response);
|
assertEquals("key1", response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Test
|
@Test
|
||||||
public void evalsha() {
|
public void evalsha() {
|
||||||
jedis.set("foo", "bar");
|
jedis.set("foo", "bar");
|
||||||
jedis.eval("return redis.call('get','foo')");
|
jedis.eval("return redis.call('get','foo')");
|
||||||
String result = (String)jedis.evalsha("6b1bf486c81ceb7edf3c093f4c48582e38c0e791");
|
String result = (String) jedis
|
||||||
|
.evalsha("6b1bf486c81ceb7edf3c093f4c48582e38c0e791");
|
||||||
|
|
||||||
assertEquals("bar", result);
|
assertEquals("bar", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Test(expected = JedisDataException.class)
|
@Test(expected = JedisDataException.class)
|
||||||
public void evalshaShaNotFound() {
|
public void evalshaShaNotFound() {
|
||||||
jedis.evalsha("ffffffffffffffffffffffffffffffffffffffff");
|
jedis.evalsha("ffffffffffffffffffffffffffffffffffffffff");
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Test
|
@Test
|
||||||
public void scriptFlush() {
|
public void scriptFlush() {
|
||||||
jedis.set("foo", "bar");
|
jedis.set("foo", "bar");
|
||||||
jedis.eval("return redis.call('get','foo')");
|
jedis.eval("return redis.call('get','foo')");
|
||||||
jedis.scriptFlush();
|
jedis.scriptFlush();
|
||||||
assertFalse(jedis.scriptExists("6b1bf486c81ceb7edf3c093f4c48582e38c0e791"));
|
assertFalse(jedis
|
||||||
|
.scriptExists("6b1bf486c81ceb7edf3c093f4c48582e38c0e791"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Test
|
@Test
|
||||||
public void scriptExists() {
|
public void scriptExists() {
|
||||||
jedis.scriptLoad("return redis.call('get','foo')");
|
jedis.scriptLoad("return redis.call('get','foo')");
|
||||||
List<Boolean> exists = jedis.scriptExists("ffffffffffffffffffffffffffffffffffffffff","6b1bf486c81ceb7edf3c093f4c48582e38c0e791");
|
List<Boolean> exists = jedis.scriptExists(
|
||||||
|
"ffffffffffffffffffffffffffffffffffffffff",
|
||||||
|
"6b1bf486c81ceb7edf3c093f4c48582e38c0e791");
|
||||||
assertFalse(exists.get(0));
|
assertFalse(exists.get(0));
|
||||||
assertTrue(exists.get(1));
|
assertTrue(exists.get(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Test
|
@Test
|
||||||
public void scriptExistsBinary() {
|
public void scriptExistsBinary() {
|
||||||
jedis.scriptLoad(SafeEncoder.encode("return redis.call('get','foo')"));
|
jedis.scriptLoad(SafeEncoder.encode("return redis.call('get','foo')"));
|
||||||
List<Long> exists = jedis.scriptExists(SafeEncoder.encode("ffffffffffffffffffffffffffffffffffffffff"),SafeEncoder.encode("6b1bf486c81ceb7edf3c093f4c48582e38c0e791"));
|
List<Long> exists = jedis.scriptExists(
|
||||||
|
SafeEncoder.encode("ffffffffffffffffffffffffffffffffffffffff"),
|
||||||
|
SafeEncoder.encode("6b1bf486c81ceb7edf3c093f4c48582e38c0e791"));
|
||||||
assertEquals(new Long(0), exists.get(0));
|
assertEquals(new Long(0), exists.get(0));
|
||||||
assertEquals(new Long(1), exists.get(1));
|
assertEquals(new Long(1), exists.get(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Test
|
@Test
|
||||||
public void scriptLoad() {
|
public void scriptLoad() {
|
||||||
jedis.scriptLoad("return redis.call('get','foo')");
|
jedis.scriptLoad("return redis.call('get','foo')");
|
||||||
assertTrue(jedis.scriptExists("6b1bf486c81ceb7edf3c093f4c48582e38c0e791"));
|
assertTrue(jedis
|
||||||
|
.scriptExists("6b1bf486c81ceb7edf3c093f4c48582e38c0e791"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Test
|
@Test
|
||||||
public void scriptLoadBinary() {
|
public void scriptLoadBinary() {
|
||||||
jedis.scriptLoad(SafeEncoder.encode("return redis.call('get','foo')"));
|
jedis.scriptLoad(SafeEncoder.encode("return redis.call('get','foo')"));
|
||||||
List<Long> exists = jedis.scriptExists(SafeEncoder.encode("6b1bf486c81ceb7edf3c093f4c48582e38c0e791"));
|
List<Long> exists = jedis.scriptExists(SafeEncoder
|
||||||
|
.encode("6b1bf486c81ceb7edf3c093f4c48582e38c0e791"));
|
||||||
assertEquals(new Long(1), exists.get(0));
|
assertEquals(new Long(1), exists.get(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Test
|
@Test
|
||||||
public void scriptKill() {
|
public void scriptKill() {
|
||||||
try {
|
try {
|
||||||
jedis.scriptKill();
|
jedis.scriptKill();
|
||||||
}
|
} catch (JedisDataException e) {
|
||||||
catch(JedisDataException e) {
|
assertTrue(e.getMessage().contains(
|
||||||
assertTrue(e.getMessage().contains("No scripts in execution right now."));
|
"No scripts in execution right now."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void scriptEvalReturnNullValues() {
|
||||||
|
String script = "return {redis.call('hget',KEYS[1],ARGV[1]),redis.call('hget',KEYS[2],ARGV[2])}";
|
||||||
|
jedis.eval(script, 2, "key1", "key2", "1", "1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void scriptEvalShaReturnNullValues() {
|
||||||
|
String script = "return {redis.call('hget',KEYS[1],ARGV[1]),redis.call('hget',KEYS[2],ARGV[2])}";
|
||||||
|
String sha = jedis.scriptLoad(script);
|
||||||
|
jedis.evalsha(sha, 2, "key1", "key2", "1", "1");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user