From 597366343d36a3d01ad6bc862c798163a15e87af Mon Sep 17 00:00:00 2001 From: Hisham Mardam-Bey Date: Sat, 5 Oct 2013 18:13:30 -0400 Subject: [PATCH] Fixed up eval(sha) tests to better check that the lua script ran properly. --- .../java/redis/clients/jedis/BinaryJedis.java | 19 +++++++---- .../tests/commands/ScriptingCommandsTest.java | 34 ++++++++++++------- 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/main/java/redis/clients/jedis/BinaryJedis.java b/src/main/java/redis/clients/jedis/BinaryJedis.java index 64f4150..385b1c0 100644 --- a/src/main/java/redis/clients/jedis/BinaryJedis.java +++ b/src/main/java/redis/clients/jedis/BinaryJedis.java @@ -3175,15 +3175,20 @@ public class BinaryJedis implements BasicCommands, BinaryJedisCommands, MultiKey } public Object evalsha(byte[] sha1, List keys, List args) { - int size = (keys == null ? 0 : keys.size()) + (args == null ? 0 : args.size()); - List keysArgs = new ArrayList(size); - if (keys != null) keysArgs.addAll(keys); - if (args != null) keysArgs.addAll(args); + int keyCount = keys == null ? 0 : keys.size(); + int argCount = args == null ? 0 : args.size(); - client.setTimeoutInfinite(); - client.evalsha(sha1, keys != null ? keys.size() : 0, keysArgs.toArray(new byte[0][])); - return client.getOne(); + byte[][] params = new byte[keyCount + argCount][]; + + 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) { diff --git a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java index a3675d4..90677ee 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java @@ -137,16 +137,26 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { } } - @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 scriptEvalReturnNullValues() { + String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}"; + List results = (List) 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 + public void scriptEvalShaReturnNullValues() { + String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}"; + String sha = jedis.scriptLoad(script); + List results = (List) 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"); + + } +} - @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"); - } -} \ No newline at end of file