From deb049d1958efa0c09d33e2799d200f17fb3223a Mon Sep 17 00:00:00 2001 From: Yaourt Date: Mon, 8 Nov 2010 11:11:43 +0100 Subject: [PATCH] U tests for binary values manipulations. --- .../java/redis/clients/jedis/Protocol.java | 1 + .../commands/BinaryValuesCommandsTest.java | 221 ++++++++++++++++++ src/test/resources/MySimpson.png | Bin 0 -> 29542 bytes 3 files changed, 222 insertions(+) create mode 100644 src/test/java/redis/clients/jedis/tests/commands/BinaryValuesCommandsTest.java create mode 100644 src/test/resources/MySimpson.png diff --git a/src/main/java/redis/clients/jedis/Protocol.java b/src/main/java/redis/clients/jedis/Protocol.java index 7ae5b2a..5d40492 100644 --- a/src/main/java/redis/clients/jedis/Protocol.java +++ b/src/main/java/redis/clients/jedis/Protocol.java @@ -293,6 +293,7 @@ public final class Protocol { PMESSAGE, PSUBSCRIBE, PUNSUBSCRIBE, + OK, ONE, SET, STORE, diff --git a/src/test/java/redis/clients/jedis/tests/commands/BinaryValuesCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/BinaryValuesCommandsTest.java new file mode 100644 index 0000000..444a805 --- /dev/null +++ b/src/test/java/redis/clients/jedis/tests/commands/BinaryValuesCommandsTest.java @@ -0,0 +1,221 @@ +package redis.clients.jedis.tests.commands; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +import redis.clients.jedis.JedisException; +import redis.clients.jedis.Protocol.Keyword; +import redis.clients.jedis.tests.JedisTest; + +public class BinaryValuesCommandsTest extends JedisCommandTestBase { + byte[] bfoo = {0x01, 0x02, 0x03, 0x04}; + byte[] bbar = {0x05, 0x06, 0x07, 0x08}; + byte[] binaryValue = null; + @Before + public void setUp() throws Exception { + super.setUp(); + final InputStream is = this.getClass().getResourceAsStream("/MySimpson.png"); + byte[] resource = new byte[512];//29542 + byte[] buffer = new byte[2048]; + int length = 0; + int idx = 0; + while(-1 != (length = is.read(buffer))) { + if ((idx + length) > resource.length) { + byte[] newresource = new byte[resource.length + ((idx + length) - resource.length)]; + System.arraycopy(resource, 0, newresource, 0, idx); + resource = newresource; + } + System.arraycopy(buffer, 0, resource, idx, length); + idx += length; + } + binaryValue = resource; + } + + @Test + public void setAndGet() { + String status = jedis.set(bfoo, binaryValue); + assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); + + byte[] value = jedis.get(bfoo); + assertTrue(Arrays.equals(binaryValue, value)); + + assertNull(jedis.get(bbar)); + } + + @Test + public void getSet() { + byte[] value = jedis.getSet(bfoo, binaryValue); + assertNull(value); + value = jedis.get(bfoo); + assertTrue(Arrays.equals(binaryValue, value)); + } + + @Test + public void mget() { + List values = jedis.mget(bfoo, bbar); + List expected = new ArrayList(); + expected.add(null); + expected.add(null); + + JedisTest.isListAreEquals(expected, values); + + jedis.set(bfoo, binaryValue); + + expected = new ArrayList(); + expected.add(binaryValue); + expected.add(null); + values = jedis.mget(bfoo, bbar); + + JedisTest.isListAreEquals(expected, values); + + jedis.set(bbar, bfoo); + + expected = new ArrayList(); + expected.add(binaryValue); + expected.add(bfoo); + values = jedis.mget(bfoo, bbar); + + JedisTest.isListAreEquals(expected, values); + } + + @Test + public void setnx() { + int status = jedis.setnx(bfoo, binaryValue); + assertEquals(1, status); + assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); + + status = jedis.setnx(bfoo, bbar); + assertEquals(0, status); + assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); + } + + @Test + public void setex() { + String status = jedis.setex(bfoo, 20, binaryValue); + assertEquals(Keyword.OK.name(), status); + int ttl = jedis.ttl(bfoo); + assertTrue(ttl > 0 && ttl <= 20); + } + + @Test + public void mset() { + String status = jedis.mset(bfoo, binaryValue, bbar, bfoo); + assertEquals(Keyword.OK.name(), status); + assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); + assertTrue(Arrays.equals(bfoo, jedis.get(bbar))); + } + + @Test + public void msetnx() { + int status = jedis.msetnx(bfoo, binaryValue, bbar, bfoo); + assertEquals(1, status); + assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); + assertTrue(Arrays.equals(bfoo, jedis.get(bbar))); + + status = jedis.msetnx(bfoo, bbar, "bar2".getBytes(), "foo2".getBytes()); + assertEquals(0, status); + assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); + assertTrue(Arrays.equals(bfoo, jedis.get(bbar))); + } + + @Test(expected = JedisException.class) + public void incrWrongValue() { + jedis.set(bfoo, binaryValue); + jedis.incr(bfoo); + } + + @Test + public void incr() { + int value = jedis.incr(bfoo); + assertEquals(1, value); + value = jedis.incr(bfoo); + assertEquals(2, value); + } + + @Test(expected = JedisException.class) + public void incrByWrongValue() { + jedis.set(bfoo, binaryValue); + jedis.incrBy(bfoo, 2); + } + + @Test + public void incrBy() { + int value = jedis.incrBy(bfoo, 2); + assertEquals(2, value); + value = jedis.incrBy(bfoo, 2); + assertEquals(4, value); + } + + @Test(expected = JedisException.class) + public void decrWrongValue() { + jedis.set(bfoo, binaryValue); + jedis.decr(bfoo); + } + + @Test + public void decr() { + int value = jedis.decr(bfoo); + assertEquals(-1, value); + value = jedis.decr(bfoo); + assertEquals(-2, value); + } + + @Test(expected = JedisException.class) + public void decrByWrongValue() { + jedis.set(bfoo, binaryValue); + jedis.decrBy(bfoo, 2); + } + + @Test + public void decrBy() { + int value = jedis.decrBy(bfoo, 2); + assertEquals(-2, value); + value = jedis.decrBy(bfoo, 2); + assertEquals(-4, value); + } + + @Test + public void append() { + byte[] first512 = new byte[512]; + System.arraycopy(binaryValue, 0, first512, 0, 512); + int value = jedis.append(bfoo, first512); + assertEquals(512, value); + assertTrue(Arrays.equals(first512, jedis.get(bfoo))); + + byte[] rest = new byte[binaryValue.length - 512]; + System.arraycopy(binaryValue, 512, rest, 0, binaryValue.length - 512); + value = jedis.append(bfoo, rest); + assertEquals(binaryValue.length, value); + + assertTrue(Arrays.equals(binaryValue, jedis.get(bfoo))); + } + + @Test + public void substr() { + jedis.set(bfoo, binaryValue); + + byte[] first512 = new byte[512]; + System.arraycopy(binaryValue, 0, first512, 0, 512); + byte[] rfirst512 = jedis.substr(bfoo, 0, 511); + assertTrue(Arrays.equals(first512, rfirst512)); + + byte[] last512 = new byte[512]; + System.arraycopy(binaryValue, binaryValue.length - 512, last512, 0, 512); + assertTrue(Arrays.equals(last512, jedis.substr(bfoo, -512, -1))); + + assertTrue(Arrays.equals(binaryValue, jedis.substr(bfoo, 0, -1))); + + assertTrue(Arrays.equals(last512, jedis.substr(bfoo, binaryValue.length - 512, 100000))); + } + + @Test + public void strlen() { + jedis.set(bfoo, binaryValue); + assertEquals(binaryValue.length, jedis.strlen(bfoo).intValue()); + } +} \ No newline at end of file diff --git a/src/test/resources/MySimpson.png b/src/test/resources/MySimpson.png new file mode 100644 index 0000000000000000000000000000000000000000..025c83dd04a0e1567995e157cd59a16e08750f85 GIT binary patch literal 29542 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⁡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 literal 0 HcmV?d00001