Fixed up eval(sha) tests to better check that the lua script ran properly.

This commit is contained in:
Hisham Mardam-Bey
2013-10-05 18:13:30 -04:00
parent 2ee7430518
commit 597366343d
2 changed files with 34 additions and 19 deletions

View File

@@ -3175,15 +3175,20 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey
} }
public Object evalsha(byte[] sha1, List<byte[]> keys, List<byte[]> args) { public Object evalsha(byte[] sha1, List<byte[]> keys, List<byte[]> args) {
int size = (keys == null ? 0 : keys.size()) + (args == null ? 0 : args.size());
List<byte[]> keysArgs = new ArrayList<byte[]>(size);
if (keys != null) keysArgs.addAll(keys); int keyCount = keys == null ? 0 : keys.size();
if (args != null) keysArgs.addAll(args); int argCount = args == null ? 0 : args.size();
client.setTimeoutInfinite(); byte[][] params = new byte[keyCount + argCount][];
client.evalsha(sha1, keys != null ? keys.size() : 0, keysArgs.toArray(new byte[0][]));
return client.getOne(); for (int i = 0; i < keyCount; i++)
params[i] = keys.get(i);
for (int i = 0; i < argCount; i++)
params[keyCount + i] = args.get(i);
return evalsha(sha1, keyCount, params);
} }
public Object evalsha(byte[] sha1, int keyCount, byte[]... params) { public Object evalsha(byte[] sha1, int keyCount, byte[]... params) {

View File

@@ -137,16 +137,26 @@ public class ScriptingCommandsTest extends JedisCommandTestBase {
} }
} }
@Test @Test
public void scriptEvalReturnNullValues() { public void scriptEvalReturnNullValues() {
String script = "return {redis.call('hget',KEYS[1],ARGV[1]),redis.call('hget',KEYS[2],ARGV[2])}"; String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}";
jedis.eval(script, 2, "key1", "key2", "1", "1"); List<String> results = (List<String>) jedis.eval(script, 2, "key1", "key2", "1", "2");
} assertEquals(results.get(0), "key1");
assertEquals(results.get(1), "key2");
assertEquals(results.get(2), "1");
assertEquals(results.get(3), "2");
}
@Test @Test
public void scriptEvalShaReturnNullValues() { public void scriptEvalShaReturnNullValues() {
String script = "return {redis.call('hget',KEYS[1],ARGV[1]),redis.call('hget',KEYS[2],ARGV[2])}"; String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}";
String sha = jedis.scriptLoad(script); String sha = jedis.scriptLoad(script);
jedis.evalsha(sha, 2, "key1", "key2", "1", "1"); List<String> results = (List<String>) jedis.evalsha(sha, 2, "key1", "key2", "1", "2");
} assertEquals(results.get(0), "key1");
assertEquals(results.get(1), "key2");
assertEquals(results.get(2), "1");
assertEquals(results.get(3), "2");
}
} }