package io.craft.atom.redis; import io.craft.atom.redis.api.Redis; import io.craft.atom.redis.api.RedisDataException; import io.craft.atom.redis.api.RedisException; import io.craft.atom.redis.api.RedisFactory; import io.craft.atom.redis.api.RedisPubSub; import io.craft.atom.redis.api.RedisTransaction; import io.craft.atom.redis.api.ScanResult; import io.craft.atom.redis.api.Slowlog; import io.craft.atom.redis.api.handler.RedisPsubscribeHandler; import io.craft.atom.redis.api.handler.RedisSubscribeHandler; import io.craft.atom.test.CaseCounter; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import org.junit.Assert; import org.junit.Test; /** * Test for {@link Redis} * * @author mindwind * @version 1.0, Nov 28, 2013 */ public class TestRedis extends AbstractRedisTests { private String key = "foo" ; private String field = "1" ; private String value = "bar" ; private String script = "return redis.call('set','foo','bar')"; // ~ ------------------------------------------------------------------------------------------------------------- public TestRedis() { super(); } // ~ ---------------------------------------------------------------------------------------------------------- Keys @Test public void testScan() { int expect = 100; for (int i = 0; i < expect; i++) { redis1.set(key + i, value + i); } // 1 int count = 0; String cursor = "0"; do { ScanResult<String> sr = redis1.scan(cursor); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); count = 0; // 2 cursor = "0"; do { ScanResult<String> sr = redis1.scan(cursor, 20); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); count = 0; // 3 cursor = "0"; do { ScanResult<String> sr = redis1.scan(cursor, key + "*"); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); count = 0; // 4 cursor = "0"; do { ScanResult<String> sr = redis1.scan(cursor, key + "*", 20); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test scan. ", CaseCounter.incr(4))); } @Test public void testDel() { redis1.set(key, value); redis1.del(key); boolean b = redis1.exists(key); Assert.assertEquals(false, b); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test del. ", CaseCounter.incr(1))); } @Test public void testDumpRestore() { redis1.set(key, value); byte[] serializedvalue = redis1.dump(key); redis1.restore("foo1", 0, serializedvalue); Assert.assertEquals(true, redis1.exists("foo1").booleanValue()); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test dump & restore. ", CaseCounter.incr(1))); } @Test public void testExists() { redis1.set(key, value); boolean b = redis1.exists(key); Assert.assertEquals(true, b); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test exists. ", CaseCounter.incr(1))); } @Test public void testExpire() { redis1.set(key, value); long r = redis1.expire(key, 3); Assert.assertEquals(1, r); redis1.del(key); r = redis1.expire(key, 3); Assert.assertEquals(0, r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test expire. ", CaseCounter.incr(2))); } @Test public void testExpireat() { redis1.set(key, value); long r = redis1.expireat(key, (System.currentTimeMillis() + 2000) / 1000); Assert.assertEquals(1, r); redis1.del(key); r = redis1.expireat(key, (System.currentTimeMillis() + 2000) / 1000); Assert.assertEquals(0, r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test expireat. ", CaseCounter.incr(2))); } @Test public void testKeys() { redis1.set(key, value); Set<String> keys = redis1.keys("foo*"); Assert.assertTrue(keys.size() > 0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test keys. ", CaseCounter.incr(1))); } @Test public void testMigrate() { redis1.set(key, value); redis1.migrate(HOST, PORT2, key, 0, 2000); Assert.assertEquals(true, redis2.exists(key).booleanValue()); Assert.assertEquals(false, redis1.exists(key).booleanValue()); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test migrate. ", CaseCounter.incr(2))); } @Test public void testMoveSelect() { long r = redis1.move(key, 1); Assert.assertEquals(0, r); redis1.set(key, value); r = redis1.move(key, 1); Assert.assertEquals(1, r); Assert.assertEquals(false, redis1.exists(key).booleanValue()); redis1.select(1); Assert.assertEquals(true, redis1.exists(key).booleanValue()); redis1.select(0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test move & select. ", CaseCounter.incr(4))); } @Test public void testObjectrefcount() { Long r = redis1.objectrefcount(key); Assert.assertNull(r); redis1.set(key, value); r = redis1.objectrefcount(key); Assert.assertEquals(1, r.longValue()); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test objectrefcount. ", CaseCounter.incr(2))); } @Test public void testObjectencoding() { redis1.set(key, value); String r = redis1.objectencoding(key); Assert.assertEquals("raw", r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test objectencoding. ", CaseCounter.incr(1))); } @Test public void testObjectidletime() { redis1.set(key, value); long r = redis1.objectidletime(key); Assert.assertTrue(r >= 0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test objectidletime. ", CaseCounter.incr(1))); } @Test public void testPersist() { long r = redis1.persist(key); Assert.assertTrue(r == 0); redis1.setex(key, 10, value); r = redis1.persist(key); Assert.assertTrue(r == 1); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test persist. ", CaseCounter.incr(2))); } @Test public void testPexpire() { redis1.set(key, value); long r = redis1.pexpire(key, 3000); Assert.assertEquals(1, r); redis1.del(key); r = redis1.pexpire(key, 3000); Assert.assertEquals(0, r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test pexpire. ", CaseCounter.incr(2))); } @Test public void testPexpireat() { redis1.set(key, value); long r = redis1.pexpireat(key, (System.currentTimeMillis() + 2000)); Assert.assertEquals(1, r); redis1.del(key); r = redis1.pexpireat(key, (System.currentTimeMillis() + 2000)); Assert.assertEquals(0, r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test pexpireat. ", CaseCounter.incr(2))); } @Test public void testPttl() { long r = redis1.pttl(key); Assert.assertTrue(r < 0); redis1.setex(key, 100, value); r = redis1.pttl(key); Assert.assertTrue(r > 0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test pttl. ", CaseCounter.incr(2))); } @Test public void testRandomkey() { String r = redis1.randomkey(); Assert.assertNull(r); redis1.set(key, value); r = redis1.randomkey(); Assert.assertNotNull(r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test randomkey. ", CaseCounter.incr(2))); } @Test public void testRename() { String r = redis1.randomkey(); Assert.assertNull(r); redis1.set(key, value); r = redis1.randomkey(); Assert.assertNotNull(r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test rename. ", CaseCounter.incr(2))); } @Test public void testRenamenx() { redis1.set(key, value); long r = redis1.renamenx(key, "foo1"); Assert.assertTrue(r == 1); redis1.set("foo2", "bar2"); r = redis1.renamenx("foo1", "foo2"); Assert.assertTrue(r == 0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test renamenx. ", CaseCounter.incr(2))); } @Test public void testSort() { redis1.lpush(key, "1", "2", "3"); List<String> l = redis1.sort(key); Assert.assertEquals("3", l.get(2)); l = redis1.sort(key, true); Assert.assertEquals("1", l.get(2)); redis1.lpush(key, "a"); l = redis1.sort(key, true, true); Assert.assertEquals("a", l.get(0)); redis1.del(key); redis1.lpush(key, "1", "2", "3"); l = redis1.sort(key, 1, 2); Assert.assertEquals("3", l.get(1)); Assert.assertEquals(2, l.size()); redis1.lpush(key, "a"); l = redis1.sort(key, 0, 3, true, true); Assert.assertEquals("a", l.get(0)); Assert.assertEquals(3, l.size()); redis1.flushall(); redis1.lpush(key, "1", "2", "3"); redis1.set("w_1", "3"); redis1.set("w_2", "2"); redis1.set("w_3", "1"); redis1.set("o_1", "1-aaa"); redis1.set("o_2", "2-bbb"); redis1.set("o_3", "3-ccc"); String bypattern = "w_*"; String[] getpatterns = new String[] { "o_*" }; l = redis1.sort(key, bypattern, new String[] {}); Assert.assertEquals("1", l.get(2)); l = redis1.sort(key, bypattern, getpatterns); Assert.assertEquals("1-aaa", l.get(2)); l = redis1.sort(key, bypattern, true, getpatterns); Assert.assertEquals("3-ccc", l.get(2)); l = redis1.sort(key, bypattern, true, true, getpatterns); Assert.assertEquals("3-ccc", l.get(2)); l = redis1.sort(key, bypattern, 0, 1, getpatterns); Assert.assertEquals("3-ccc", l.get(0)); Assert.assertEquals(1, l.size()); l = redis1.sort(key, bypattern, 0, 1, true, true, getpatterns); Assert.assertEquals("1-aaa", l.get(0)); Assert.assertEquals(1, l.size()); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test sort. ", CaseCounter.incr(15))); } @Test public void testSortWithDestination() { redis1.lpush(key, "1", "2", "3"); String dest = "foo1"; redis1.sort(key, dest); List<String> l = redis1.lrange(dest, 0, -1); Assert.assertEquals("3", l.get(2)); redis1.sort(key, true, dest); l = redis1.lrange(dest, 0, -1); Assert.assertEquals("1", l.get(2)); redis1.lpush(key, "a"); redis1.sort(key, true, true, dest); l = redis1.lrange(dest, 0, -1); Assert.assertEquals("a", l.get(0)); redis1.del(key); redis1.lpush(key, "1", "2", "3"); redis1.sort(key, 1, 2, dest); l = redis1.lrange(dest, 0, -1); Assert.assertEquals("3", l.get(1)); Assert.assertEquals(2, l.size()); redis1.lpush(key, "a"); redis1.sort(key, 0, 3, true, true, dest); l = redis1.lrange(dest, 0, -1); Assert.assertEquals("a", l.get(0)); Assert.assertEquals(3, l.size()); redis1.flushall(); redis1.lpush(key, "1", "2", "3"); redis1.set("w_1", "3"); redis1.set("w_2", "2"); redis1.set("w_3", "1"); redis1.set("o_1", "1-aaa"); redis1.set("o_2", "2-bbb"); redis1.set("o_3", "3-ccc"); String bypattern = "w_*"; String[] getpatterns = new String[] { "o_*" }; redis1.sort(key, bypattern, dest, new String[] {}); l = redis1.lrange(dest, 0, -1); Assert.assertEquals("1", l.get(2)); redis1.sort(key, bypattern, dest, getpatterns); l = redis1.lrange(dest, 0, -1); Assert.assertEquals("1-aaa", l.get(2)); redis1.sort(key, bypattern, true, dest, getpatterns); l = redis1.lrange(dest, 0, -1); Assert.assertEquals("3-ccc", l.get(2)); redis1.sort(key, bypattern, true, true, dest, getpatterns); l = redis1.lrange(dest, 0, -1); Assert.assertEquals("3-ccc", l.get(2)); redis1.sort(key, bypattern, 0, 1, dest, getpatterns); l = redis1.lrange(dest, 0, -1); Assert.assertEquals("3-ccc", l.get(0)); Assert.assertEquals(1, l.size()); redis1.sort(key, bypattern, 0, 1, true, true, dest, getpatterns); l = redis1.lrange(dest, 0, -1); Assert.assertEquals("1-aaa", l.get(0)); Assert.assertEquals(1, l.size()); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test sort with destination. ", CaseCounter.incr(15))); } @Test public void testTtl() { long r = redis1.ttl(key); Assert.assertTrue(r < 0); redis1.setex(key, 100, value); r = redis1.ttl(key); Assert.assertTrue(r > 0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test ttl. ", CaseCounter.incr(2))); } @Test public void testType() { String r = redis1.type(key); Assert.assertEquals("none", r); redis1.set(key, value); r = redis1.type(key); Assert.assertEquals("string", r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test type. ", CaseCounter.incr(2))); } // ~ ------------------------------------------------------------------------------------------------------- Strings @Test public void testAppend() { redis1.append(key, value); Assert.assertEquals("bar", value); redis1.append(key, "bar"); Assert.assertEquals("barbar", redis1.get(key)); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test append. ", CaseCounter.incr(2))); } @Test public void testBitcount() { redis1.set(key, "foobar"); long c = redis1.bitcount(key); Assert.assertEquals(26, c); c = redis1.bitcount(key, 1, 1); Assert.assertEquals(6, c); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test bitcount. ", CaseCounter.incr(2))); } @Test public void testSetbitGetbitBitop() { boolean b = redis1.setbit(key, 1, true); Assert.assertFalse(b); b = redis1.getbit(key, 1); Assert.assertTrue(b); redis1.bitnot("foo1", key); b = redis1.getbit("foo1", 1); Assert.assertFalse(b); redis1.bitand("foo2", key, "foo1"); b = redis1.getbit("foo2", 1); Assert.assertFalse(b); redis1.bitor("foo3", key, "foo2"); b = redis1.getbit("foo3", 1); Assert.assertTrue(b); redis1.bitxor("foo4", key, "foo2"); b = redis1.getbit("foo4", 1); Assert.assertTrue(b); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test setbit & getbit & bitop. ", CaseCounter.incr(6))); } @Test public void testBitpos() { // \xff\xf0\x00 for (int i = 0; i < 12; i++) { redis1.setbit(key, i, true); } long pos = redis1.bitpos(key, false); Assert.assertEquals(12, pos); // \x00\xff\xf0 for (int i = 0; i < 8; i++) { redis1.setbit(key, i, false); } for (int i = 8; i < 20; i++) { redis1.setbit(key, i, true); } for (int i = 20; i < 24; i++) { redis1.setbit(key, i, false); } pos = redis1.bitpos(key, true, 0); Assert.assertEquals(8, pos); pos = redis1.bitpos(key, false, 1, 2); Assert.assertEquals(20, pos); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test bitpos. ", CaseCounter.incr(3))); } @Test public void testDecrIncrByFloat() { long r = redis1.incr(key); Assert.assertEquals(1, r); r = redis1.decr(key); Assert.assertEquals(0, r); r = redis1.incrby(key, 10); Assert.assertEquals(10, r); r = redis1.decrby(key, 5); Assert.assertEquals(5, r); double d = redis1.incrbyfloat(key, 1.55); Assert.assertEquals(6.55, d, 0.0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test decr & incr & decrby & incrby & incrbyfloat. ", CaseCounter.incr(5))); } @Test public void testGet() { String r = redis1.get(key); Assert.assertNull(r); redis1.set(key, value); r = redis1.get(key); Assert.assertEquals(value, r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test get. ", CaseCounter.incr(6))); } @Test public void testGetrangeSetrange() { redis1.set(key, value); String r = redis1.getrange(key, 0, 10); Assert.assertEquals(value, r); r = redis1.getrange(key, -1, -3); Assert.assertEquals("", r); redis1.set(key, value); redis1.setrange(key, 1, "bbccc"); r = redis1.get(key); Assert.assertEquals("bbbccc", r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test getrange & setrange. ", CaseCounter.incr(3))); } @Test public void testGetSet() { String r = redis1.getset(key, value); Assert.assertNull(r); r = redis1.get(key); Assert.assertEquals(value, r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test getset. ", CaseCounter.incr(2))); } @Test public void testMgetMset() { redis1.mset(key, value, "foo1", "bar1"); List<String> l = redis1.mget(key, "foo1"); Assert.assertEquals(2, l.size()); Assert.assertEquals("bar", l.get(0)); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test mget & mset. ", CaseCounter.incr(2))); } @Test public void testMsetnx() { redis1.set(key, value); long r = redis1.msetnx(key, value, "foo1", "bar1"); Assert.assertEquals(0, r); redis1.del(key); r = redis1.msetnx(key, value, "foo1", "bar1"); Assert.assertEquals(1, r); List<String> l = redis1.mget(key, "foo1"); Assert.assertEquals(2, l.size()); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test msetnx. ", CaseCounter.incr(3))); } @Test public void testPsetex() { redis1.psetex(key, 2000, value); String r = redis1.get(key); long t = redis1.pttl(key); Assert.assertEquals(value, r); Assert.assertTrue(t > 0 && t <= 2000); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test psetex. ", CaseCounter.incr(2))); } @Test public void testSet() { // setxx String r = redis1.setxx(key, value); Assert.assertNull(r); redis1.set(key, value); r = redis1.setxx(key, value); Assert.assertNotNull(r); // setex redis1.del(key); redis1.setex(key, 100, value); Assert.assertEquals(value, redis1.get(key)); long c = redis1.ttl(key); Assert.assertTrue(c > 0 && c <= 100); // setxxex redis1.del(key); r = redis1.setxxex(key, value, 100); Assert.assertNull(r); redis1.set(key, value); r = redis1.setxxex(key, value, 100); Assert.assertNotNull(r); Assert.assertEquals(value, redis1.get(key)); c = redis1.ttl(key); Assert.assertTrue(c > 0 && c <= 100); // setxxpx redis1.del(key); r = redis1.setxxpx(key, value, 100000); Assert.assertNull(r); redis1.set(key, value); r = redis1.setxxpx(key, value, 100000); Assert.assertNotNull(r); Assert.assertEquals(value, redis1.get(key)); c = redis1.ttl(key); Assert.assertTrue(c > 0 && c <= 100000); // setnx redis1.set(key, value); long b = redis1.setnx(key, value); Assert.assertEquals(0, b); redis1.del(key); b = redis1.setnx(key, value); Assert.assertEquals(1, b); Assert.assertEquals(value, redis1.get(key)); // setnxex redis1.set(key, value); r = redis1.setnxex(key, value, 100); Assert.assertNull(r); redis1.del(key); r = redis1.setnxex(key, value, 100); Assert.assertNotNull(r); Assert.assertEquals(value, redis1.get(key)); c = redis1.ttl(key); Assert.assertTrue(c > 0 && c <= 100); // setnxpx redis1.set(key, value); r = redis1.setnxpx(key, value, 100000); Assert.assertNull(r); redis1.del(key); r = redis1.setnxpx(key, value, 100000); Assert.assertNotNull(r); Assert.assertEquals(value, redis1.get(key)); c = redis1.ttl(key); Assert.assertTrue(c > 0 && c <= 100000); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test set. ", CaseCounter.incr(23))); } @Test public void testStrlen() { long len = redis1.strlen(key); Assert.assertTrue(len == 0); redis1.set(key, value); len = redis1.strlen(key); Assert.assertTrue(len == 3); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test set. ", CaseCounter.incr(2))); } // ~ -------------------------------------------------------------------------------------------------------- Hashes @Test public void testHdelHgetHsetHexists() { long c = redis1.hset(key, field, value); Assert.assertEquals(1, c); c = redis1.hset(key, field, value); Assert.assertEquals(0, c); boolean b = redis1.hexists(key, field); Assert.assertTrue(b); String v = redis1.hget(key, field); Assert.assertEquals(value, v); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test hdel & hget & hset & hexists. ", CaseCounter.incr(4))); } @Test public void testHgetall() { redis1.hset(key, field, value); redis1.hset(key, "2", "bar1"); Map<String, String> map = redis1.hgetall(key); Assert.assertEquals(2, map.size()); Assert.assertEquals("bar1", map.get("2")); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test hgetall. ", CaseCounter.incr(2))); } @Test public void testHincrByFloat() { long c = redis1.hincrby(key, field, 10); Assert.assertEquals(10, c); double d = redis1.hincrbyfloat(key, field, 6.66); Assert.assertEquals(16.66, d, 0.00); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test hincr & hincrbyfloat. ", CaseCounter.incr(2))); } @Test public void testHkeys() { redis1.hset(key, field, value); Set<String> set = redis1.hkeys(key); Assert.assertEquals(1, set.size()); for (String f : set) { Assert.assertEquals(field, f); } System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test hkeys. ", CaseCounter.incr(2))); } @Test public void testHlen() { redis1.hset(key, field, value); long len = redis1.hlen(key); Assert.assertEquals(1, len); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test hlen. ", CaseCounter.incr(1))); } @Test public void testHmgetHmset() { Map<String, String> hash = new HashMap<String, String>(); hash.put("1", "1"); hash.put("2", "2"); redis1.hmset(key, hash); List<String> l = redis1.hmget(key, "1", "2"); Assert.assertEquals(2, l.size()); Assert.assertEquals("1", l.get(0)); Assert.assertEquals("2", l.get(1)); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test hmget & hmset. ", CaseCounter.incr(3))); } @Test public void testHsetnx() { long c = redis1.hsetnx(key, field, value); Assert.assertEquals(1, c); c = redis1.hsetnx(key, field, value); Assert.assertEquals(0, c); String v = redis1.hget(key, field); Assert.assertEquals(value, v); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test hsetnx. ", CaseCounter.incr(3))); } @Test public void testHvals() { List<String> l = redis1.hvals(key); Assert.assertEquals(0, l.size()); redis1.hset(key, field, value); l = redis1.hvals(key); Assert.assertEquals(1, l.size()); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test hvals. ", CaseCounter.incr(2))); } @Test public void testHscan() { int expect = 100; for (int i = 0; i < expect; i++) { redis1.hset(key, field + i, value + i); } // 1 int count = 0; String cursor = "0"; do { ScanResult<Map.Entry<String, String>> sr = redis1.hscan(key, cursor); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); count = 0; // 2 cursor = "0"; do { ScanResult<Map.Entry<String, String>> sr = redis1.hscan(key, cursor, 20); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); count = 0; // 3 cursor = "0"; do { ScanResult<Map.Entry<String, String>> sr = redis1.hscan(key, cursor, field + "*"); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); count = 0; // 4 cursor = "0"; do { ScanResult<Map.Entry<String, String>> sr = redis1.hscan(key, cursor, field + "*", 20); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test hscan. ", CaseCounter.incr(4))); } // ~ --------------------------------------------------------------------------------------------------------- Lists @Test public void testBlpopLpush() throws InterruptedException { Thread t1 = new Thread(new Runnable() { @Override public void run() { String v = redis1.blpop(key); Assert.assertEquals("3", v); } }); Thread t2 = new Thread(new Runnable() { @Override public void run() { long len = redis1.lpush(key, "3"); Assert.assertEquals(1, len); } }); t1.start(); t2.start(); t1.join(); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test blpop & lpush. ", CaseCounter.incr(2))); } @Test public void testBlpopTimeoutRpush() throws InterruptedException { Map<String, String> map = redis1.blpop(1, key); Assert.assertEquals(0, map.size()); Thread t = new Thread(new Runnable() { @Override public void run() { Map<String, String> hash = redis1.blpop(5, "foo", "foo1"); Assert.assertEquals("bar1", hash.get("foo1")); } }); t.start(); long len = redis1.rpush("foo1", "bar1"); Assert.assertEquals(1, len); t.join(); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test blpop with timeout & rpush. ", CaseCounter.incr(3))); } @Test public void testBrpop() throws InterruptedException { Thread t1 = new Thread(new Runnable() { @Override public void run() { String v = redis1.brpop(key); Assert.assertEquals("3", v); } }); Thread t2 = new Thread(new Runnable() { @Override public void run() { redis1.lpush(key, "3"); } }); t1.start(); t2.start(); t1.join(); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test brpop. ", CaseCounter.incr(1))); } @Test public void testBrpopTimeout() throws InterruptedException { Map<String, String> map = redis1.brpop(1, key); Assert.assertEquals(0, map.size()); Thread t = new Thread(new Runnable() { @Override public void run() { Map<String, String> hash = redis1.blpop(5, "foo", "foo1"); Assert.assertEquals("bar1", hash.get("foo1")); } }); t.start(); redis1.rpush("foo1", "bar1"); t.join(); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test brpop with timeout. ", CaseCounter.incr(2))); } @Test public void testBrpoppushLpop() { String v = redis1.brpoplpush(key, "foo1", 1); Assert.assertNull(v); redis1.rpush(key, value); v = redis1.brpoplpush(key, "foo1", 1); Assert.assertEquals(value, v); v = redis1.lpop("foo1"); Assert.assertEquals(value, v); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test brpoplpush & lpop. ", CaseCounter.incr(3))); } @Test public void testLindexRpop() { redis1.rpush(key, value, "a", "b", "c"); String v = redis1.lindex(key, 2); Assert.assertEquals("b", v); v = redis1.rpop(key); Assert.assertEquals("c", v); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test lindex & rpop. ", CaseCounter.incr(2))); } @Test public void testLinsert() { long len = redis1.lpush(key, value); len = redis1.linsertbefore(key, value, "before-bar"); len = redis1.linsertafter(key, value, "after-bar"); Assert.assertEquals(3, len); List<String> l = redis1.lrange(key, 0, -1); Assert.assertEquals("before-bar", l.get(0)); Assert.assertEquals("after-bar", l.get(2)); len = redis1.linsertbefore(key, "aaa", "aaa"); Assert.assertEquals(-1, len); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test linsert. ", CaseCounter.incr(4))); } @Test public void testLrangeLlen() { long len = redis1.lpush(key, "1", "2", "3"); Assert.assertEquals(3, len); len = redis1.llen(key); Assert.assertEquals(3, len); List<String> l = redis1.lrange(key, 0, -1); Assert.assertEquals("1", l.get(2)); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test lrange & llen. ", CaseCounter.incr(3))); } @Test public void testLpushxRpushx() { long len = redis1.lpushx(key, value); len = redis1.rpushx(key, value); Assert.assertEquals(0, len); redis1.lpush(key, value);; len = redis1.lpushx(key, value); len = redis1.rpushx(key, value); Assert.assertEquals(3, len); List<String> l = redis1.lrange(key, 0, -1); for (String v : l) { Assert.assertEquals(value, v); } System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test lpushx & rpushx. ", CaseCounter.incr(3))); } @Test public void testLrem() { redis1.rpush(key, "1", "2", "1", "2", "3"); long r = redis1.lrem(key, 1, "1"); Assert.assertEquals(1, r); Assert.assertTrue(Arrays.equals(new String[]{ "2", "1", "2", "3" }, redis1.lrange(key, 0, -1).toArray(new String[] {}))); redis1.lrem(key, -1, "3"); Assert.assertTrue(Arrays.equals(new String[]{ "2", "1", "2" }, redis1.lrange(key, 0, -1).toArray(new String[] {}))); redis1.lrem(key, 0, "2"); Assert.assertTrue(Arrays.equals(new String[]{ "1" }, redis1.lrange(key, 0, -1).toArray(new String[] {}))); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test lrem. ", CaseCounter.incr(4))); } @Test public void testLset() { redis1.rpush(key, "1", "2", "3"); redis1.lset(key, 0, "4"); Assert.assertTrue(Arrays.equals(new String[]{ "4", "2", "3" }, redis1.lrange(key, 0, -1).toArray(new String[] {}))); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test lset. ", CaseCounter.incr(1))); } @Test public void testLtrim() { redis1.rpush(key, "1", "2", "3", "4", "5"); redis1.ltrim(key, 0, 10); Assert.assertEquals(5, redis1.llen(key).longValue()); redis1.ltrim(key, 0, 3); Assert.assertEquals(4, redis1.llen(key).longValue()); redis1.ltrim(key, 4, 3); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test ltrim. ", CaseCounter.incr(2))); } // ~ ---------------------------------------------------------------------------------------------------------- Sets @Test public void testSaddScard() { long c = redis1.sadd(key, "a", "b", "c"); Assert.assertEquals(3, c); c = redis1.sadd(key, "a", "b", "c"); Assert.assertEquals(0, c); c = redis1.scard(key); Assert.assertEquals(3, c); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test sadd & scard. ", CaseCounter.incr(3))); } @Test public void testSdiffStore() { redis1.sadd("foo1", "a", "c"); redis1.sadd("foo2", "c", "d", "e"); Set<String> diff = redis1.sdiff("foo1", "foo2"); Assert.assertEquals(1, diff.size()); Assert.assertEquals("a", diff.iterator().next()); long len = redis1.sdiffstore(key, "foo1", "foo2"); Assert.assertEquals(1, len); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test sdiff & sdiffstore. ", CaseCounter.incr(3))); } @Test public void testSinterStoreSpop() { redis1.sadd("foo1", "a", "b", "c"); redis1.sadd("foo2", "c", "d", "e"); Set<String> set = redis1.sinter("foo1", "foo2"); Assert.assertEquals("c", set.iterator().next()); long len = redis1.sinterstore(key, "foo1", "foo2"); Assert.assertEquals(1, len); String v = redis1.spop(key); Assert.assertEquals("c", v); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test sinter & sinterstore & spop. ", CaseCounter.incr(3))); } @Test public void testSismember() { redis1.sadd(key, value); boolean b = redis1.sismember(key, value); Assert.assertTrue(b); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test sismember. ", CaseCounter.incr(1))); } @Test public void testSmembers() { redis1.sadd(key, value); Set<String> set = redis1.smembers(key); Assert.assertEquals(value, set.iterator().next()); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test smembers. ", CaseCounter.incr(1))); } @Test public void testSmove() { redis1.sadd(key, "a"); redis1.sadd(key, "b"); redis1.smove(key, "foo1", "a"); Assert.assertFalse(redis1.sismember(key, "a")); Assert.assertTrue(redis1.sismember("foo1", "a")); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test smove. ", CaseCounter.incr(2))); } @Test public void testSrandmember() { redis1.sadd(key, value); String v = redis1.srandmember(key); Assert.assertEquals(value, v); List<String> l = redis1.srandmember(key, 5); Assert.assertEquals(1, l.size()); redis1.sadd(key, "a"); l = redis1.srandmember(key, 5); Assert.assertEquals(2, l.size()); l = redis1.srandmember("foo1", 5); Assert.assertEquals(0, l.size()); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test srandmember. ", CaseCounter.incr(4))); } @Test public void testSrem() { redis1.sadd(key, "a", "b"); long r = redis1.srem(key, "a", "c"); Assert.assertEquals(1, r); Assert.assertFalse(redis1.sismember(key, "a")); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test srem. ", CaseCounter.incr(2))); } @Test public void testSunionStore() { redis1.sadd("foo1", "a", "c"); redis1.sadd("foo2", "c", "d", "e"); Set<String> u = redis1.sunion("foo1", "foo2"); Assert.assertEquals(4, u.size()); long len = redis1.sunionstore(key, "foo1", "foo2"); Assert.assertEquals(4, len); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test sunion & sunionstore. ", CaseCounter.incr(2))); } @Test public void testSscan() { int expect = 100; for (int i = 0; i < expect; i++) { redis1.sadd(key, value + i); } // 1 int count = 0; String cursor = "0"; do { ScanResult<String> sr = redis1.sscan(key, cursor); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); count = 0; // 2 cursor = "0"; do { ScanResult<String> sr = redis1.sscan(key, cursor, 20); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); count = 0; // 3 cursor = "0"; do { ScanResult<String> sr = redis1.sscan(key, cursor, value + "*"); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); count = 0; // 4 cursor = "0"; do { ScanResult<String> sr = redis1.sscan(key, cursor, value + "*", 20); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test sscan. ", CaseCounter.incr(4))); } // ~ --------------------------------------------------------------------------------------------------- Sorted Sets @Test public void testZaddZcard() { redis1.sadd("foo1", "a", "c"); redis1.sadd("foo2", "c", "d", "e"); Set<String> u = redis1.sunion("foo1", "foo2"); Assert.assertEquals(4, u.size()); long len = redis1.sunionstore(key, "foo1", "foo2"); Assert.assertEquals(4, len); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zadd & zcard. ", CaseCounter.incr(2))); } @Test public void testZcount() { redis1.zadd(key, 10, "a"); redis1.zadd(key, 20, "b"); redis1.zadd(key, 30, "c"); long c = redis1.zcount(key, 20, 30); Assert.assertEquals(2, c); c = redis1.zcount(key, "20", "inf"); Assert.assertEquals(2, c); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zcount. ", CaseCounter.incr(2))); } @Test public void testZincrbyZscore() { redis1.zadd(key, 1, value); double score = redis1.zincrby(key, 10.5, value); Assert.assertEquals(11.5, score, 0.0); score = redis1.zscore(key, value); Assert.assertEquals(11.5, score, 0.0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zincrby & zscore. ", CaseCounter.incr(2))); } @Test public void testZrange() { redis1.zadd(key, 1, "a"); redis1.zadd(key, 2, "b"); Set<String> set = redis1.zrange(key, 0, -1); Iterator<String> it = set.iterator(); Assert.assertTrue(it.next().equals("a")); Assert.assertTrue(it.next().equals("b")); Map<String, Double> map = redis1.zrangewithscores(key, 0, -1); Iterator<Entry<String, Double>> it2 = map.entrySet().iterator(); Assert.assertEquals(it2.next().getValue(), 1.0, 0.0); Assert.assertEquals(it2.next().getValue(), 2.0, 0.0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zrange. ", CaseCounter.incr(4))); } @Test public void testZrevrange() { redis1.zadd(key, 1, "a"); redis1.zadd(key, 2, "b"); Set<String> set = redis1.zrevrange(key, 0, -1); Iterator<String> it = set.iterator(); Assert.assertTrue(it.next().equals("b")); Assert.assertTrue(it.next().equals("a")); Map<String, Double> map = redis1.zrevrangewithscores(key, 0, -1); Iterator<Entry<String, Double>> it2 = map.entrySet().iterator(); Assert.assertEquals(it2.next().getValue(), 2.0, 0.0); Assert.assertEquals(it2.next().getValue(), 1.0, 0.0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zrevrange. ", CaseCounter.incr(4))); } @Test public void testZinterstore() { redis1.zadd("foo1", 1, "a"); redis1.zadd("foo1", 1, "b"); redis1.zadd("foo2", 2, "b"); redis1.zadd("foo2", 1, "c"); Map<String, Integer> wk = new HashMap<String, Integer>(); wk.put("foo1", 5); wk.put("foo2", 2); // zinterstore long l = redis1.zinterstore(key, "foo1", "foo2"); Assert.assertEquals(1, l); Map<String, Double> map = redis1.zrangewithscores(key, 0, -1); Assert.assertEquals(map.get("b"), 3.0, 0.0); redis1.zinterstore(key, wk); map = redis1.zrangewithscores(key, 0, -1); Assert.assertEquals(map.get("b"), 9.0, 0.0); // zinterstoremax l = redis1.zinterstoremax(key, "foo1", "foo2"); Assert.assertEquals(1, l); map = redis1.zrangewithscores(key, 0, -1); Assert.assertEquals(map.get("b"), 2.0, 0.0); redis1.zinterstoremax(key, wk); map = redis1.zrangewithscores(key, 0, -1); Assert.assertEquals(map.get("b"), 5.0, 0.0); // zinterstoremin l = redis1.zinterstoremin(key, "foo1", "foo2"); Assert.assertEquals(1, l); map = redis1.zrangewithscores(key, 0, -1); Assert.assertEquals(map.get("b"), 1.0, 0.0); redis1.zinterstoremin(key, wk); map = redis1.zrangewithscores(key, 0, -1); Assert.assertEquals(map.get("b"), 4.0, 0.0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zinterstore. ", CaseCounter.incr(9))); } @Test public void testZunionstore() { redis1.zadd("foo1", 1, "a"); redis1.zadd("foo1", 1, "b"); redis1.zadd("foo2", 2, "b"); redis1.zadd("foo2", 1, "c"); Map<String, Integer> wk = new HashMap<String, Integer>(); wk.put("foo1", 5); wk.put("foo2", 2); // zunionstore long l = redis1.zunionstore(key, "foo1", "foo2"); Assert.assertEquals(3, l); Map<String, Double> map = redis1.zrangewithscores(key, 0, -1); Assert.assertEquals(map.get("b"), 3.0, 0.0); redis1.zunionstore(key, wk); map = redis1.zrangewithscores(key, 0, -1); Assert.assertEquals(map.get("b"), 9.0, 0.0); // zunionstoremax l = redis1.zunionstoremax(key, "foo1", "foo2"); Assert.assertEquals(3, l); map = redis1.zrangewithscores(key, 0, -1); Assert.assertEquals(map.get("b"), 2.0, 0.0); redis1.zunionstoremax(key, wk); map = redis1.zrangewithscores(key, 0, -1); Assert.assertEquals(map.get("b"), 5.0, 0.0); // zunionstoremin l = redis1.zunionstoremin(key, "foo1", "foo2"); Assert.assertEquals(3, l); map = redis1.zrangewithscores(key, 0, -1); Assert.assertEquals(map.get("b"), 1.0, 0.0); redis1.zunionstoremin(key, wk); map = redis1.zrangewithscores(key, 0, -1); Assert.assertEquals(map.get("b"), 4.0, 0.0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zunionstore. ", CaseCounter.incr(9))); } @Test public void testZrangebyscore() { redis1.zadd(key, 1, "a"); redis1.zadd(key, 2, "b"); redis1.zadd(key, 3, "c"); redis1.zadd(key, 4, "d"); redis1.zadd(key, 5, "e"); Set<String> set = redis1.zrangebyscore(key, 1, 2); Assert.assertTrue(set.contains("a")); Assert.assertTrue(set.contains("b")); set = redis1.zrangebyscore(key, "-inf", "2"); Assert.assertTrue(set.contains("a")); Assert.assertTrue(set.contains("b")); set = redis1.zrangebyscore(key, 1, 5, 0, 2); Assert.assertTrue(set.contains("a")); Assert.assertTrue(set.contains("b")); set = redis1.zrangebyscore(key, "-inf", "5", 0, 2); Assert.assertTrue(set.contains("a")); Assert.assertTrue(set.contains("b")); Map<String, Double> map = redis1.zrangebyscorewithscores(key, 1, 2); Assert.assertTrue(map.get("a") == 1.0); Assert.assertTrue(map.get("b") == 2.0); map = redis1.zrangebyscorewithscores(key, "-inf", "2"); Assert.assertTrue(map.get("a") == 1.0); Assert.assertTrue(map.get("b") == 2.0); map = redis1.zrangebyscorewithscores(key, 1, 5, 0, 2); Assert.assertTrue(map.get("a") == 1.0); Assert.assertTrue(map.get("b") == 2.0); map = redis1.zrangebyscorewithscores(key, "-inf", "5", 0, 2); Assert.assertTrue(map.get("a") == 1.0); Assert.assertTrue(map.get("b") == 2.0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zrangebyscore. ", CaseCounter.incr(16))); } @Test public void testZrevrangebyscore() { redis1.zadd(key, 1, "a"); redis1.zadd(key, 2, "b"); redis1.zadd(key, 3, "c"); redis1.zadd(key, 4, "d"); redis1.zadd(key, 5, "e"); Set<String> set = redis1.zrevrangebyscore(key, 2, 1); Assert.assertTrue(set.contains("a")); Assert.assertTrue(set.contains("b")); set = redis1.zrevrangebyscore(key, "2", "-inf"); Assert.assertTrue(set.contains("a")); Assert.assertTrue(set.contains("b")); set = redis1.zrevrangebyscore(key, 5, 1, 0, 2); Assert.assertTrue(set.contains("d")); Assert.assertTrue(set.contains("e")); set = redis1.zrevrangebyscore(key, "5", "-inf", 0, 2); Assert.assertTrue(set.contains("d")); Assert.assertTrue(set.contains("e")); Map<String, Double> map = redis1.zrevrangebyscorewithscores(key, 2, 1); Assert.assertTrue(map.get("a") == 1.0); Assert.assertTrue(map.get("b") == 2.0); map = redis1.zrevrangebyscorewithscores(key, "2", "-inf"); Assert.assertTrue(map.get("a") == 1.0); Assert.assertTrue(map.get("b") == 2.0); map = redis1.zrevrangebyscorewithscores(key, 5, 1, 0, 2); Assert.assertTrue(map.get("d") == 4.0); Assert.assertTrue(map.get("e") == 5.0); map = redis1.zrevrangebyscorewithscores(key, "5", "-inf", 0, 2); Assert.assertTrue(map.get("d") == 4.0); Assert.assertTrue(map.get("e") == 5.0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zrevrangebyscore. ", CaseCounter.incr(16))); } @Test public void testZrank() { redis1.zadd(key, 1, "a"); redis1.zadd(key, 2, "b"); Long r = redis1.zrank(key, "b"); Assert.assertEquals(1, r.longValue()); r = redis1.zrank(key, "c"); Assert.assertNull(r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zrank. ", CaseCounter.incr(2))); } @Test public void testZrevrank() { redis1.zadd(key, 1, "a"); redis1.zadd(key, 2, "b"); Long r = redis1.zrevrank(key, "b"); Assert.assertEquals(0, r.longValue()); r = redis1.zrank(key, "c"); Assert.assertNull(r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zrevrank. ", CaseCounter.incr(2))); } @Test public void testZrem() { redis1.zadd(key, 1, "a"); redis1.zadd(key, 2, "b"); redis1.zadd(key, 3, "c"); redis1.zrem(key, "a", "b"); Set<String> set = redis1.zrange(key, 0, -1); Assert.assertEquals(set.iterator().next(), "c"); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zrem. ", CaseCounter.incr(1))); } @Test public void testZremrangebyrank() { redis1.zadd(key, 1, "a"); redis1.zadd(key, 2, "b"); redis1.zadd(key, 3, "c"); redis1.zremrangebyrank(key, 0, 1); Set<String> set = redis1.zrange(key, 0, -1); Assert.assertEquals(set.iterator().next(), "c"); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zremrangebyrank. ", CaseCounter.incr(1))); } @Test public void testZremrangebyscore() { redis1.zadd(key, 1, "a"); redis1.zadd(key, 2, "b"); redis1.zadd(key, 3, "c"); redis1.zremrangebyscore(key, 1, 2); Set<String> set = redis1.zrange(key, 0, -1); Assert.assertEquals(set.iterator().next(), "c"); redis1.zadd(key, 1, "a"); redis1.zadd(key, 2, "b"); redis1.zremrangebyscore(key, "-inf", "2"); set = redis1.zrange(key, 0, -1); Assert.assertEquals(set.iterator().next(), "c"); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zremrangebyrank. ", CaseCounter.incr(2))); } @Test public void testZscan() { int expect = 100; for (int i = 0; i < expect; i++) { redis1.zadd(key, i, key + i); } // 1 int count = 0; String cursor = "0"; do { ScanResult<Map.Entry<String, Double>> sr = redis1.zscan(key, cursor); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); count = 0; // 2 cursor = "0"; do { ScanResult<Map.Entry<String, Double>> sr = redis1.zscan(key, cursor, 20); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); count = 0; // 3 cursor = "0"; do { ScanResult<Map.Entry<String, Double>> sr = redis1.zscan(key, cursor, key + "*"); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); count = 0; // 4 cursor = "0"; do { ScanResult<Map.Entry<String, Double>> sr = redis1.zscan(key, cursor, key + "*", 20); count += sr.getElements().size(); cursor = sr.getCursor(); } while (!cursor.equals("0")); Assert.assertEquals(expect, count); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zscan. ", CaseCounter.incr(4))); } @Test public void testZlexcount() { redis1.zadd(key, 0, "a"); redis1.zadd(key, 0, "b"); redis1.zadd(key, 0, "c"); redis1.zadd(key, 0, "d"); redis1.zadd(key, 0, "e"); redis1.zadd(key, 0, "f"); redis1.zadd(key, 0, "g"); long count = redis1.zlexcount(key, "-", "+"); Assert.assertEquals(7, count); count = redis1.zlexcount(key, "[b", "[f"); Assert.assertEquals(5, count); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zlexcount. ", CaseCounter.incr(5))); } @Test public void testZrangebylex() { redis1.zadd(key, 0, "a"); redis1.zadd(key, 0, "b"); redis1.zadd(key, 0, "c"); redis1.zadd(key, 0, "d"); redis1.zadd(key, 0, "e"); redis1.zadd(key, 0, "f"); redis1.zadd(key, 0, "g"); Set<String> set = redis1.zrangebylex(key, "-", "[c"); Assert.assertEquals(3, set.size()); Iterator<String> it = set.iterator(); Assert.assertEquals("a", it.next()); Assert.assertEquals("b", it.next()); Assert.assertEquals("c", it.next()); set = redis1.zrangebylex(key, "[aaa", "(g", 2, 2); Assert.assertEquals(2, set.size()); it = set.iterator(); Assert.assertEquals("d", it.next()); Assert.assertEquals("e", it.next()); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zrangebylex. ", CaseCounter.incr(7))); } @Test public void testZremrangebylex() { redis1.zadd(key, 0, "a"); redis1.zadd(key, 0, "b"); redis1.zadd(key, 0, "c"); redis1.zadd(key, 0, "d"); redis1.zadd(key, 0, "e"); redis1.zadd(key, 0, "f"); redis1.zadd(key, 0, "g"); redis1.zadd(key, 0, "x"); redis1.zadd(key, 0, "z"); long num = redis1.zremrangebylex(key, "[b", "[o"); Assert.assertEquals(6, num); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test zremrangebylex. ", CaseCounter.incr(1))); } // ~ -------------------------------------------------------------------------------------------------- HyperLogLog @Test public void testPfaddPfcount() { redis1.pfadd(key, "foo", "bar", "zap"); redis1.pfadd(key, "zap", "zap", "zap"); redis1.pfadd(key, "bar"); long count = redis1.pfcount(key); Assert.assertEquals(3, count); redis1.pfadd("hll", "1", "2", "3"); count = redis1.pfcount(key, "hll"); Assert.assertEquals(6, count); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test pfadd & pfcount. ", CaseCounter.incr(2))); } @Test public void testPfmerge() { redis1.pfadd("hll1", "foo", "bar", "zap", "a"); redis1.pfadd("hll2", "a", "b", "c", "foo"); redis1.pfmerge("hll3", "hll1", "hll2"); long count = redis1.pfcount("hll3"); Assert.assertEquals(6, count); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test pfmerge. ", CaseCounter.incr(1))); } // ~ -------------------------------------------------------------------------------------------------- Pub/Sub @Test public void testSubscribePublishUnsubscribe() { final Redis redis = RedisFactory.newRedis(HOST, PORT1, 2000, 5); final String[] channels = new String[] { "foo", "foo1" }; RedisPubSub pubsub = redis.subscribe(new RedisSubscribeHandler() { @Override public void onSubscribe(String channel, int no) { } @Override public void onMessage(String channel, String message) { Assert.assertEquals("bar", message); } @Override public void onException(RedisException e) { try { e.printStackTrace(); Thread.sleep(3000); redis.subscribe(this, channels); } catch (Exception e2) { } } }, channels); redis.publish("foo", "bar"); redis.publish("foo1", "bar"); redis.unsubscribe(pubsub, "foo1"); redis.publish("foo", "bar"); redis.publish("foo1", "bar"); redis.unsubscribe(pubsub, "foo", "foo1"); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test publish & subscribe & unsubscribe. ", CaseCounter.incr(1))); } @Test public void testPsubscribePublishPunsubscribe() { final Redis redis = RedisFactory.newRedis(HOST, PORT1, 2000, 5); final String[] patterns = new String[] { "fo*", "ba*" }; RedisPubSub pubsub = redis.psubscribe(new RedisPsubscribeHandler() { @Override public void onPsubscribe(String pattern, int no) { } @Override public void onMessage(String pattern, String channel, String message) { Assert.assertEquals("bar", message); } @Override public void onException(RedisException e) { try { Thread.sleep(3000); redis.psubscribe(this, patterns); } catch (Exception e2) { } } }, patterns); redis.publish("foo", "bar"); redis.publish("bar", "bar"); redis.punsubscribe(pubsub, "ba*"); redis.publish("foo", "bar"); redis.publish("bar", "bar"); redis.punsubscribe(pubsub, "ba*", "fo*"); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test psubscribe & publish & punsubscribe. ", CaseCounter.incr(1))); } private static class TestRedisSubscribeHandler implements RedisSubscribeHandler { @Override public void onException(RedisException e) {} @Override public void onSubscribe(String channel, int no) {} @Override public void onMessage(String channel, String message) {} } private static class TestRedisPsubscribeHandler implements RedisPsubscribeHandler { @Override public void onException(RedisException e) {} @Override public void onPsubscribe(String pattern, int no) {} @Override public void onMessage(String pattern, String channel, String message) {} } @Test public void testPubSub() { final Redis redis = RedisFactory.newRedisBuilder(HOST, PORT1).build(); redis.subscribe(new TestRedisSubscribeHandler(), "foo1", "foo2"); redis.subscribe(new TestRedisSubscribeHandler(), "foo1"); List<String> channels = redis.pubsubchannels(null); Assert.assertEquals(2, channels.size()); String[] array = channels.toArray(new String[] {}); Arrays.sort(array); Assert.assertArrayEquals(new String[] { "foo1", "foo2" }, array); Map<String, String> map = redis.pubsubnumsub("foo1"); Assert.assertEquals("2", map.get("foo1")); map = redis.pubsubnumsub("foo2"); Assert.assertEquals("1", map.get("foo2")); redis.psubscribe(new TestRedisPsubscribeHandler(), "bar1", "bar2"); redis.psubscribe(new TestRedisPsubscribeHandler(), "bar3", "bar4"); Long num = redis.pubsubnumpat(); Assert.assertEquals(4, num.longValue()); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test pubsub. ", CaseCounter.incr(5))); } // ~ -------------------------------------------------------------------------------------------------- Transactions @Test public void testMultiExec() { RedisTransaction t = redis1.multi(); t.set(key, value); t.get(key); List<Object> l = redis1.exec(t); Assert.assertEquals(2, l.size()); Assert.assertEquals(value, l.get(1)); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test multi & exec. ", CaseCounter.incr(2))); } @Test public void testWatchMultiExec() throws InterruptedException { final String wkey = "watch-key"; final Lock lock = new ReentrantLock(); final Condition c1 = lock.newCondition(); final Condition c2 = lock.newCondition(); Thread t1 = new Thread(new Runnable() { @Override public void run() { lock.lock(); try { redis1.watch(wkey); c1.await(); RedisTransaction t = redis1.multi(); t.set(key, value); redis1.exec(t); c2.signal(); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } }); t1.start(); Thread.sleep(100); Thread t2 = new Thread(new Runnable() { @Override public void run() { lock.lock(); try { Thread.sleep(100); redis1.set(wkey, "1"); c1.signal(); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } }); t2.start(); lock.lock(); try { c2.await(100, TimeUnit.MILLISECONDS); } finally { lock.unlock(); } String v = redis1.get(key); Assert.assertNull(v); redis1.del(wkey); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test watch & multi & exec. ", CaseCounter.incr(1))); } @Test public void testMultiDiscard() { RedisTransaction t = redis1.multi(); t.set(key, value); t.get(key); redis1.discard(t); try { redis1.exec(t); Assert.fail(); } catch (RedisDataException e) { } System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test multi & discard. ", CaseCounter.incr(1))); } @Test public void testWatchUnwatchMultiExec() { String wkey = "watch-key"; redis1.watch(wkey); redis1.set(wkey, "1"); redis1.unwatch(); RedisTransaction t = redis1.multi(); t.set(key, value); redis1.exec(t); String v = redis1.get(key); Assert.assertEquals(value, v); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test watch & unwatch & multi & exec. ", CaseCounter.incr(1))); } // ~ ----------------------------------------------------------------------------------------------------- Scripting @Test public void testEval() { redis1.eval(script); String v = redis1.get(key); Assert.assertEquals(value, v); redis1.flushall(); List<String> keys = new ArrayList<String>(); keys.add("foo"); redis1.eval("return redis.call('set',KEYS[1],'bar')", keys); v = redis1.get(key); Assert.assertEquals(value, v); redis1.flushall(); List<String> args = new ArrayList<String>(); args.add("bar"); redis1.eval("return redis.call('set',KEYS[1],ARGV[1])", keys, args); v = redis1.get(key); Assert.assertEquals(value, v); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test eval. ", CaseCounter.incr(3))); } @Test public void testEvalshaScriptload() { String sha1 = redis1.scriptload(script); redis1.evalsha(sha1); String v = redis1.get(key); Assert.assertEquals(value, v); redis1.flushall(); List<String> keys = new ArrayList<String>(); keys.add("foo"); sha1 = redis1.scriptload("return redis.call('set',KEYS[1],'bar')"); redis1.evalsha(sha1, keys); redis1.flushall(); sha1 = redis1.scriptload("return redis.call('set',KEYS[1],ARGV[1])"); List<String> args = new ArrayList<String>(); args.add("bar"); redis1.evalsha(sha1, keys, args); v = redis1.get(key); Assert.assertEquals(value, v); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test evalsha & scriptload. ", CaseCounter.incr(2))); } @Test public void testScriptExistsFlush() { String sha1 = redis1.scriptload(script); boolean b = redis1.scriptexists(sha1); Assert.assertTrue(b); redis1.scriptflush(); b = redis1.scriptexists(sha1); Assert.assertFalse(b); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test scriptexists & scriptflush. ", CaseCounter.incr(2))); } @Test public void testScriptkill() { String sha1 = redis1.scriptload(script); boolean b = redis1.scriptexists(sha1); Assert.assertTrue(b); redis1.scriptflush(); b = redis1.scriptexists(sha1); Assert.assertFalse(b); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test scriptkill. ", CaseCounter.incr(2))); } // ~ ---------------------------------------------------------------------------------------------------- Connection @Test public void testAuth() { redis1.configset("requirepass", "foobared"); redis1.auth("foobared"); redis1.set(key, value); boolean b = redis1.exists(key); Assert.assertTrue(b); redis1.configset("requirepass", ""); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test auth. ", CaseCounter.incr(1))); } @Test public void testEcho() { String hi = redis1.echo("hi"); Assert.assertEquals("hi", hi); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test echo. ", CaseCounter.incr(1))); } @Test public void testPing() { String hi = redis1.echo("hi"); Assert.assertEquals("hi", hi); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test ping. ", CaseCounter.incr(1))); } @Test public void testQuit() { redis1.quit(); try { redis1.set(key, value); } catch (Exception e) { System.out.println(" " + e.getMessage()); Assert.assertTrue(true); } finally { redis1 = RedisFactory.newRedis(HOST, PORT1); } System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test quit. ", CaseCounter.incr(1))); } @Test public void testSelect() { redis1.set(key, value); redis1.select(1); Assert.assertNull(redis1.get(key)); redis1.select(0); Assert.assertEquals(value, redis1.get(key)); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test select. ", CaseCounter.incr(1))); } // ~ -------------------------------------------------------------------------------------------------------- Server @Test public void testBgrewriteaof() { String r = redis1.bgrewriteaof(); Assert.assertNotNull(r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test bgrewriteaof. ", CaseCounter.incr(1))); } @Test public void testClientgetnameClientsetname() { Redis redis = RedisFactory.newRedis(HOST, PORT1, 2000, 1); redis.clientsetname("foobar"); String name = redis.clientgetname(); Assert.assertEquals("foobar", name); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test clientgetname & clientsetname. ", CaseCounter.incr(1))); } @Test public void testClientkill() { try { redis1.clientkill(HOST, PORT1); } catch (RedisException e) { Assert.assertTrue(true); } System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test clientkill. ", CaseCounter.incr(1))); } @Test public void testClientlist() { List<String> l = redis1.clientlist(); Assert.assertTrue(l.size() > 0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test clientlist. ", CaseCounter.incr(1))); } @Test public void testConfiggetConfigset() { redis1.configset("timeout", "3000"); String timeout = redis1.configget("*").get("timeout"); Assert.assertEquals("3000", timeout); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test configget & configset. ", CaseCounter.incr(1))); } @Test public void testConfigresetstat() { String r = redis1.configresetstat(); Assert.assertEquals("OK", r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test configresetstat. ", CaseCounter.incr(1))); } @Test public void testDbsize() { redis1.flushall(); redis1.set(key, value); long size = redis1.dbsize(); Assert.assertEquals(1, size); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test dbsize. ", CaseCounter.incr(1))); } @Test public void testDebugobject() { redis1.set(key, value); String r = redis1.debugobject(key); Assert.assertNotNull(r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test debugobject. ", CaseCounter.incr(1))); } @Test public void testFlushallFlushdb() { redis1.set(key, value); redis1.flushdb(); Assert.assertEquals(0L, redis1.dbsize().longValue()); redis1.set(key, value); redis1.flushall(); Assert.assertEquals(0L, redis1.dbsize().longValue()); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test flushall & flushdb. ", CaseCounter.incr(2))); } @Test public void testInfo() { String r = redis1.info(); Assert.assertNotNull(r); r = redis1.info("all"); Assert.assertNotNull(r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test info. ", CaseCounter.incr(2))); } @Test public void testLastsave() { long r = redis1.lastsave(); Assert.assertTrue(r > 0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test lastsave. ", CaseCounter.incr(1))); } @Test public void testSave() { String r = redis1.save(); Assert.assertEquals("OK", r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test save. ", CaseCounter.incr(1))); } @Test public void testSlaveof() { String r = redis1.slaveof(HOST, PORT2); Assert.assertEquals("OK", r); r = redis1.slaveofnoone(); Assert.assertEquals("OK", r); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test slaveof. ", CaseCounter.incr(1))); } @Test public void testSlowlog() { List<Slowlog> logs = redis1.slowlogget(); logs = redis1.slowlogget(1); redis1.slowlogreset(); long len = redis1.slowloglen(); Assert.assertTrue(len >= 0); Assert.assertTrue(logs.size() >= 0); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test slowlog. ", CaseCounter.incr(2))); } @Test public void testTime() { long r = redis1.time(); long c = System.currentTimeMillis(); Assert.assertTrue(r - c < 1000); r = redis1.microtime(); c = System.nanoTime(); Assert.assertTrue(r * 1000 - c < 1000000); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test time. ", CaseCounter.incr(2))); } @Test public void testBgsave() { try { redis1.bgsave(); } catch(Exception e) { } } @Test public void testSync() { try { redis1.sync(); } catch (Exception e) {} Assert.assertTrue(true); System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test sync. ", CaseCounter.incr(2))); } @Test public void testShutdown() { // this case shutdown redis server, hurts other unit test case, so we comment it and run it manually when needed. // redis1.shutdown(true); // try { // redis1.ping(); // } catch (RedisConnectionException e) { // Assert.assertTrue(true); // } System.out.println(String.format("[CRAFT-ATOM-REDIS] (^_^) <%s> Case -> test shutdown. ", CaseCounter.incr(1))); } }