From e1f3e03e7d987985c8761d2c846f02a15b30ab0c Mon Sep 17 00:00:00 2001 From: susongyan09725 Date: Tue, 1 Nov 2022 19:54:55 +0800 Subject: [PATCH 1/2] activate span for all jedis cmd --- .../redis/jedis/TracingJedisCluster.java | 3384 ++--------------- 1 file changed, 376 insertions(+), 3008 deletions(-) diff --git a/opentracing-redis-jedis/src/main/java/io/opentracing/contrib/redis/jedis/TracingJedisCluster.java b/opentracing-redis-jedis/src/main/java/io/opentracing/contrib/redis/jedis/TracingJedisCluster.java index feb9c6b..8397474 100644 --- a/opentracing-redis-jedis/src/main/java/io/opentracing/contrib/redis/jedis/TracingJedisCluster.java +++ b/opentracing-redis-jedis/src/main/java/io/opentracing/contrib/redis/jedis/TracingJedisCluster.java @@ -14,11 +14,6 @@ package io.opentracing.contrib.redis.jedis; import static io.opentracing.contrib.redis.common.TracingHelper.nullable; -import static io.opentracing.contrib.redis.common.TracingHelper.onError; - -import io.opentracing.Span; -import io.opentracing.contrib.redis.common.TracingConfiguration; -import io.opentracing.contrib.redis.common.TracingHelper; import java.io.IOException; import java.util.Arrays; import java.util.Collection; @@ -28,6 +23,9 @@ import java.util.Set; import java.util.function.Function; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import io.opentracing.Span; +import io.opentracing.contrib.redis.common.TracingConfiguration; +import io.opentracing.contrib.redis.common.TracingHelper; import redis.clients.jedis.BinaryClient.LIST_POSITION; import redis.clients.jedis.BinaryJedisPubSub; import redis.clients.jedis.BitOP; @@ -169,14 +167,7 @@ public TracingJedisCluster(Set jedisClusterNode, int connectionTime public String set(String key, String value) { Span span = helper.buildSpan("set", key); span.setTag("value", value); - try { - return super.set(key, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.set(key, value)); } @Override @@ -186,14 +177,7 @@ public String set(String key, String value, String nxxx, String expx, long time) span.setTag("nxxx", nxxx); span.setTag("expx", expx); span.setTag("time", time); - try { - return super.set(key, value, nxxx, expx, time); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.set(key, value, nxxx, expx, time)); } @Override @@ -208,66 +192,31 @@ public String set(String key, String value, String expx, long time) { @Override public String get(String key) { Span span = helper.buildSpan("get", key); - try { - return super.get(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.get(key)); } @Override public Long exists(String... keys) { Span span = helper.buildSpan("exists", keys); - try { - return super.exists(keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.exists(keys)); } @Override public Boolean exists(String key) { Span span = helper.buildSpan("exists", key); - try { - return super.exists(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.exists(key)); } @Override public Long del(String... keys) { Span span = helper.buildSpan("del", keys); - try { - return super.del(keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.del(keys)); } @Override public Long del(String key) { Span span = helper.buildSpan("del", key); - try { - return super.del(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.del(key)); } @Override @@ -285,14 +234,7 @@ public Long unlink(String... keys) { @Override public String type(String key) { Span span = helper.buildSpan("type", key); - try { - return super.type(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.type(key)); } @Override @@ -314,14 +256,7 @@ public String rename(String oldkey, String newkey) { Span span = helper.buildSpan("rename"); span.setTag("oldKey", nullable(oldkey)); span.setTag("newKey", nullable(newkey)); - try { - return super.rename(oldkey, newkey); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.rename(oldkey, newkey)); } @Override @@ -329,55 +264,27 @@ public Long renamenx(String oldkey, String newkey) { Span span = helper.buildSpan("renamenx"); span.setTag("oldKey", nullable(oldkey)); span.setTag("newKey", nullable(newkey)); - try { - return super.renamenx(oldkey, newkey); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.renamenx(oldkey, newkey)); } @Override public Long expire(String key, int seconds) { Span span = helper.buildSpan("expire", key); span.setTag("seconds", seconds); - try { - return super.expire(key, seconds); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.expire(key, seconds)); } @Override public Long expireAt(String key, long unixTime) { Span span = helper.buildSpan("expireAt", key); span.setTag("unixTime", unixTime); - try { - return super.expireAt(key, unixTime); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.expireAt(key, unixTime)); } @Override public Long ttl(String key) { Span span = helper.buildSpan("ttl", key); - try { - return super.ttl(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.ttl(key)); } @Override @@ -396,55 +303,27 @@ public Long touch(String... keys) { public Long move(String key, int dbIndex) { Span span = helper.buildSpan("move", key); span.setTag("dbIndex", dbIndex); - try { - return super.move(key, dbIndex); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.move(key, dbIndex)); } @Override public String getSet(String key, String value) { Span span = helper.buildSpan("getSet", key); span.setTag("value", value); - try { - return super.getSet(key, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.getSet(key, value)); } @Override public List mget(String... keys) { Span span = helper.buildSpan("mget", keys); - try { - return super.mget(keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.mget(keys)); } @Override public Long setnx(String key, String value) { Span span = helper.buildSpan("setnx", key); span.setTag("value", value); - try { - return super.setnx(key, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.setnx(key, value)); } @Override @@ -452,124 +331,61 @@ public String setex(String key, int seconds, String value) { Span span = helper.buildSpan("setex", key); span.setTag("seconds", seconds); span.setTag("value", value); - try { - return super.setex(key, seconds, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.setex(key, seconds, value)); } @Override public String mset(String... keysvalues) { Span span = helper.buildSpan("mset"); span.setTag("keysvalues", Arrays.toString(keysvalues)); - try { - return super.mset(keysvalues); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.mset(keysvalues)); } @Override public Long msetnx(String... keysvalues) { Span span = helper.buildSpan("msetnx"); span.setTag("keysvalues", Arrays.toString(keysvalues)); - try { - return super.msetnx(keysvalues); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.msetnx(keysvalues)); } @Override public Long decrBy(String key, long integer) { Span span = helper.buildSpan("decrBy", key); span.setTag("integer", integer); - try { - return super.decrBy(key, integer); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.decrBy(key, integer)); } @Override public Long decr(String key) { Span span = helper.buildSpan("decr", key); - try { - return super.decr(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.decr(key)); } @Override public Long incrBy(String key, long integer) { Span span = helper.buildSpan("incrBy", key); span.setTag("integer", integer); - try { - return super.incrBy(key, integer); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.incrBy(key, integer)); } @Override public Double incrByFloat(String key, double value) { Span span = helper.buildSpan("incrByFloat", key); span.setTag("value", value); - try { - return super.incrByFloat(key, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.incrByFloat(key, value)); } @Override public Long incr(String key) { Span span = helper.buildSpan("incr", key); - try { - return super.incr(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.incr(key)); } @Override public Long append(String key, String value) { Span span = helper.buildSpan("append", key); span.setTag("value", value); - try { - return super.append(key, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.append(key, value)); } @Override @@ -577,14 +393,7 @@ public String substr(String key, int start, int end) { Span span = helper.buildSpan("substr", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.substr(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.substr(key, start, end)); } @Override @@ -592,14 +401,7 @@ public Long hset(String key, String field, String value) { Span span = helper.buildSpan("hset", key); span.setTag("field", field); span.setTag("value", value); - try { - return super.hset(key, field, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hset(key, field, value)); } @Override @@ -613,14 +415,7 @@ public Long hset(String key, Map hash) { public String hget(String key, String field) { Span span = helper.buildSpan("hget", key); span.setTag("field", field); - try { - return super.hget(key, field); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hget(key, field)); } @Override @@ -628,42 +423,21 @@ public Long hsetnx(String key, String field, String value) { Span span = helper.buildSpan("hsetnx", key); span.setTag("field", field); span.setTag("value", value); - try { - return super.hsetnx(key, field, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hsetnx(key, field, value)); } @Override public String hmset(String key, Map hash) { Span span = helper.buildSpan("hmset", key); span.setTag("hash", TracingHelper.toString(hash)); - try { - return super.hmset(key, hash); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hmset(key, hash)); } @Override public List hmget(String key, String... fields) { Span span = helper.buildSpan("hmget", key); span.setTag("fields", Arrays.toString(fields)); - try { - return super.hmget(key, fields); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hmget(key, fields)); } @Override @@ -671,14 +445,7 @@ public Long hincrBy(String key, String field, long value) { Span span = helper.buildSpan("hincrBy", key); span.setTag("field", field); span.setTag("value", value); - try { - return super.hincrBy(key, field, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hincrBy(key, field, value)); } @Override @@ -686,135 +453,65 @@ public Double hincrByFloat(String key, String field, double value) { Span span = helper.buildSpan("hincrByFloat", key); span.setTag("field", field); span.setTag("value", value); - try { - return super.hincrByFloat(key, field, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hincrByFloat(key, field, value)); } @Override public Boolean hexists(String key, String field) { Span span = helper.buildSpan("hexists", key); span.setTag("field", field); - try { - return super.hexists(key, field); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hexists(key, field)); } @Override public Long hdel(String key, String... fields) { Span span = helper.buildSpan("hdel", key); span.setTag("fields", Arrays.toString(fields)); - try { - return super.hdel(key, fields); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hdel(key, fields)); } @Override public Long hlen(String key) { Span span = helper.buildSpan("hlen", key); - try { - return super.hlen(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hlen(key)); } @Override public Set hkeys(String key) { Span span = helper.buildSpan("hkeys", key); - try { - return super.hkeys(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hkeys(key)); } @Override public List hvals(String key) { Span span = helper.buildSpan("hvals", key); - try { - return super.hvals(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hvals(key)); } @Override public Map hgetAll(String key) { Span span = helper.buildSpan("hgetAll", key); - try { - return super.hgetAll(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hgetAll(key)); } @Override public Long rpush(String key, String... strings) { Span span = helper.buildSpan("rpush", key); span.setTag("strings", Arrays.toString(strings)); - try { - return super.rpush(key, strings); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.rpush(key, strings)); } @Override public Long lpush(String key, String... strings) { Span span = helper.buildSpan("lpush", key); span.setTag("strings", Arrays.toString(strings)); - try { - return super.lpush(key, strings); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.lpush(key, strings)); } @Override public Long llen(String key) { Span span = helper.buildSpan("llen", key); - try { - return super.llen(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.llen(key)); } @Override @@ -822,14 +519,7 @@ public List lrange(String key, long start, long end) { Span span = helper.buildSpan("lrange", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.lrange(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.lrange(key, start, end)); } @Override @@ -837,28 +527,14 @@ public String ltrim(String key, long start, long end) { Span span = helper.buildSpan("ltrim", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.ltrim(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.ltrim(key, start, end)); } @Override public String lindex(String key, long index) { Span span = helper.buildSpan("lindex", key); span.setTag("index", index); - try { - return super.lindex(key, index); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.lindex(key, index)); } @Override @@ -866,14 +542,7 @@ public String lset(String key, long index, String value) { Span span = helper.buildSpan("lset", key); span.setTag("index", index); span.setTag("value", value); - try { - return super.lset(key, index, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.lset(key, index, value)); } @Override @@ -881,40 +550,19 @@ public Long lrem(String key, long count, String value) { Span span = helper.buildSpan("lrem", key); span.setTag("count", count); span.setTag("value", value); - try { - return super.lrem(key, count, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.lrem(key, count, value)); } @Override public String lpop(String key) { Span span = helper.buildSpan("lpop", key); - try { - return super.lpop(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.lpop(key)); } @Override public String rpop(String key) { Span span = helper.buildSpan("rpop", key); - try { - return super.rpop(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.rpop(key)); } @Override @@ -922,82 +570,40 @@ public String rpoplpush(String srckey, String dstkey) { Span span = helper.buildSpan("rpoplpush"); span.setTag("srckey", srckey); span.setTag("dstkey", dstkey); - try { - return super.rpoplpush(srckey, dstkey); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.rpoplpush(srckey, dstkey)); } @Override public Long sadd(String key, String... members) { Span span = helper.buildSpan("sadd", key); span.setTag("members", Arrays.toString(members)); - try { - return super.sadd(key, members); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sadd(key, members)); } @Override public Set smembers(String key) { Span span = helper.buildSpan("smembers", key); - try { - return super.smembers(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.smembers(key)); } @Override public Long srem(String key, String... members) { Span span = helper.buildSpan("srem", key); span.setTag("members", Arrays.toString(members)); - try { - return super.srem(key, members); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.srem(key, members)); } @Override public String spop(String key) { Span span = helper.buildSpan("spop", key); - try { - return super.spop(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.spop(key)); } @Override public Set spop(String key, long count) { Span span = helper.buildSpan("spop", key); span.setTag("count", count); - try { - return super.spop(key, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.spop(key, count)); } @Override @@ -1006,149 +612,72 @@ public Long smove(String srckey, String dstkey, String member) { span.setTag("srckey", srckey); span.setTag("dstkey", dstkey); span.setTag("member", member); - try { - return super.smove(srckey, dstkey, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.smove(srckey, dstkey, member)); } @Override public Long scard(String key) { Span span = helper.buildSpan("scard", key); - try { - return super.scard(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.scard(key)); } @Override public Boolean sismember(String key, String member) { Span span = helper.buildSpan("sismember", key); span.setTag("member", member); - try { - return super.sismember(key, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sismember(key, member)); } @Override public Set sinter(String... keys) { Span span = helper.buildSpan("sinter", keys); - try { - return super.sinter(keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sinter(keys)); } @Override public Long sinterstore(String dstkey, String... keys) { Span span = helper.buildSpan("sinterstore", keys); span.setTag("dstkey", dstkey); - try { - return super.sinterstore(dstkey, keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sinterstore(dstkey, keys)); } @Override public Set sunion(String... keys) { Span span = helper.buildSpan("sunion", keys); - try { - return super.sunion(keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sunion(keys)); } @Override public Long sunionstore(String dstkey, String... keys) { Span span = helper.buildSpan("sunionstore", keys); span.setTag("dstkey", dstkey); - try { - return super.sunionstore(dstkey, keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sunionstore(dstkey, keys)); } @Override public Set sdiff(String... keys) { Span span = helper.buildSpan("sdiff", keys); - try { - return super.sdiff(keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sdiff(keys)); } @Override public Long sdiffstore(String dstkey, String... keys) { Span span = helper.buildSpan("sdiffstore", keys); span.setTag("dstkey", dstkey); - try { - return super.sdiffstore(dstkey, keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sdiffstore(dstkey, keys)); } @Override public String srandmember(String key) { Span span = helper.buildSpan("srandmember", key); - try { - return super.srandmember(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.srandmember(key)); } @Override public List srandmember(String key, int count) { Span span = helper.buildSpan("srandmember", key); span.setTag("count", count); - try { - return super.srandmember(key, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.srandmember(key, count)); } @Override @@ -1156,14 +685,7 @@ public Long zadd(String key, double score, String member) { Span span = helper.buildSpan("zadd", key); span.setTag("score", score); span.setTag("member", member); - try { - return super.zadd(key, score, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zadd(key, score, member)); } @Override @@ -1172,28 +694,14 @@ public Long zadd(String key, double score, String member, ZAddParams params) { span.setTag("score", score); span.setTag("member", member); span.setTag("params", TracingHelper.toString(params.getByteParams())); - try { - return super.zadd(key, score, member, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zadd(key, score, member, params)); } @Override public Long zadd(String key, Map scoreMembers) { Span span = helper.buildSpan("zadd", key); span.setTag("scoreMembers", TracingHelper.toString(scoreMembers)); - try { - return super.zadd(key, scoreMembers); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zadd(key, scoreMembers)); } @Override @@ -1201,14 +709,7 @@ public Long zadd(String key, Map scoreMembers, ZAddParams params Span span = helper.buildSpan("zadd", key); span.setTag("scoreMembers", TracingHelper.toString(scoreMembers)); span.setTag("params", TracingHelper.toString(params.getByteParams())); - try { - return super.zadd(key, scoreMembers, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zadd(key, scoreMembers, params)); } @Override @@ -1216,28 +717,14 @@ public Set zrange(String key, long start, long end) { Span span = helper.buildSpan("zrange", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.zrange(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrange(key, start, end)); } @Override public Long zrem(String key, String... members) { Span span = helper.buildSpan("zrem", key); span.setTag("members", Arrays.toString(members)); - try { - return super.zrem(key, members); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrem(key, members)); } @Override @@ -1245,14 +732,7 @@ public Double zincrby(String key, double score, String member) { Span span = helper.buildSpan("zincrby", key); span.setTag("score", score); span.setTag("member", member); - try { - return super.zincrby(key, score, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zincrby(key, score, member)); } @Override @@ -1261,42 +741,21 @@ public Double zincrby(String key, double score, String member, ZIncrByParams par span.setTag("score", score); span.setTag("member", member); span.setTag("params", TracingHelper.toString(params.getByteParams())); - try { - return super.zincrby(key, score, member, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zincrby(key, score, member, params)); } @Override public Long zrank(String key, String member) { Span span = helper.buildSpan("zrank", key); span.setTag("member", member); - try { - return super.zrank(key, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrank(key, member)); } @Override public Long zrevrank(String key, String member) { Span span = helper.buildSpan("zrevrank", key); span.setTag("member", member); - try { - return super.zrevrank(key, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrank(key, member)); } @Override @@ -1304,14 +763,7 @@ public Set zrevrange(String key, long start, long end) { Span span = helper.buildSpan("zrevrange", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.zrevrange(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrange(key, start, end)); } @Override @@ -1319,14 +771,7 @@ public Set zrangeWithScores(String key, long start, long end) { Span span = helper.buildSpan("zrangeWithScores", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.zrangeWithScores(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeWithScores(key, start, end)); } @Override @@ -1334,111 +779,54 @@ public Set zrevrangeWithScores(String key, long start, long end) { Span span = helper.buildSpan("zrevrangeWithScores", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.zrevrangeWithScores(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeWithScores(key, start, end)); } @Override public Long zcard(String key) { Span span = helper.buildSpan("zcard", key); - try { - return super.zcard(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zcard(key)); } @Override public Double zscore(String key, String member) { Span span = helper.buildSpan("zscore", key); span.setTag("member", member); - try { - return super.zscore(key, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zscore(key, member)); } - @Override public List sort(String key) { Span span = helper.buildSpan("sort", key); - try { - return super.sort(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sort(key)); } @Override public List sort(String key, SortingParams sortingParameters) { Span span = helper.buildSpan("sort", key); span.setTag("sortingParameters", TracingHelper.toString(sortingParameters.getParams())); - try { - return super.sort(key, sortingParameters); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sort(key, sortingParameters)); } @Override public List blpop(int timeout, String... keys) { Span span = helper.buildSpan("blpop", keys); span.setTag("timeout", timeout); - try { - return super.blpop(timeout, keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.blpop(timeout, keys)); } @Override public List blpop(String arg) { Span span = helper.buildSpan("blpop"); span.setTag("arg", arg); - try { - return super.blpop(arg); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.blpop(arg)); } @Override public List brpop(String arg) { Span span = helper.buildSpan("brpop"); span.setTag("arg", arg); - try { - return super.brpop(arg); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.brpop(arg)); } @Override @@ -1446,42 +834,21 @@ public Long sort(String key, SortingParams sortingParameters, String dstkey) { Span span = helper.buildSpan("sort", key); span.setTag("sortingParameters", TracingHelper.toString(sortingParameters.getParams())); span.setTag("dstkey", dstkey); - try { - return super.sort(key, sortingParameters, dstkey); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sort(key, sortingParameters, dstkey)); } @Override public Long sort(String key, String dstkey) { Span span = helper.buildSpan("sort", key); span.setTag("dstkey", dstkey); - try { - return super.sort(key, dstkey); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sort(key, dstkey)); } @Override public List brpop(int timeout, String... keys) { Span span = helper.buildSpan("brpop", keys); span.setTag("timeout", timeout); - try { - return super.brpop(timeout, keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.brpop(timeout, keys)); } @Override @@ -1489,14 +856,7 @@ public Long zcount(String key, double min, double max) { Span span = helper.buildSpan("zcount", key); span.setTag("min", min); span.setTag("max", max); - try { - return super.zcount(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zcount(key, min, max)); } @Override @@ -1504,14 +864,7 @@ public Long zcount(String key, String min, String max) { Span span = helper.buildSpan("zcount", key); span.setTag("min", min); span.setTag("max", max); - try { - return super.zcount(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zcount(key, min, max)); } @Override @@ -1519,14 +872,7 @@ public Set zrangeByScore(String key, double min, double max) { Span span = helper.buildSpan("zrangeByScore", key); span.setTag("min", min); span.setTag("max", max); - try { - return super.zrangeByScore(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScore(key, min, max)); } @Override @@ -1534,14 +880,7 @@ public Set zrangeByScore(String key, String min, String max) { Span span = helper.buildSpan("zrangeByScore", key); span.setTag("min", min); span.setTag("max", max); - try { - return super.zrangeByScore(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScore(key, min, max)); } @Override @@ -1551,14 +890,7 @@ public Set zrangeByScore(String key, double min, double max, int offset, span.setTag("max", max); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrangeByScore(key, min, max, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScore(key, min, max, offset, count)); } @Override @@ -1568,14 +900,7 @@ public Set zrangeByScore(String key, String min, String max, int offset, span.setTag("max", max); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrangeByScore(key, min, max, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScore(key, min, max, offset, count)); } @Override @@ -1583,14 +908,7 @@ public Set zrangeByScoreWithScores(String key, double min, double max) { Span span = helper.buildSpan("zrangeByScoreWithScores", key); span.setTag("min", min); span.setTag("max", max); - try { - return super.zrangeByScoreWithScores(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScoreWithScores(key, min, max)); } @Override @@ -1598,14 +916,7 @@ public Set zrangeByScoreWithScores(String key, String min, String max) { Span span = helper.buildSpan("zrangeByScoreWithScores", key); span.setTag("min", min); span.setTag("max", max); - try { - return super.zrangeByScoreWithScores(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScoreWithScores(key, min, max)); } @Override @@ -1616,14 +927,7 @@ public Set zrangeByScoreWithScores(String key, double min, double max, in span.setTag("max", max); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrangeByScoreWithScores(key, min, max, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScoreWithScores(key, min, max, offset, count)); } @Override @@ -1634,14 +938,7 @@ public Set zrangeByScoreWithScores(String key, String min, String max, in span.setTag("max", max); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrangeByScoreWithScores(key, min, max, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScoreWithScores(key, min, max, offset, count)); } @Override @@ -1649,14 +946,7 @@ public Set zrevrangeByScore(String key, double max, double min) { Span span = helper.buildSpan("zrevrangeByScore", key); span.setTag("max", max); span.setTag("min", min); - try { - return super.zrevrangeByScore(key, max, min); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScore(key, max, min)); } @Override @@ -1664,14 +954,7 @@ public Set zrevrangeByScore(String key, String max, String min) { Span span = helper.buildSpan("zrevrangeByScore", key); span.setTag("max", max); span.setTag("min", min); - try { - return super.zrevrangeByScore(key, max, min); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScore(key, max, min)); } @Override @@ -1681,14 +964,7 @@ public Set zrevrangeByScore(String key, double max, double min, int offs span.setTag("max", max); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrevrangeByScore(key, max, min, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScore(key, max, min, offset, count)); } @Override @@ -1696,14 +972,7 @@ public Set zrevrangeByScoreWithScores(String key, double max, double min) Span span = helper.buildSpan("zrevrangeByScoreWithScores", key); span.setTag("max", max); span.setTag("min", min); - try { - return super.zrevrangeByScoreWithScores(key, max, min); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScoreWithScores(key, max, min)); } @Override @@ -1714,14 +983,7 @@ public Set zrevrangeByScoreWithScores(String key, double max, double min, span.setTag("max", max); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrevrangeByScoreWithScores(key, max, min, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScoreWithScores(key, max, min, offset, count)); } @Override @@ -1732,14 +994,7 @@ public Set zrevrangeByScoreWithScores(String key, String max, String min, span.setTag("max", max); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrevrangeByScoreWithScores(key, max, min, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScoreWithScores(key, max, min, offset, count)); } @Override @@ -1749,14 +1004,7 @@ public Set zrevrangeByScore(String key, String max, String min, int offs span.setTag("max", max); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrevrangeByScore(key, max, min, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScore(key, max, min, offset, count)); } @Override @@ -1764,14 +1012,7 @@ public Set zrevrangeByScoreWithScores(String key, String max, String min) Span span = helper.buildSpan("zrevrangeByScoreWithScores", key); span.setTag("max", max); span.setTag("min", min); - try { - return super.zrevrangeByScoreWithScores(key, max, min); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScoreWithScores(key, max, min)); } @Override @@ -1779,14 +1020,7 @@ public Long zremrangeByRank(String key, long start, long end) { Span span = helper.buildSpan("zremrangeByRank", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.zremrangeByRank(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zremrangeByRank(key, start, end)); } @Override @@ -1794,14 +1028,7 @@ public Long zremrangeByScore(String key, double start, double end) { Span span = helper.buildSpan("zremrangeByScore", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.zremrangeByScore(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zremrangeByScore(key, start, end)); } @Override @@ -1809,14 +1036,7 @@ public Long zremrangeByScore(String key, String start, String end) { Span span = helper.buildSpan("zremrangeByScore", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.zremrangeByScore(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zremrangeByScore(key, start, end)); } @Override @@ -1824,14 +1044,7 @@ public Long zunionstore(String dstkey, String... sets) { Span span = helper.buildSpan("zunionstore"); span.setTag("dstkey", dstkey); span.setTag("sets", Arrays.toString(sets)); - try { - return super.zunionstore(dstkey, sets); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zunionstore(dstkey, sets)); } @Override @@ -1839,14 +1052,7 @@ public Long zunionstore(String dstkey, ZParams params, String... sets) { Span span = helper.buildSpan("zunionstore"); span.setTag("params", TracingHelper.toString(params.getParams())); span.setTag("sets", Arrays.toString(sets)); - try { - return super.zunionstore(dstkey, params, sets); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zunionstore(dstkey, params, sets)); } @Override @@ -1854,14 +1060,7 @@ public Long zinterstore(String dstkey, String... sets) { Span span = helper.buildSpan("zinterstore"); span.setTag("dstkey", dstkey); span.setTag("sets", Arrays.toString(sets)); - try { - return super.zinterstore(dstkey, sets); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zinterstore(dstkey, sets)); } @Override @@ -1870,14 +1069,7 @@ public Long zinterstore(String dstkey, ZParams params, String... sets) { span.setTag("dstkey", dstkey); span.setTag("params", TracingHelper.toString(params.getParams())); span.setTag("sets", Arrays.toString(sets)); - try { - return super.zinterstore(dstkey, params, sets); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zinterstore(dstkey, params, sets)); } @Override @@ -1885,14 +1077,7 @@ public Long zlexcount(String key, String min, String max) { Span span = helper.buildSpan("zlexcount", key); span.setTag("min", min); span.setTag("max", max); - try { - return super.zlexcount(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zlexcount(key, min, max)); } @Override @@ -1900,14 +1085,7 @@ public Set zrangeByLex(String key, String min, String max) { Span span = helper.buildSpan("zrangeByLex", key); span.setTag("min", min); span.setTag("max", max); - try { - return super.zrangeByLex(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByLex(key, min, max)); } @Override @@ -1917,14 +1095,7 @@ public Set zrangeByLex(String key, String min, String max, int offset, i span.setTag("max", max); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrangeByLex(key, min, max, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByLex(key, min, max, offset, count)); } @Override @@ -1932,14 +1103,7 @@ public Set zrevrangeByLex(String key, String max, String min) { Span span = helper.buildSpan("zrevrangeByLex", key); span.setTag("max", max); span.setTag("min", min); - try { - return super.zrevrangeByLex(key, max, min); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByLex(key, max, min)); } @Override @@ -1949,14 +1113,7 @@ public Set zrevrangeByLex(String key, String max, String min, int offset span.setTag("max", max); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrevrangeByLex(key, max, min, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByLex(key, max, min, offset, count)); } @Override @@ -1964,82 +1121,40 @@ public Long zremrangeByLex(String key, String min, String max) { Span span = helper.buildSpan("zremrangeByLex", key); span.setTag("min", min); span.setTag("max", max); - try { - return super.zremrangeByLex(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zremrangeByLex(key, min, max)); } @Override public Long strlen(String key) { Span span = helper.buildSpan("strlen", key); - try { - return super.strlen(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.strlen(key)); } @Override public Long lpushx(String key, String... string) { Span span = helper.buildSpan("lpushx", key); span.setTag("string", Arrays.toString(string)); - try { - return super.lpushx(key, string); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.lpushx(key, string)); } @Override public Long persist(String key) { Span span = helper.buildSpan("persist", key); - try { - return super.persist(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.persist(key)); } @Override public Long rpushx(String key, String... string) { Span span = helper.buildSpan("rpushx", key); span.setTag("string", Arrays.toString(string)); - try { - return super.rpushx(key, string); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.rpushx(key, string)); } @Override public String echo(String string) { Span span = helper.buildSpan("echo"); span.setTag("string", string); - try { - return super.echo(string); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.echo(string)); } @Override @@ -2048,14 +1163,7 @@ public Long linsert(String key, LIST_POSITION where, String pivot, String value) span.setTag("where", where.name()); span.setTag("pivot", pivot); span.setTag("value", value); - try { - return super.linsert(key, where, pivot, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.linsert(key, where, pivot, value)); } @Override @@ -2073,14 +1181,7 @@ public String brpoplpush(String source, String destination, int timeout) { span.setTag("source", source); span.setTag("destination", destination); span.setTag("timeout", timeout); - try { - return super.brpoplpush(source, destination, timeout); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.brpoplpush(source, destination, timeout)); } @Override @@ -2088,14 +1189,7 @@ public Boolean setbit(String key, long offset, boolean value) { Span span = helper.buildSpan("setbit", key); span.setTag("offset", offset); span.setTag("value", value); - try { - return super.setbit(key, offset, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.setbit(key, offset, value)); } @Override @@ -2103,28 +1197,14 @@ public Boolean setbit(String key, long offset, String value) { Span span = helper.buildSpan("setbit", key); span.setTag("offset", offset); span.setTag("value", value); - try { - return super.setbit(key, offset, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.setbit(key, offset, value)); } @Override public Boolean getbit(String key, long offset) { Span span = helper.buildSpan("getbit", key); span.setTag("offset", offset); - try { - return super.getbit(key, offset); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.getbit(key, offset)); } @Override @@ -2132,14 +1212,7 @@ public Long setrange(String key, long offset, String value) { Span span = helper.buildSpan("setrange", key); span.setTag("offset", offset); span.setTag("value", value); - try { - return super.setrange(key, offset, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.setrange(key, offset, value)); } @Override @@ -2147,28 +1220,14 @@ public String getrange(String key, long startOffset, long endOffset) { Span span = helper.buildSpan("getrange", key); span.setTag("startOffset", startOffset); span.setTag("endOffset", endOffset); - try { - return super.getrange(key, startOffset, endOffset); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.getrange(key, startOffset, endOffset)); } @Override public Long bitpos(String key, boolean value) { Span span = helper.buildSpan("bitpos", key); span.setTag("value", value); - try { - return super.bitpos(key, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.bitpos(key, value)); } @Override @@ -2176,58 +1235,29 @@ public Long bitpos(String key, boolean value, BitPosParams params) { Span span = helper.buildSpan("bitpos", key); span.setTag("value", value); span.setTag("params", TracingHelper.toString(params.getParams())); - try { - return super.bitpos(key, value, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.bitpos(key, value, params)); } - @Override public Object eval(String script, int keyCount, String... params) { Span span = helper.buildSpan("eval"); span.setTag("keyCount", keyCount); span.setTag("params", Arrays.toString(params)); - try { - return super.eval(script, keyCount, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.eval(script, keyCount, params)); } @Override public Object eval(String script, String key) { Span span = helper.buildSpan(Command.EVAL.name(), key); span.setTag("script", script); - try { - return super.eval(script, key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.eval(script, key)); } @Override public void subscribe(JedisPubSub jedisPubSub, String... channels) { Span span = helper.buildSpan("subscribe"); span.setTag("channels", Arrays.toString(channels)); - try { - super.subscribe(jedisPubSub, channels); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + helper.decorate(span, () -> super.subscribe(jedisPubSub, channels)); } @Override @@ -2235,28 +1265,14 @@ public Long publish(String channel, String message) { Span span = helper.buildSpan("publish"); span.setTag("channel", channel); span.setTag("message", message); - try { - return super.publish(channel, message); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.publish(channel, message)); } @Override public void psubscribe(JedisPubSub jedisPubSub, String... patterns) { Span span = helper.buildSpan("psubscribe"); span.setTag("patterns", Arrays.toString(patterns)); - try { - super.psubscribe(jedisPubSub, patterns); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + helper.decorate(span, () -> super.psubscribe(jedisPubSub, patterns)); } @Override @@ -2264,14 +1280,7 @@ public Object eval(String script, List keys, List args) { Span span = helper.buildSpan("eval"); span.setTag("keys", TracingHelper.toString(keys)); span.setTag("args", TracingHelper.toString(args)); - try { - return super.eval(script, keys, args); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.eval(script, keys, args)); } @Override @@ -2280,70 +1289,35 @@ public Object evalsha(String sha1, List keys, List args) { span.setTag("keys", TracingHelper.toString(keys)); span.setTag("args", TracingHelper.toString(args)); span.setTag("sha1", sha1); - try { - return super.evalsha(sha1, keys, args); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.evalsha(sha1, keys, args)); } @Override public Object evalsha(String script, String key) { Span span = helper.buildSpan(Command.EVALSHA.name(), key); span.setTag("script", script); - try { - return super.evalsha(script, key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.evalsha(script, key)); } @Override public Boolean scriptExists(String sha1, String key) { Span span = helper.buildSpan("scriptExists", key); span.setTag("sha1", sha1); - try { - return super.scriptExists(sha1, key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.scriptExists(sha1, key)); } @Override public List scriptExists(String key, String... sha1) { Span span = helper.buildSpan("scriptExists", key); span.setTag("sha1", Arrays.toString(sha1)); - try { - return super.scriptExists(key, sha1); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.scriptExists(key, sha1)); } @Override public String scriptLoad(String script, String key) { Span span = helper.buildSpan("scriptLoad", key); span.setTag("script", script); - try { - return super.scriptLoad(script, key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.scriptLoad(script, key)); } @Override @@ -2366,27 +1340,13 @@ public Object evalsha(String sha1, int keyCount, String... params) { span.setTag("keyCount", keyCount); span.setTag("params", Arrays.toString(params)); span.setTag("sha1", sha1); - try { - return super.evalsha(sha1, keyCount, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.evalsha(sha1, keyCount, params)); } @Override public Long bitcount(String key) { Span span = helper.buildSpan("bitcount", key); - try { - return super.bitcount(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.bitcount(key)); } @Override @@ -2394,14 +1354,7 @@ public Long bitcount(String key, long start, long end) { Span span = helper.buildSpan("bitcount", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.bitcount(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.bitcount(key, start, end)); } @Override @@ -2416,41 +1369,20 @@ public Long bitop(BitOP op, String destKey, String... srcKeys) { Span span = helper.buildSpan("bitop"); span.setTag("destKey", destKey); span.setTag("srcKeys", Arrays.toString(srcKeys)); - try { - return super.bitop(op, destKey, srcKeys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.bitop(op, destKey, srcKeys)); } @Override public String ping() { Span span = helper.buildSpan("ping"); - try { - return super.ping(); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.ping()); } @Override public String set(byte[] key, byte[] value) { Span span = helper.buildSpan("set", key); span.setTag("value", Arrays.toString(value)); - try { - return super.set(key, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.set(key, value)); } @Override @@ -2460,14 +1392,7 @@ public String set(byte[] key, byte[] value, byte[] nxxx, byte[] expx, long time) span.setTag("expx", Arrays.toString(expx)); span.setTag("time", time); span.setTag("value", Arrays.toString(value)); - try { - return super.set(key, value, nxxx, expx, time); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.set(key, value, nxxx, expx, time)); } @Override @@ -2482,81 +1407,39 @@ public String set(byte[] key, byte[] value, byte[] expx, long time) { @Override public byte[] get(byte[] key) { Span span = helper.buildSpan("get", key); - try { - return super.get(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.get(key)); } @Override public String quit() { Span span = helper.buildSpan("quit"); - try { - return super.quit(); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.quit()); } @Override public Long exists(byte[]... keys) { Span span = helper.buildSpan("exists"); span.setTag("keys", TracingHelper.toString(keys)); - try { - return super.exists(keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.exists(keys)); } @Override public Boolean exists(byte[] key) { Span span = helper.buildSpan("exists", key); - try { - return super.exists(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.exists(key)); } @Override public Long del(byte[]... keys) { Span span = helper.buildSpan("del"); span.setTag("keys", TracingHelper.toString(keys)); - try { - return super.del(keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.del(keys)); } @Override public Long del(byte[] key) { Span span = helper.buildSpan("del", key); - try { - return super.del(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.del(key)); } @Override @@ -2574,14 +1457,7 @@ public Long unlink(byte[]... keys) { @Override public String type(byte[] key) { Span span = helper.buildSpan("type", key); - try { - return super.type(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.type(key)); } @Override @@ -2601,14 +1477,7 @@ public String restore(byte[] key, int ttl, byte[] serializedValue) { @Override public String flushDB() { Span span = helper.buildSpan("flushDB"); - try { - return super.flushDB(); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.flushDB()); } @Override @@ -2616,14 +1485,7 @@ public String rename(byte[] oldkey, byte[] newkey) { Span span = helper.buildSpan("rename"); span.setTag("oldkey", Arrays.toString(oldkey)); span.setTag("newkey", Arrays.toString(newkey)); - try { - return super.rename(oldkey, newkey); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.rename(oldkey, newkey)); } @Override @@ -2631,82 +1493,40 @@ public Long renamenx(byte[] oldkey, byte[] newkey) { Span span = helper.buildSpan("renamenx"); span.setTag("oldkey", Arrays.toString(oldkey)); span.setTag("newkey", Arrays.toString(newkey)); - try { - return super.renamenx(oldkey, newkey); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.renamenx(oldkey, newkey)); } @Override public Long dbSize() { Span span = helper.buildSpan("dbSize"); - try { - return super.dbSize(); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.dbSize()); } @Override public Long expire(byte[] key, int seconds) { Span span = helper.buildSpan("expire", key); span.setTag("seconds", seconds); - try { - return super.expire(key, seconds); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.expire(key, seconds)); } @Override public Long pexpire(String key, long milliseconds) { Span span = helper.buildSpan("pexpire", key); span.setTag("milliseconds", milliseconds); - try { - return super.pexpire(key, milliseconds); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.pexpire(key, milliseconds)); } @Override public Long expireAt(byte[] key, long unixTime) { Span span = helper.buildSpan("expireAt", key); span.setTag("unixTime", unixTime); - try { - return super.expireAt(key, unixTime); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.expireAt(key, unixTime)); } @Override public Long ttl(byte[] key) { Span span = helper.buildSpan("ttl", key); - try { - return super.ttl(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.ttl(key)); } @Override @@ -2731,14 +1551,7 @@ public Long touch(byte[]... keys) { public String select(int index) { Span span = helper.buildSpan("select"); span.setTag("index", index); - try { - return super.select(index); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.select(index)); } @Override @@ -2752,56 +1565,28 @@ public String swapDB(int index1, int index2) { @Override public String flushAll() { Span span = helper.buildSpan("flushAll"); - try { - return super.flushAll(); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.flushAll()); } @Override public byte[] getSet(byte[] key, byte[] value) { Span span = helper.buildSpan("getSet", key); span.setTag("value", Arrays.toString(value)); - try { - return super.getSet(key, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.getSet(key, value)); } @Override public List mget(byte[]... keys) { Span span = helper.buildSpan("mget"); span.setTag("keys", TracingHelper.toString(keys)); - try { - return super.mget(keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.mget(keys)); } @Override public Long setnx(byte[] key, byte[] value) { Span span = helper.buildSpan("setnx", key); span.setTag("value", Arrays.toString(value)); - try { - return super.setnx(key, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.setnx(key, value)); } @Override @@ -2817,124 +1602,61 @@ public String setex(byte[] key, int seconds, byte[] value) { Span span = helper.buildSpan("setex", key); span.setTag("value", Arrays.toString(value)); span.setTag("seconds", seconds); - try { - return super.setex(key, seconds, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.setex(key, seconds, value)); } @Override public String mset(byte[]... keysvalues) { Span span = helper.buildSpan("mset"); span.setTag("keysvalues", TracingHelper.toString(keysvalues)); - try { - return super.mset(keysvalues); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.mset(keysvalues)); } @Override public Long msetnx(byte[]... keysvalues) { Span span = helper.buildSpan("msetnx"); span.setTag("keysvalues", TracingHelper.toString(keysvalues)); - try { - return super.msetnx(keysvalues); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.msetnx(keysvalues)); } @Override public Long decrBy(byte[] key, long integer) { Span span = helper.buildSpan("decrBy", key); span.setTag("integer", integer); - try { - return super.decrBy(key, integer); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.decrBy(key, integer)); } @Override public Long decr(byte[] key) { Span span = helper.buildSpan("decr", key); - try { - return super.decr(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.decr(key)); } @Override public Long incrBy(byte[] key, long integer) { Span span = helper.buildSpan("incrBy", key); span.setTag("integer", integer); - try { - return super.incrBy(key, integer); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.incrBy(key, integer)); } @Override public Double incrByFloat(byte[] key, double integer) { Span span = helper.buildSpan("incrByFloat", key); span.setTag("integer", integer); - try { - return super.incrByFloat(key, integer); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.incrByFloat(key, integer)); } @Override public Long incr(byte[] key) { Span span = helper.buildSpan("incr", key); - try { - return super.incr(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.incr(key)); } @Override public Long append(byte[] key, byte[] value) { Span span = helper.buildSpan("append", key); span.setTag("value", Arrays.toString(value)); - try { - return super.append(key, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.append(key, value)); } @Override @@ -2942,14 +1664,7 @@ public byte[] substr(byte[] key, int start, int end) { Span span = helper.buildSpan("substr", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.substr(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.substr(key, start, end)); } @Override @@ -2957,14 +1672,7 @@ public Long hset(byte[] key, byte[] field, byte[] value) { Span span = helper.buildSpan("hset", key); span.setTag("field", Arrays.toString(field)); span.setTag("value", Arrays.toString(value)); - try { - return super.hset(key, field, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hset(key, field, value)); } @Override @@ -2978,14 +1686,7 @@ public Long hset(byte[] key, Map hash) { public byte[] hget(byte[] key, byte[] field) { Span span = helper.buildSpan("hget", key); span.setTag("field", Arrays.toString(field)); - try { - return super.hget(key, field); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hget(key, field)); } @Override @@ -2993,42 +1694,21 @@ public Long hsetnx(byte[] key, byte[] field, byte[] value) { Span span = helper.buildSpan("hsetnx", key); span.setTag("field", Arrays.toString(field)); span.setTag("value", Arrays.toString(value)); - try { - return super.hsetnx(key, field, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hsetnx(key, field, value)); } @Override public String hmset(byte[] key, Map hash) { Span span = helper.buildSpan("hmset", key); span.setTag("hash", TracingHelper.toStringMap(hash)); - try { - return super.hmset(key, hash); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hmset(key, hash)); } @Override public List hmget(byte[] key, byte[]... fields) { Span span = helper.buildSpan("hmget", key); span.setTag("fields", TracingHelper.toString(fields)); - try { - return super.hmget(key, fields); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hmget(key, fields)); } @Override @@ -3036,14 +1716,7 @@ public Long hincrBy(byte[] key, byte[] field, long value) { Span span = helper.buildSpan("hincrBy", key); span.setTag("field", Arrays.toString(field)); span.setTag("value", value); - try { - return super.hincrBy(key, field, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hincrBy(key, field, value)); } @Override @@ -3051,135 +1724,65 @@ public Double hincrByFloat(byte[] key, byte[] field, double value) { Span span = helper.buildSpan("hincrByFloat", key); span.setTag("field", Arrays.toString(field)); span.setTag("value", value); - try { - return super.hincrByFloat(key, field, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hincrByFloat(key, field, value)); } @Override public Boolean hexists(byte[] key, byte[] field) { Span span = helper.buildSpan("hexists", key); span.setTag("field", Arrays.toString(field)); - try { - return super.hexists(key, field); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hexists(key, field)); } @Override public Long hdel(byte[] key, byte[]... fields) { Span span = helper.buildSpan("hdel", key); span.setTag("fields", TracingHelper.toString(fields)); - try { - return super.hdel(key, fields); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hdel(key, fields)); } @Override public Long hlen(byte[] key) { Span span = helper.buildSpan("hlen", key); - try { - return super.hlen(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hlen(key)); } @Override public Set hkeys(byte[] key) { Span span = helper.buildSpan("hkeys", key); - try { - return super.hkeys(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hkeys(key)); } @Override public Collection hvals(byte[] key) { Span span = helper.buildSpan("hvals", key); - try { - return super.hvals(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hvals(key)); } @Override public Map hgetAll(byte[] key) { Span span = helper.buildSpan("hgetAll", key); - try { - return super.hgetAll(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hgetAll(key)); } @Override public Long rpush(byte[] key, byte[]... strings) { Span span = helper.buildSpan("rpush", key); span.setTag("strings", TracingHelper.toString(strings)); - try { - return super.rpush(key, strings); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.rpush(key, strings)); } @Override public Long lpush(byte[] key, byte[]... strings) { Span span = helper.buildSpan("lpush", key); span.setTag("strings", TracingHelper.toString(strings)); - try { - return super.lpush(key, strings); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.lpush(key, strings)); } @Override public Long llen(byte[] key) { Span span = helper.buildSpan("llen", key); - try { - return super.llen(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.llen(key)); } @Override @@ -3187,14 +1790,7 @@ public List lrange(byte[] key, long start, long end) { Span span = helper.buildSpan("lrange", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.lrange(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.lrange(key, start, end)); } @Override @@ -3202,28 +1798,14 @@ public String ltrim(byte[] key, long start, long end) { Span span = helper.buildSpan("ltrim", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.ltrim(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.ltrim(key, start, end)); } @Override public byte[] lindex(byte[] key, long index) { Span span = helper.buildSpan("lindex", key); span.setTag("index", index); - try { - return super.lindex(key, index); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.lindex(key, index)); } @Override @@ -3231,14 +1813,7 @@ public String lset(byte[] key, long index, byte[] value) { Span span = helper.buildSpan("lset", key); span.setTag("index", index); span.setTag("value", Arrays.toString(value)); - try { - return super.lset(key, index, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.lset(key, index, value)); } @Override @@ -3246,40 +1821,19 @@ public Long lrem(byte[] key, long count, byte[] value) { Span span = helper.buildSpan("lrem", key); span.setTag("count", count); span.setTag("value", Arrays.toString(value)); - try { - return super.lrem(key, count, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.lrem(key, count, value)); } @Override public byte[] lpop(byte[] key) { Span span = helper.buildSpan("lpop", key); - try { - return super.lpop(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.lpop(key)); } @Override public byte[] rpop(byte[] key) { Span span = helper.buildSpan("rpop", key); - try { - return super.rpop(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.rpop(key)); } @Override @@ -3287,82 +1841,40 @@ public byte[] rpoplpush(byte[] srckey, byte[] dstkey) { Span span = helper.buildSpan("rpoplpush"); span.setTag("srckey", Arrays.toString(srckey)); span.setTag("dstkey", Arrays.toString(dstkey)); - try { - return super.rpoplpush(srckey, dstkey); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.rpoplpush(srckey, dstkey)); } @Override public Long sadd(byte[] key, byte[]... members) { Span span = helper.buildSpan("sadd", key); span.setTag("members", Arrays.toString(members)); - try { - return super.sadd(key, members); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sadd(key, members)); } @Override public Set smembers(byte[] key) { Span span = helper.buildSpan("smembers", key); - try { - return super.smembers(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.smembers(key)); } @Override public Long srem(byte[] key, byte[]... member) { Span span = helper.buildSpan("srem", key); span.setTag("member", Arrays.toString(member)); - try { - return super.srem(key, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.srem(key, member)); } @Override public byte[] spop(byte[] key) { Span span = helper.buildSpan("spop", key); - try { - return super.spop(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.spop(key)); } @Override public Set spop(byte[] key, long count) { Span span = helper.buildSpan("spop", key); span.setTag("count", count); - try { - return super.spop(key, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.spop(key, count)); } @Override @@ -3371,55 +1883,27 @@ public Long smove(byte[] srckey, byte[] dstkey, byte[] member) { span.setTag("srckey", Arrays.toString(srckey)); span.setTag("dstkey", Arrays.toString(dstkey)); span.setTag("member", Arrays.toString(member)); - try { - return super.smove(srckey, dstkey, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.smove(srckey, dstkey, member)); } @Override public Long scard(byte[] key) { Span span = helper.buildSpan("scard", key); - try { - return super.scard(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.scard(key)); } @Override public Boolean sismember(byte[] key, byte[] member) { Span span = helper.buildSpan("sismember", key); span.setTag("member", Arrays.toString(member)); - try { - return super.sismember(key, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sismember(key, member)); } @Override public Set sinter(byte[]... keys) { Span span = helper.buildSpan("sinter"); span.setTag("keys", TracingHelper.toString(keys)); - try { - return super.sinter(keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sinter(keys)); } @Override @@ -3427,28 +1911,14 @@ public Long sinterstore(byte[] dstkey, byte[]... keys) { Span span = helper.buildSpan("sinterstore"); span.setTag("dstkey", Arrays.toString(dstkey)); span.setTag("keys", TracingHelper.toString(keys)); - try { - return super.sinterstore(dstkey, keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sinterstore(dstkey, keys)); } @Override public Set sunion(byte[]... keys) { Span span = helper.buildSpan("sunion"); span.setTag("keys", TracingHelper.toString(keys)); - try { - return super.sunion(keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sunion(keys)); } @Override @@ -3456,28 +1926,14 @@ public Long sunionstore(byte[] dstkey, byte[]... keys) { Span span = helper.buildSpan("sunionstore"); span.setTag("dstkey", Arrays.toString(dstkey)); span.setTag("keys", TracingHelper.toString(keys)); - try { - return super.sunionstore(dstkey, keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sunionstore(dstkey, keys)); } @Override public Set sdiff(byte[]... keys) { Span span = helper.buildSpan("sdiff"); span.setTag("keys", TracingHelper.toString(keys)); - try { - return super.sdiff(keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sdiff(keys)); } @Override @@ -3485,41 +1941,20 @@ public Long sdiffstore(byte[] dstkey, byte[]... keys) { Span span = helper.buildSpan("sdiffstore"); span.setTag("dstkey", Arrays.toString(dstkey)); span.setTag("keys", TracingHelper.toString(keys)); - try { - return super.sdiffstore(dstkey, keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sdiffstore(dstkey, keys)); } @Override public byte[] srandmember(byte[] key) { Span span = helper.buildSpan("srandmember", key); - try { - return super.srandmember(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.srandmember(key)); } @Override public List srandmember(byte[] key, int count) { Span span = helper.buildSpan("srandmember", key); span.setTag("count", count); - try { - return super.srandmember(key, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.srandmember(key, count)); } @Override @@ -3527,14 +1962,7 @@ public Long zadd(byte[] key, double score, byte[] member) { Span span = helper.buildSpan("zadd", key); span.setTag("member", Arrays.toString(member)); span.setTag("score", score); - try { - return super.zadd(key, score, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zadd(key, score, member)); } @Override @@ -3543,28 +1971,14 @@ public Long zadd(byte[] key, double score, byte[] member, ZAddParams params) { span.setTag("member", Arrays.toString(member)); span.setTag("score", score); span.setTag("params", TracingHelper.toString(params.getByteParams())); - try { - return super.zadd(key, score, member, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zadd(key, score, member, params)); } @Override public Long zadd(byte[] key, Map scoreMembers) { Span span = helper.buildSpan("zadd", key); span.setTag("scoreMembers", TracingHelper.toStringMap2(scoreMembers)); - try { - return super.zadd(key, scoreMembers); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zadd(key, scoreMembers)); } @Override @@ -3572,14 +1986,7 @@ public Long zadd(byte[] key, Map scoreMembers, ZAddParams params Span span = helper.buildSpan("zadd", key); span.setTag("scoreMembers", TracingHelper.toStringMap2(scoreMembers)); span.setTag("params", TracingHelper.toString(params.getByteParams())); - try { - return super.zadd(key, scoreMembers, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zadd(key, scoreMembers, params)); } @Override @@ -3587,28 +1994,14 @@ public Set zrange(byte[] key, long start, long end) { Span span = helper.buildSpan("zrange", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.zrange(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrange(key, start, end)); } @Override public Long zrem(byte[] key, byte[]... members) { Span span = helper.buildSpan("zrem", key); span.setTag("members", Arrays.toString(members)); - try { - return super.zrem(key, members); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrem(key, members)); } @Override @@ -3616,14 +2009,7 @@ public Double zincrby(byte[] key, double score, byte[] member) { Span span = helper.buildSpan("zincrby", key); span.setTag("member", Arrays.toString(member)); span.setTag("score", score); - try { - return super.zincrby(key, score, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zincrby(key, score, member)); } @Override @@ -3632,42 +2018,21 @@ public Double zincrby(byte[] key, double score, byte[] member, ZIncrByParams par span.setTag("member", Arrays.toString(member)); span.setTag("score", score); span.setTag("params", TracingHelper.toString(params.getByteParams())); - try { - return super.zincrby(key, score, member, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zincrby(key, score, member, params)); } @Override public Long zrank(byte[] key, byte[] member) { Span span = helper.buildSpan("zrank", key); span.setTag("member", Arrays.toString(member)); - try { - return super.zrank(key, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrank(key, member)); } @Override public Long zrevrank(byte[] key, byte[] member) { Span span = helper.buildSpan("zrevrank", key); span.setTag("member", Arrays.toString(member)); - try { - return super.zrevrank(key, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrank(key, member)); } @Override @@ -3675,14 +2040,7 @@ public Set zrevrange(byte[] key, long start, long end) { Span span = helper.buildSpan("zrevrange", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.zrevrange(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrange(key, start, end)); } @Override @@ -3690,14 +2048,7 @@ public Set zrangeWithScores(byte[] key, long start, long end) { Span span = helper.buildSpan("zrangeWithScores", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.zrangeWithScores(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeWithScores(key, start, end)); } @Override @@ -3705,85 +2056,41 @@ public Set zrevrangeWithScores(byte[] key, long start, long end) { Span span = helper.buildSpan("zrevrangeWithScores", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.zrevrangeWithScores(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeWithScores(key, start, end)); } @Override public Long zcard(byte[] key) { Span span = helper.buildSpan("zcard", key); - try { - return super.zcard(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zcard(key)); } @Override public Double zscore(byte[] key, byte[] member) { Span span = helper.buildSpan("zscore", key); span.setTag("member", Arrays.toString(member)); - try { - return super.zscore(key, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zscore(key, member)); } - @Override public Long pexpireAt(String key, long millisecondsTimestamp) { Span span = helper.buildSpan("pexpireAt", key); span.setTag("millisecondsTimestamp", millisecondsTimestamp); - try { - return super.pexpireAt(key, millisecondsTimestamp); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.pexpireAt(key, millisecondsTimestamp)); } @Override public Long pttl(String key) { Span span = helper.buildSpan("pttl", key); - try { - return super.pttl(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.pttl(key)); } - @Override public String psetex(String key, long milliseconds, String value) { Span span = helper.buildSpan("psetex", key); span.setTag("value", value); span.setTag("milliseconds", milliseconds); - try { - return super.psetex(key, milliseconds, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.psetex(key, milliseconds, value)); } @Override @@ -3791,86 +2098,43 @@ public String set(String key, String value, String nxxx) { Span span = helper.buildSpan("set", key); span.setTag("value", value); span.setTag("nxxx", nxxx); - try { - return super.set(key, value, nxxx); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.set(key, value, nxxx)); } @Override public ScanResult> hscan(String key, int cursor) { Span span = helper.buildSpan("hscan", key); span.setTag("cursor", cursor); - try { - return super.hscan(key, cursor); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hscan(key, cursor)); } @Override public ScanResult sscan(String key, int cursor) { Span span = helper.buildSpan("sscan", key); span.setTag("cursor", cursor); - try { - return super.sscan(key, cursor); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sscan(key, cursor)); } @Override public ScanResult zscan(String key, int cursor) { Span span = helper.buildSpan("zscan", key); span.setTag("cursor", cursor); - try { - return super.zscan(key, cursor); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zscan(key, cursor)); } - @Override public ScanResult scan(String cursor, ScanParams params) { Span span = helper.buildSpan("scan"); span.setTag("cursor", cursor); span.setTag("params", TracingHelper.toString(params.getParams())); - try { - return super.scan(cursor, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.scan(cursor, params)); } @Override public ScanResult> hscan(String key, String cursor) { Span span = helper.buildSpan("hscan", key); span.setTag("cursor", cursor); - try { - return super.hscan(key, cursor); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hscan(key, cursor)); } @Override @@ -3878,28 +2142,14 @@ public ScanResult> hscan(String key, String cursor, ScanPa Span span = helper.buildSpan("hscan", key); span.setTag("cursor", cursor); span.setTag("params", TracingHelper.toString(params.getParams())); - try { - return super.hscan(key, cursor, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hscan(key, cursor, params)); } @Override public ScanResult sscan(String key, String cursor) { Span span = helper.buildSpan("sscan", key); span.setTag("cursor", cursor); - try { - return super.sscan(key, cursor); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sscan(key, cursor)); } @Override @@ -3907,28 +2157,14 @@ public ScanResult sscan(String key, String cursor, ScanParams params) { Span span = helper.buildSpan("sscan", key); span.setTag("cursor", cursor); span.setTag("params", TracingHelper.toString(params.getParams())); - try { - return super.sscan(key, cursor, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sscan(key, cursor, params)); } @Override public ScanResult zscan(String key, String cursor) { Span span = helper.buildSpan("zscan", key); span.setTag("cursor", cursor); - try { - return super.zscan(key, cursor); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zscan(key, cursor)); } @Override @@ -3936,17 +2172,9 @@ public ScanResult zscan(String key, String cursor, ScanParams params) { Span span = helper.buildSpan("zscan", key); span.setTag("cursor", cursor); span.setTag("params", TracingHelper.toString(params.getParams())); - try { - return super.zscan(key, cursor, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zscan(key, cursor, params)); } - @Override public void close() throws IOException { super.close(); @@ -3955,14 +2183,7 @@ public void close() throws IOException { @Override public Map getClusterNodes() { Span span = helper.buildSpan("getClusterNodes"); - try { - return super.getClusterNodes(); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.getClusterNodes()); } @Override @@ -3974,28 +2195,14 @@ public Jedis getConnectionFromSlot(int slot) { @Override public List sort(byte[] key) { Span span = helper.buildSpan("sort", key); - try { - return super.sort(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sort(key)); } @Override public List sort(byte[] key, SortingParams sortingParameters) { Span span = helper.buildSpan("sort", key); span.setTag("sortingParameters", TracingHelper.toString(sortingParameters.getParams())); - try { - return super.sort(key, sortingParameters); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sort(key, sortingParameters)); } @Override @@ -4003,14 +2210,7 @@ public List blpop(int timeout, byte[]... keys) { Span span = helper.buildSpan("blpop"); span.setTag("timeout", timeout); span.setTag("keys", TracingHelper.toString(keys)); - try { - return super.blpop(timeout, keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.blpop(timeout, keys)); } @Override @@ -4018,28 +2218,14 @@ public Long sort(byte[] key, SortingParams sortingParameters, byte[] dstkey) { Span span = helper.buildSpan("sort", key); span.setTag("sortingParameters", TracingHelper.toString(sortingParameters.getParams())); span.setTag("dstkey", Arrays.toString(dstkey)); - try { - return super.sort(key, sortingParameters, dstkey); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sort(key, sortingParameters, dstkey)); } @Override public Long sort(byte[] key, byte[] dstkey) { Span span = helper.buildSpan("sort", key); span.setTag("dstkey", Arrays.toString(dstkey)); - try { - return super.sort(key, dstkey); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sort(key, dstkey)); } @Override @@ -4047,44 +2233,21 @@ public List brpop(int timeout, byte[]... keys) { Span span = helper.buildSpan("brpop"); span.setTag("timeout", timeout); span.setTag("keys", TracingHelper.toString(keys)); - try { - return super.brpop(timeout, keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.brpop(timeout, keys)); } - @Override public String auth(String password) { Span span = helper.buildSpan("auth"); - try { - return super.auth(password); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.auth(password)); } - @Override public Long zcount(byte[] key, double min, double max) { Span span = helper.buildSpan("zcount", key); span.setTag("min", min); span.setTag("max", max); - try { - return super.zcount(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zcount(key, min, max)); } @Override @@ -4092,14 +2255,7 @@ public Long zcount(byte[] key, byte[] min, byte[] max) { Span span = helper.buildSpan("zcount", key); span.setTag("min", Arrays.toString(min)); span.setTag("max", Arrays.toString(max)); - try { - return super.zcount(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zcount(key, min, max)); } @Override @@ -4107,14 +2263,7 @@ public Set zrangeByScore(byte[] key, double min, double max) { Span span = helper.buildSpan("zrangeByScore", key); span.setTag("min", min); span.setTag("max", max); - try { - return super.zrangeByScore(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScore(key, min, max)); } @Override @@ -4122,14 +2271,7 @@ public Set zrangeByScore(byte[] key, byte[] min, byte[] max) { Span span = helper.buildSpan("zrangeByScore", key); span.setTag("min", Arrays.toString(min)); span.setTag("max", Arrays.toString(max)); - try { - return super.zrangeByScore(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScore(key, min, max)); } @Override @@ -4139,14 +2281,7 @@ public Set zrangeByScore(byte[] key, double min, double max, int offset, span.setTag("max", max); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrangeByScore(key, min, max, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScore(key, min, max, offset, count)); } @Override @@ -4156,14 +2291,7 @@ public Set zrangeByScore(byte[] key, byte[] min, byte[] max, int offset, span.setTag("max", Arrays.toString(max)); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrangeByScore(key, min, max, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScore(key, min, max, offset, count)); } @Override @@ -4171,14 +2299,7 @@ public Set zrangeByScoreWithScores(byte[] key, double min, double max) { Span span = helper.buildSpan("zrangeByScoreWithScores", key); span.setTag("min", min); span.setTag("max", max); - try { - return super.zrangeByScoreWithScores(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScoreWithScores(key, min, max)); } @Override @@ -4186,14 +2307,7 @@ public Set zrangeByScoreWithScores(byte[] key, byte[] min, byte[] max) { Span span = helper.buildSpan("zrangeByScoreWithScores", key); span.setTag("min", Arrays.toString(min)); span.setTag("max", Arrays.toString(max)); - try { - return super.zrangeByScoreWithScores(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScoreWithScores(key, min, max)); } @Override @@ -4204,14 +2318,7 @@ public Set zrangeByScoreWithScores(byte[] key, double min, double max, in span.setTag("max", max); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrangeByScoreWithScores(key, min, max, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScoreWithScores(key, min, max, offset, count)); } @Override @@ -4222,14 +2329,7 @@ public Set zrangeByScoreWithScores(byte[] key, byte[] min, byte[] max, in span.setTag("max", Arrays.toString(max)); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrangeByScoreWithScores(key, min, max, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByScoreWithScores(key, min, max, offset, count)); } @Override @@ -4237,14 +2337,7 @@ public Set zrevrangeByScore(byte[] key, double max, double min) { Span span = helper.buildSpan("zrevrangeByScore", key); span.setTag("min", min); span.setTag("max", max); - try { - return super.zrevrangeByScore(key, max, min); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScore(key, max, min)); } @Override @@ -4252,14 +2345,7 @@ public Set zrevrangeByScore(byte[] key, byte[] max, byte[] min) { Span span = helper.buildSpan("zrevrangeByScore", key); span.setTag("max", Arrays.toString(max)); span.setTag("min", Arrays.toString(min)); - try { - return super.zrevrangeByScore(key, max, min); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScore(key, max, min)); } @Override @@ -4269,14 +2355,7 @@ public Set zrevrangeByScore(byte[] key, double max, double min, int offs span.setTag("max", max); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrevrangeByScore(key, max, min, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScore(key, max, min, offset, count)); } @Override @@ -4286,14 +2365,7 @@ public Set zrevrangeByScore(byte[] key, byte[] max, byte[] min, int offs span.setTag("max", Arrays.toString(max)); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrevrangeByScore(key, max, min, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScore(key, max, min, offset, count)); } @Override @@ -4301,14 +2373,7 @@ public Set zrevrangeByScoreWithScores(byte[] key, double max, double min) Span span = helper.buildSpan("zrevrangeByScoreWithScores", key); span.setTag("min", min); span.setTag("max", max); - try { - return super.zrevrangeByScoreWithScores(key, max, min); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScoreWithScores(key, max, min)); } @Override @@ -4319,14 +2384,7 @@ public Set zrevrangeByScoreWithScores(byte[] key, double max, double min, span.setTag("max", max); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrevrangeByScoreWithScores(key, max, min, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScoreWithScores(key, max, min, offset, count)); } @Override @@ -4334,14 +2392,7 @@ public Set zrevrangeByScoreWithScores(byte[] key, byte[] max, byte[] min) Span span = helper.buildSpan("zrevrangeByScoreWithScores", key); span.setTag("max", Arrays.toString(max)); span.setTag("min", Arrays.toString(min)); - try { - return super.zrevrangeByScoreWithScores(key, max, min); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScoreWithScores(key, max, min)); } @Override @@ -4352,14 +2403,7 @@ public Set zrevrangeByScoreWithScores(byte[] key, byte[] max, byte[] min, span.setTag("max", Arrays.toString(max)); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrevrangeByScoreWithScores(key, max, min, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByScoreWithScores(key, max, min, offset, count)); } @Override @@ -4367,14 +2411,7 @@ public Long zremrangeByRank(byte[] key, long start, long end) { Span span = helper.buildSpan("zremrangeByRank", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.zremrangeByRank(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zremrangeByRank(key, start, end)); } @Override @@ -4382,14 +2419,7 @@ public Long zremrangeByScore(byte[] key, double start, double end) { Span span = helper.buildSpan("zremrangeByScore", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.zremrangeByScore(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zremrangeByScore(key, start, end)); } @Override @@ -4397,14 +2427,7 @@ public Long zremrangeByScore(byte[] key, byte[] start, byte[] end) { Span span = helper.buildSpan("zremrangeByScore", key); span.setTag("start", Arrays.toString(start)); span.setTag("end", Arrays.toString(end)); - try { - return super.zremrangeByScore(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zremrangeByScore(key, start, end)); } @Override @@ -4412,14 +2435,7 @@ public Long zunionstore(byte[] dstkey, byte[]... sets) { Span span = helper.buildSpan("zunionstore"); span.setTag("dstkey", Arrays.toString(dstkey)); span.setTag("sets", TracingHelper.toString(sets)); - try { - return super.zunionstore(dstkey, sets); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zunionstore(dstkey, sets)); } @Override @@ -4428,14 +2444,7 @@ public Long zunionstore(byte[] dstkey, ZParams params, byte[]... sets) { span.setTag("dstkey", Arrays.toString(dstkey)); span.setTag("params", TracingHelper.toString(params.getParams())); span.setTag("sets", TracingHelper.toString(sets)); - try { - return super.zunionstore(dstkey, params, sets); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zunionstore(dstkey, params, sets)); } @Override @@ -4443,14 +2452,7 @@ public Long zinterstore(byte[] dstkey, byte[]... sets) { Span span = helper.buildSpan("zinterstore"); span.setTag("dstkey", Arrays.toString(dstkey)); span.setTag("sets", TracingHelper.toString(sets)); - try { - return super.zinterstore(dstkey, sets); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zinterstore(dstkey, sets)); } @Override @@ -4459,14 +2461,7 @@ public Long zinterstore(byte[] dstkey, ZParams params, byte[]... sets) { span.setTag("dstkey", Arrays.toString(dstkey)); span.setTag("params", TracingHelper.toString(params.getParams())); span.setTag("sets", TracingHelper.toString(sets)); - try { - return super.zinterstore(dstkey, params, sets); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zinterstore(dstkey, params, sets)); } @Override @@ -4474,14 +2469,7 @@ public Long zlexcount(byte[] key, byte[] min, byte[] max) { Span span = helper.buildSpan("zlexcount"); span.setTag("min", Arrays.toString(min)); span.setTag("max", Arrays.toString(max)); - try { - return super.zlexcount(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zlexcount(key, min, max)); } @Override @@ -4489,14 +2477,7 @@ public Set zrangeByLex(byte[] key, byte[] min, byte[] max) { Span span = helper.buildSpan("zrangeByLex", key); span.setTag("min", Arrays.toString(min)); span.setTag("max", Arrays.toString(max)); - try { - return super.zrangeByLex(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByLex(key, min, max)); } @Override @@ -4506,14 +2487,7 @@ public Set zrangeByLex(byte[] key, byte[] min, byte[] max, int offset, i span.setTag("max", Arrays.toString(max)); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrangeByLex(key, min, max, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrangeByLex(key, min, max, offset, count)); } @Override @@ -4521,14 +2495,7 @@ public Set zrevrangeByLex(byte[] key, byte[] max, byte[] min) { Span span = helper.buildSpan("zrevrangeByLex", key); span.setTag("max", Arrays.toString(max)); span.setTag("min", Arrays.toString(min)); - try { - return super.zrevrangeByLex(key, max, min); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByLex(key, max, min)); } @Override @@ -4538,14 +2505,7 @@ public Set zrevrangeByLex(byte[] key, byte[] max, byte[] min, int offset span.setTag("max", Arrays.toString(max)); span.setTag("offset", offset); span.setTag("count", count); - try { - return super.zrevrangeByLex(key, max, min, offset, count); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zrevrangeByLex(key, max, min, offset, count)); } @Override @@ -4553,149 +2513,70 @@ public Long zremrangeByLex(byte[] key, byte[] min, byte[] max) { Span span = helper.buildSpan("zremrangeByLex", key); span.setTag("min", Arrays.toString(min)); span.setTag("max", Arrays.toString(max)); - try { - return super.zremrangeByLex(key, min, max); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zremrangeByLex(key, min, max)); } @Override public String save() { Span span = helper.buildSpan("save"); - try { - return super.save(); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.save()); } @Override public String bgsave() { Span span = helper.buildSpan("bgsave"); - try { - return super.bgsave(); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.bgsave()); } @Override public String bgrewriteaof() { Span span = helper.buildSpan("bgrewriteaof"); - try { - return super.bgrewriteaof(); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.bgrewriteaof()); } @Override public Long lastsave() { Span span = helper.buildSpan("lastsave"); - try { - return super.lastsave(); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.lastsave()); } @Override public String shutdown() { Span span = helper.buildSpan("shutdown"); - try { - return super.shutdown(); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.shutdown()); } @Override public String info() { Span span = helper.buildSpan("info"); - try { - return super.info(); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.info()); } @Override public String info(String section) { Span span = helper.buildSpan("info"); span.setTag("section", section); - try { - return super.info(section); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.info(section)); } - @Override public String slaveof(String host, int port) { Span span = helper.buildSpan("slaveof"); span.setTag("host", host); span.setTag("port", port); - try { - return super.slaveof(host, port); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.slaveof(host, port)); } @Override public String slaveofNoOne() { Span span = helper.buildSpan("slaveofNoOne"); - try { - return super.slaveofNoOne(); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.slaveofNoOne()); } - @Override public String configResetStat() { Span span = helper.buildSpan("configResetStat"); - try { - return super.configResetStat(); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.configResetStat()); } @Override @@ -4704,74 +2585,37 @@ public String configRewrite() { return helper.decorate(span, super::configRewrite); } - @Override public Long strlen(byte[] key) { Span span = helper.buildSpan("strlen", key); - try { - return super.strlen(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.strlen(key)); } - @Override public Long lpushx(byte[] key, byte[]... string) { Span span = helper.buildSpan("lpushx", key); span.setTag("string", TracingHelper.toString(string)); - try { - return super.lpushx(key, string); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.lpushx(key, string)); } @Override public Long persist(byte[] key) { Span span = helper.buildSpan("persist", key); - try { - return super.persist(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.persist(key)); } @Override public Long rpushx(byte[] key, byte[]... string) { Span span = helper.buildSpan("rpushx", key); span.setTag("string", TracingHelper.toString(string)); - try { - return super.rpushx(key, string); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.rpushx(key, string)); } @Override public byte[] echo(byte[] string) { Span span = helper.buildSpan("echo"); span.setTag("string", Arrays.toString(string)); - try { - return super.echo(string); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.echo(string)); } @Override @@ -4780,14 +2624,7 @@ public Long linsert(byte[] key, LIST_POSITION where, byte[] pivot, byte[] value) span.setTag("where", where.name()); span.setTag("pivot", Arrays.toString(pivot)); span.setTag("value", Arrays.toString(value)); - try { - return super.linsert(key, where, pivot, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.linsert(key, where, pivot, value)); } @Override @@ -4803,31 +2640,16 @@ public Long linsert(byte[] key, ListPosition where, byte[] pivot, byte[] value) public String debug(DebugParams params) { Span span = helper.buildSpan("debug"); span.setTag("params", Arrays.toString(params.getCommand())); - try { - return super.debug(params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.debug(params)); } - @Override public byte[] brpoplpush(byte[] source, byte[] destination, int timeout) { Span span = helper.buildSpan("brpoplpush"); span.setTag("timeout", timeout); span.setTag("source", Arrays.toString(source)); span.setTag("destination", Arrays.toString(destination)); - try { - return super.brpoplpush(source, destination, timeout); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.brpoplpush(source, destination, timeout)); } @Override @@ -4835,14 +2657,7 @@ public Boolean setbit(byte[] key, long offset, boolean value) { Span span = helper.buildSpan("setbit", key); span.setTag("offset", offset); span.setTag("value", value); - try { - return super.setbit(key, offset, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.setbit(key, offset, value)); } @Override @@ -4850,44 +2665,22 @@ public Boolean setbit(byte[] key, long offset, byte[] value) { Span span = helper.buildSpan("setbit", key); span.setTag("offset", offset); span.setTag("value", Arrays.toString(value)); - try { - return super.setbit(key, offset, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.setbit(key, offset, value)); } @Override public Boolean getbit(byte[] key, long offset) { Span span = helper.buildSpan("getbit", key); span.setTag("offset", offset); - try { - return super.getbit(key, offset); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.getbit(key, offset)); } - @Override public Long setrange(byte[] key, long offset, byte[] value) { Span span = helper.buildSpan("setrange", key); span.setTag("offset", offset); span.setTag("value", Arrays.toString(value)); - try { - return super.setrange(key, offset, value); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.setrange(key, offset, value)); } @Override @@ -4895,14 +2688,7 @@ public byte[] getrange(byte[] key, long startOffset, long endOffset) { Span span = helper.buildSpan("getrange", key); span.setTag("startOffset", startOffset); span.setTag("endOffset", endOffset); - try { - return super.getrange(key, startOffset, endOffset); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.getrange(key, startOffset, endOffset)); } @Override @@ -4910,55 +2696,27 @@ public Long publish(byte[] channel, byte[] message) { Span span = helper.buildSpan("publish"); span.setTag("channel", Arrays.toString(channel)); span.setTag("message", Arrays.toString(message)); - try { - return super.publish(channel, message); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.publish(channel, message)); } @Override public void subscribe(BinaryJedisPubSub jedisPubSub, byte[]... channels) { Span span = helper.buildSpan("subscribe"); span.setTag("channels", Arrays.toString(channels)); - try { - super.subscribe(jedisPubSub, channels); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + helper.decorate(span, () -> super.subscribe(jedisPubSub, channels)); } @Override public void psubscribe(BinaryJedisPubSub jedisPubSub, byte[]... patterns) { Span span = helper.buildSpan("psubscribe"); span.setTag("patterns", Arrays.toString(patterns)); - try { - super.psubscribe(jedisPubSub, patterns); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + helper.decorate(span, () -> super.psubscribe(jedisPubSub, patterns)); } @Override public Long getDB() { Span span = helper.buildSpan("getDB"); - try { - return super.getDB(); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.getDB()); } @Override @@ -4967,42 +2725,21 @@ public Object eval(byte[] script, List keys, List args) { span.setTag("script", Arrays.toString(script)); span.setTag("keys", TracingHelper.toString(keys)); span.setTag("args", TracingHelper.toString(args)); - try { - return super.eval(script, keys, args); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.eval(script, keys, args)); } @Override public Object eval(byte[] script, byte[] key) { Span span = helper.buildSpan("eval", key); span.setTag("script", Arrays.toString(script)); - try { - return super.eval(script, key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.eval(script, key)); } @Override public Object evalsha(byte[] script, byte[] key) { Span span = helper.buildSpan("evalsha", key); span.setTag("script", Arrays.toString(script)); - try { - return super.evalsha(script, key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.evalsha(script, key)); } @Override @@ -5011,14 +2748,7 @@ public Object eval(byte[] script, byte[] keyCount, byte[]... params) { span.setTag("script", Arrays.toString(script)); span.setTag("keyCount", Arrays.toString(keyCount)); span.setTag("params", TracingHelper.toString(params)); - try { - return super.eval(script, keyCount, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.eval(script, keyCount, params)); } @Override @@ -5027,31 +2757,16 @@ public Object eval(byte[] script, int keyCount, byte[]... params) { span.setTag("script", Arrays.toString(script)); span.setTag("keyCount", keyCount); span.setTag("params", TracingHelper.toString(params)); - try { - return super.eval(script, keyCount, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.eval(script, keyCount, params)); } - @Override public Object evalsha(byte[] sha1, List keys, List args) { Span span = helper.buildSpan("evalsha"); span.setTag("sha1", Arrays.toString(sha1)); span.setTag("keys", TracingHelper.toString(keys)); span.setTag("args", TracingHelper.toString(args)); - try { - return super.evalsha(sha1, keys, args); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.evalsha(sha1, keys, args)); } @Override @@ -5060,82 +2775,39 @@ public Object evalsha(byte[] sha1, int keyCount, byte[]... params) { span.setTag("params", TracingHelper.toString(params)); span.setTag("sha1", Arrays.toString(sha1)); span.setTag("keyCount", keyCount); - try { - return super.evalsha(sha1, keyCount, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.evalsha(sha1, keyCount, params)); } @Override public List scriptExists(byte[] key, byte[][] sha1) { Span span = helper.buildSpan("scriptExists", key); span.setTag("sha1", TracingHelper.toString(sha1)); - try { - return super.scriptExists(key, sha1); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.scriptExists(key, sha1)); } @Override public byte[] scriptLoad(byte[] script, byte[] key) { Span span = helper.buildSpan("scriptLoad", key); span.setTag("script", Arrays.toString(script)); - try { - return super.scriptLoad(script, key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.scriptLoad(script, key)); } @Override public String scriptFlush(byte[] key) { Span span = helper.buildSpan("scriptFlush", key); - try { - return super.scriptFlush(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.scriptFlush(key)); } @Override public String scriptKill(byte[] key) { Span span = helper.buildSpan("scriptKill", key); - try { - return super.scriptKill(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.scriptKill(key)); } - @Override public Long bitcount(byte[] key) { Span span = helper.buildSpan("bitcount", key); - try { - return super.bitcount(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.bitcount(key)); } @Override @@ -5143,14 +2815,7 @@ public Long bitcount(byte[] key, long start, long end) { Span span = helper.buildSpan("bitcount", key); span.setTag("start", start); span.setTag("end", end); - try { - return super.bitcount(key, start, end); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.bitcount(key, start, end)); } @Override @@ -5158,86 +2823,42 @@ public Long bitop(BitOP op, byte[] destKey, byte[]... srcKeys) { Span span = helper.buildSpan("bitop"); span.setTag("destKey", Arrays.toString(destKey)); span.setTag("srcKeys", TracingHelper.toString(srcKeys)); - try { - return super.bitop(op, destKey, srcKeys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.bitop(op, destKey, srcKeys)); } - @Override public Long pexpire(byte[] key, long milliseconds) { Span span = helper.buildSpan("pexpire", key); span.setTag("milliseconds", milliseconds); - try { - return super.pexpire(key, milliseconds); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.pexpire(key, milliseconds)); } @Override public Long pexpireAt(byte[] key, long millisecondsTimestamp) { Span span = helper.buildSpan("pexpireAt", key); span.setTag("millisecondsTimestamp", millisecondsTimestamp); - try { - return super.pexpireAt(key, millisecondsTimestamp); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.pexpireAt(key, millisecondsTimestamp)); } - @Override public Long waitReplicas(int replicas, long timeout) { Span span = helper.buildSpan("waitReplicas"); span.setTag("replicas", replicas); span.setTag("timeout", timeout); - try { - return super.waitReplicas(replicas, timeout); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.waitReplicas(replicas, timeout)); } @Override public Long pfadd(byte[] key, byte[]... elements) { Span span = helper.buildSpan("pfadd", key); span.setTag("elements", TracingHelper.toString(elements)); - try { - return super.pfadd(key, elements); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.pfadd(key, elements)); } @Override public long pfcount(byte[] key) { Span span = helper.buildSpan("pfcount", key); - try { - return super.pfcount(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.pfcount(key)); } @Override @@ -5245,58 +2866,29 @@ public String pfmerge(byte[] destkey, byte[]... sourcekeys) { Span span = helper.buildSpan("pfmerge"); span.setTag("destkey", Arrays.toString(destkey)); span.setTag("sourcekeys", TracingHelper.toString(sourcekeys)); - try { - return super.pfmerge(destkey, sourcekeys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.pfmerge(destkey, sourcekeys)); } @Override public Long pfcount(byte[]... keys) { Span span = helper.buildSpan("pfcount"); span.setTag("keys", TracingHelper.toString(keys)); - try { - return super.pfcount(keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.pfcount(keys)); } - @Override public ScanResult scan(byte[] cursor, ScanParams params) { Span span = helper.buildSpan("scan"); span.setTag("cursor", Arrays.toString(cursor)); span.setTag("params", TracingHelper.toString(params.getParams())); - try { - return super.scan(cursor, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.scan(cursor, params)); } @Override public ScanResult> hscan(byte[] key, byte[] cursor) { Span span = helper.buildSpan("hscan", key); span.setTag("cursor", Arrays.toString(cursor)); - try { - return super.hscan(key, cursor); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hscan(key, cursor)); } @Override @@ -5304,28 +2896,14 @@ public ScanResult> hscan(byte[] key, byte[] cursor, ScanPa Span span = helper.buildSpan("hscan", key); span.setTag("cursor", Arrays.toString(cursor)); span.setTag("params", TracingHelper.toString(params.getParams())); - try { - return super.hscan(key, cursor, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.hscan(key, cursor, params)); } @Override public ScanResult sscan(byte[] key, byte[] cursor) { Span span = helper.buildSpan("sscan", key); span.setTag("cursor", Arrays.toString(cursor)); - try { - return super.sscan(key, cursor); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sscan(key, cursor)); } @Override @@ -5333,28 +2911,14 @@ public ScanResult sscan(byte[] key, byte[] cursor, ScanParams params) { Span span = helper.buildSpan("sscan", key); span.setTag("cursor", Arrays.toString(cursor)); span.setTag("params", TracingHelper.toString(params.getParams())); - try { - return super.sscan(key, cursor, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.sscan(key, cursor, params)); } @Override public ScanResult zscan(byte[] key, byte[] cursor) { Span span = helper.buildSpan("zscan", key); span.setTag("cursor", Arrays.toString(cursor)); - try { - return super.zscan(key, cursor); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zscan(key, cursor)); } @Override @@ -5362,14 +2926,7 @@ public ScanResult zscan(byte[] key, byte[] cursor, ScanParams params) { Span span = helper.buildSpan("zscan", key); span.setTag("cursor", Arrays.toString(cursor)); span.setTag("params", TracingHelper.toString(params.getParams())); - try { - return super.zscan(key, cursor, params); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.zscan(key, cursor, params)); } @Override @@ -5400,28 +2957,14 @@ public Long geoadd(byte[] key, double longitude, double latitude, byte[] member) span.setTag("longitude", longitude); span.setTag("latitude", latitude); span.setTag("member", Arrays.toString(member)); - try { - return super.geoadd(key, longitude, latitude, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.geoadd(key, longitude, latitude, member)); } @Override public Long geoadd(byte[] key, Map memberCoordinateMap) { Span span = helper.buildSpan("geoadd", key); span.setTag("memberCoordinateMap", TracingHelper.toStringMap2(memberCoordinateMap)); - try { - return super.geoadd(key, memberCoordinateMap); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.geoadd(key, memberCoordinateMap)); } @Override @@ -5429,14 +2972,7 @@ public Double geodist(byte[] key, byte[] member1, byte[] member2) { Span span = helper.buildSpan("geodist", key); span.setTag("member1", Arrays.toString(member1)); span.setTag("member2", Arrays.toString(member2)); - try { - return super.geodist(key, member1, member2); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.geodist(key, member1, member2)); } @Override @@ -5445,42 +2981,21 @@ public Double geodist(byte[] key, byte[] member1, byte[] member2, GeoUnit unit) span.setTag("member1", Arrays.toString(member1)); span.setTag("member2", Arrays.toString(member2)); span.setTag("unit", unit.name()); - try { - return super.geodist(key, member1, member2, unit); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.geodist(key, member1, member2, unit)); } @Override public List geohash(byte[] key, byte[]... members) { Span span = helper.buildSpan("geohash", key); span.setTag("members", Arrays.toString(members)); - try { - return super.geohash(key, members); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.geohash(key, members)); } @Override public List geopos(byte[] key, byte[]... members) { Span span = helper.buildSpan("geopos", key); span.setTag("members", Arrays.toString(members)); - try { - return super.geopos(key, members); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.geopos(key, members)); } @Override @@ -5491,14 +3006,7 @@ public List georadius(byte[] key, double longitude, double la span.setTag("latitude", latitude); span.setTag("radius", radius); span.setTag("unit", unit.name()); - try { - return super.georadius(key, longitude, latitude, radius, unit); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.georadius(key, longitude, latitude, radius, unit)); } @Override @@ -5522,14 +3030,7 @@ public List georadius(byte[] key, double longitude, double la span.setTag("radius", radius); span.setTag("unit", unit.name()); span.setTag("param", TracingHelper.toString(param.getByteParams())); - try { - return super.georadius(key, longitude, latitude, radius, unit, param); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.georadius(key, longitude, latitude, radius, unit, param)); } @Override @@ -5553,14 +3054,7 @@ public List georadiusByMember(byte[] key, byte[] member, doub span.setTag("member", Arrays.toString(member)); span.setTag("radius", radius); span.setTag("unit", unit.name()); - try { - return super.georadiusByMember(key, member, radius, unit); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.georadiusByMember(key, member, radius, unit)); } @Override @@ -5582,14 +3076,7 @@ public List georadiusByMember(byte[] key, byte[] member, doub span.setTag("radius", radius); span.setTag("unit", unit.name()); span.setTag("param", TracingHelper.toString(param.getByteParams())); - try { - return super.georadiusByMember(key, member, radius, unit, param); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.georadiusByMember(key, member, radius, unit, param)); } @Override @@ -5615,40 +3102,19 @@ public Set keys(byte[] pattern) { public Long pfadd(String key, String... elements) { Span span = helper.buildSpan("pfadd"); span.setTag("elements", Arrays.toString(elements)); - try { - return super.pfadd(key, elements); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.pfadd(key, elements)); } @Override public long pfcount(String key) { Span span = helper.buildSpan("pfcount", key); - try { - return super.pfcount(key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.pfcount(key)); } @Override public long pfcount(String... keys) { Span span = helper.buildSpan("pfcount", keys); - try { - return super.pfcount(keys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.pfcount(keys)); } @Override @@ -5656,42 +3122,21 @@ public String pfmerge(String destkey, String... sourcekeys) { Span span = helper.buildSpan("pfmerge"); span.setTag("destkey", destkey); span.setTag("sourcekeys", Arrays.toString(sourcekeys)); - try { - return super.pfmerge(destkey, sourcekeys); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.pfmerge(destkey, sourcekeys)); } @Override public List blpop(int timeout, String key) { Span span = helper.buildSpan("blpop"); span.setTag("timeout", timeout); - try { - return super.blpop(timeout, key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.blpop(timeout, key)); } @Override public List brpop(int timeout, String key) { Span span = helper.buildSpan("brpop"); span.setTag("timeout", timeout); - try { - return super.brpop(timeout, key); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.brpop(timeout, key)); } @Override @@ -5700,28 +3145,14 @@ public Long geoadd(String key, double longitude, double latitude, String member) span.setTag("longitude", longitude); span.setTag("latitude", latitude); span.setTag("member", member); - try { - return super.geoadd(key, longitude, latitude, member); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.geoadd(key, longitude, latitude, member)); } @Override public Long geoadd(String key, Map memberCoordinateMap) { Span span = helper.buildSpan("geoadd"); span.setTag("memberCoordinateMap", TracingHelper.toString(memberCoordinateMap)); - try { - return super.geoadd(key, memberCoordinateMap); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.geoadd(key, memberCoordinateMap)); } @Override @@ -5729,14 +3160,7 @@ public Double geodist(String key, String member1, String member2) { Span span = helper.buildSpan("geodist", key); span.setTag("member1", member1); span.setTag("member2", member2); - try { - return super.geodist(key, member1, member2); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.geodist(key, member1, member2)); } @Override @@ -5745,42 +3169,21 @@ public Double geodist(String key, String member1, String member2, GeoUnit unit) span.setTag("member1", member1); span.setTag("member2", member2); span.setTag("unit", unit.name()); - try { - return super.geodist(key, member1, member2, unit); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.geodist(key, member1, member2, unit)); } @Override public List geohash(String key, String... members) { Span span = helper.buildSpan("geohash", key); span.setTag("members", Arrays.toString(members)); - try { - return super.geohash(key, members); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.geohash(key, members)); } @Override public List geopos(String key, String... members) { Span span = helper.buildSpan("geopos", key); span.setTag("members", Arrays.toString(members)); - try { - return super.geopos(key, members); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.geopos(key, members)); } @Override @@ -5791,14 +3194,7 @@ public List georadius(String key, double longitude, double la span.setTag("latitude", latitude); span.setTag("radius", radius); span.setTag("unit", unit.name()); - try { - return super.georadius(key, longitude, latitude, radius, unit); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.georadius(key, longitude, latitude, radius, unit)); } @Override @@ -5822,14 +3218,7 @@ public List georadius(String key, double longitude, double la span.setTag("radius", radius); span.setTag("unit", unit.name()); span.setTag("param", TracingHelper.toString(param.getByteParams())); - try { - return super.georadius(key, longitude, latitude, radius, unit, param); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.georadius(key, longitude, latitude, radius, unit, param)); } @Override @@ -5853,14 +3242,7 @@ public List georadiusByMember(String key, String member, doub span.setTag("member", member); span.setTag("radius", radius); span.setTag("unit", unit.name()); - try { - return super.georadiusByMember(key, member, radius, unit); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.georadiusByMember(key, member, radius, unit)); } @Override @@ -5882,14 +3264,7 @@ public List georadiusByMember(String key, String member, doub span.setTag("radius", radius); span.setTag("unit", unit.name()); span.setTag("param", TracingHelper.toString(param.getByteParams())); - try { - return super.georadiusByMember(key, member, radius, unit, param); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.georadiusByMember(key, member, radius, unit, param)); } @Override @@ -5908,14 +3283,7 @@ public List georadiusByMemberReadonly(String key, String memb public List bitfield(String key, String... arguments) { Span span = helper.buildSpan("bitfield", key); span.setTag("arguments", Arrays.toString(arguments)); - try { - return super.bitfield(key, arguments); - } catch (Exception e) { - onError(e, span); - throw e; - } finally { - span.finish(); - } + return helper.decorate(span, () -> super.bitfield(key, arguments)); } @Override From ea410247803d45f1ac42721abec8cdedb0cf84af Mon Sep 17 00:00:00 2001 From: susongyan Date: Thu, 17 Nov 2022 20:18:17 +0800 Subject: [PATCH 2/2] add unit tests for tracingJedisCluster --- opentracing-redis-jedis/pom.xml | 7 + .../contrib/redis/HostAndPortUtil.java | 119 ++ .../commands/AllKindOfValuesCommandsTest.java | 772 +++++++++++ .../commands/BinaryValuesCommandsTest.java | 281 ++++ .../commands/BitCommandsTest.java | 211 +++ .../commands/GeoCommandsTest.java | 386 ++++++ .../commands/HashesCommandsTest.java | 464 +++++++ .../commands/HyperLogLogCommandsTest.java | 131 ++ .../commands/JedisCommandTestBase.java | 82 ++ .../commands/ListCommandsTest.java | 581 ++++++++ .../commands/ObjectCommandsTest.java | 44 + .../commands/ScriptingCommandsTest.java | 234 ++++ .../commands/SetCommandsTest.java | 557 ++++++++ .../commands/SlowlogCommandsTest.java | 42 + .../commands/SortedSetCommandsTest.java | 1214 +++++++++++++++++ .../commands/SortingCommandsTest.java | 294 ++++ .../commands/StringValuesCommandsTest.java | 230 ++++ .../redis/jediscluster/commands/TestKeys.java | 53 + .../commands/VariadicCommandsTest.java | 191 +++ .../contrib/redis/utils/AssertUtil.java | 39 + .../redis/utils/ByteArrayComparatorTest.java | 29 + .../contrib/redis/utils/ClientKillerUtil.java | 23 + .../redis/utils/FailoverAbortedException.java | 17 + .../redis/utils/JedisClusterCRC16Test.java | 45 + .../redis/utils/JedisClusterTestUtil.java | 80 ++ .../redis/utils/JedisSentinelTestUtil.java | 41 + .../redis/utils/JedisURIHelperTest.java | 53 + 27 files changed, 6220 insertions(+) create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/HostAndPortUtil.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/AllKindOfValuesCommandsTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/BinaryValuesCommandsTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/BitCommandsTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/GeoCommandsTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/HashesCommandsTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/HyperLogLogCommandsTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/JedisCommandTestBase.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/ListCommandsTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/ObjectCommandsTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/ScriptingCommandsTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SetCommandsTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SlowlogCommandsTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SortedSetCommandsTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SortingCommandsTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/StringValuesCommandsTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/TestKeys.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/VariadicCommandsTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/AssertUtil.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/ByteArrayComparatorTest.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/ClientKillerUtil.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/FailoverAbortedException.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisClusterCRC16Test.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisClusterTestUtil.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisSentinelTestUtil.java create mode 100644 opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisURIHelperTest.java diff --git a/opentracing-redis-jedis/pom.xml b/opentracing-redis-jedis/pom.xml index d0ef4b0..2d0da76 100644 --- a/opentracing-redis-jedis/pom.xml +++ b/opentracing-redis-jedis/pom.xml @@ -46,6 +46,13 @@ embedded-redis test + + + org.testcontainers + testcontainers + 1.17.4 + test + \ No newline at end of file diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/HostAndPortUtil.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/HostAndPortUtil.java new file mode 100644 index 0000000..4a40c89 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/HostAndPortUtil.java @@ -0,0 +1,119 @@ +package io.opentracing.contrib.redis; + +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.Protocol; + +import java.util.ArrayList; +import java.util.List; + +public final class HostAndPortUtil { + private static List redisHostAndPortList = new ArrayList(); + private static List sentinelHostAndPortList = new ArrayList(); + private static List clusterHostAndPortList = new ArrayList(); + + private static GenericContainer jedisClusterContainer = null; + + private HostAndPortUtil() { + throw new InstantiationError("Must not instantiate this class"); + } + + static { + redisHostAndPortList.add(new HostAndPort("localhost", Protocol.DEFAULT_PORT)); + redisHostAndPortList.add(new HostAndPort("localhost", Protocol.DEFAULT_PORT + 1)); + redisHostAndPortList.add(new HostAndPort("localhost", Protocol.DEFAULT_PORT + 2)); + redisHostAndPortList.add(new HostAndPort("localhost", Protocol.DEFAULT_PORT + 3)); + redisHostAndPortList.add(new HostAndPort("localhost", Protocol.DEFAULT_PORT + 4)); + redisHostAndPortList.add(new HostAndPort("localhost", Protocol.DEFAULT_PORT + 5)); + redisHostAndPortList.add(new HostAndPort("localhost", Protocol.DEFAULT_PORT + 6)); + + sentinelHostAndPortList.add(new HostAndPort("localhost", Protocol.DEFAULT_SENTINEL_PORT)); + sentinelHostAndPortList.add(new HostAndPort("localhost", Protocol.DEFAULT_SENTINEL_PORT + 1)); + sentinelHostAndPortList.add(new HostAndPort("localhost", Protocol.DEFAULT_SENTINEL_PORT + 2)); + sentinelHostAndPortList.add(new HostAndPort("localhost", Protocol.DEFAULT_SENTINEL_PORT + 3)); +// +// clusterHostAndPortList.add(new HostAndPort("localhost", 7379)); +// clusterHostAndPortList.add(new HostAndPort("localhost", 7380)); +// clusterHostAndPortList.add(new HostAndPort("localhost", 7381)); +// clusterHostAndPortList.add(new HostAndPort("localhost", 7382)); +// clusterHostAndPortList.add(new HostAndPort("localhost", 7383)); +// clusterHostAndPortList.add(new HostAndPort("localhost", 7384)); + + String envRedisHosts = System.getProperty("redis-hosts"); + String envSentinelHosts = System.getProperty("sentinel-hosts"); + String envClusterHosts = System.getProperty("cluster-hosts"); + + redisHostAndPortList = parseHosts(envRedisHosts, redisHostAndPortList); + sentinelHostAndPortList = parseHosts(envSentinelHosts, sentinelHostAndPortList); + clusterHostAndPortList = parseHosts(envClusterHosts, clusterHostAndPortList); + + List ports = new ArrayList<>(); + ports.add("7000:7000"); + ports.add("7001:7001"); + ports.add("7002:7002"); + ports.add("7003:7003"); + ports.add("7004:7004"); + jedisClusterContainer = new GenericContainer("grokzen/redis-cluster") + .withEnv("IP", "0.0.0.0") + .withExposedPorts(7000, 7001, 7002, 7003, 7004) + .waitingFor(Wait.forLogMessage("[\\w\\W]*Cluster state changed: ok[\\w\\W]*", 6)); + + ; + jedisClusterContainer.setPortBindings(ports); + jedisClusterContainer.start(); + + clusterHostAndPortList.add(new HostAndPort(jedisClusterContainer.getHost(), 7000)); + clusterHostAndPortList.add(new HostAndPort(jedisClusterContainer.getHost(), 7001)); + clusterHostAndPortList.add(new HostAndPort(jedisClusterContainer.getHost(), 7002)); + clusterHostAndPortList.add(new HostAndPort(jedisClusterContainer.getHost(), 7003)); + clusterHostAndPortList.add(new HostAndPort(jedisClusterContainer.getHost(), 7004)); + + } + + public static List parseHosts(String envHosts, + List existingHostsAndPorts) { + + if (null != envHosts && 0 < envHosts.length()) { + + String[] hostDefs = envHosts.split(","); + + if (null != hostDefs && 2 <= hostDefs.length) { + + List envHostsAndPorts = new ArrayList(hostDefs.length); + + for (String hostDef : hostDefs) { + + String[] hostAndPortParts = HostAndPort.extractParts(hostDef); + + if (null != hostAndPortParts && 2 == hostAndPortParts.length) { + String host = hostAndPortParts[0]; + int port = Protocol.DEFAULT_PORT; + + try { + port = Integer.parseInt(hostAndPortParts[1]); + } catch (final NumberFormatException nfe) { + } + + } + } + + return envHostsAndPorts; + } + } + + return existingHostsAndPorts; + } + + public static List getRedisServers() { + return redisHostAndPortList; + } + + public static List getSentinelServers() { + return sentinelHostAndPortList; + } + + public static List getClusterServers() { + return clusterHostAndPortList; + } +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/AllKindOfValuesCommandsTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/AllKindOfValuesCommandsTest.java new file mode 100644 index 0000000..ac74983 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/AllKindOfValuesCommandsTest.java @@ -0,0 +1,772 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import org.junit.Test; +import redis.clients.jedis.Protocol.Keyword; +import redis.clients.jedis.ScanParams; +import redis.clients.jedis.ScanResult; +import redis.clients.jedis.exceptions.JedisDataException; +import redis.clients.util.JedisClusterCRC16; +import redis.clients.util.SafeEncoder; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import static io.opentracing.contrib.redis.jediscluster.commands.TestKeys.*; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static redis.clients.jedis.ScanParams.SCAN_POINTER_START; +import static redis.clients.jedis.ScanParams.SCAN_POINTER_START_BINARY; + +public class AllKindOfValuesCommandsTest extends JedisCommandTestBase { + final byte[] bnx = {0x6E, 0x78}; + final byte[] bex = {0x65, 0x78}; + final long expireSeconds = 2; + +// @Test +// public void ping() { +// String status = jedisCluster.ping(); +// assertEquals("PONG", status); +// } + +// @Test +// public void pingWithMessage() { +// String argument = "message"; +// assertEquals(argument, jedis.ping(argument)); +// +// assertArrayEquals(bfoobar, jedis.ping(bfoobar)); +// } + + @Test + public void exists() { + String status = jedisCluster.set("foo", "bar"); + assertEquals("OK", status); + + status = jedisCluster.set(bfoo, bbar); + assertEquals("OK", status); + + boolean reply = jedisCluster.exists("foo"); + assertTrue(reply); + + reply = jedisCluster.exists(bfoo); + assertTrue(reply); + + long lreply = jedisCluster.del("foo"); + assertEquals(1, lreply); + + lreply = jedisCluster.del(bfoo); + assertEquals(1, lreply); + + reply = jedisCluster.exists("foo"); + assertFalse(reply); + + reply = jedisCluster.exists(bfoo); + assertFalse(reply); + } + + @Test + public void existsMany() { + String status = jedisCluster.set(foo, bar); + assertEquals("OK", status); + + status = jedisCluster.set(foo2, bar2); + assertEquals("OK", status); + + long reply = jedisCluster.exists(foo, foo2); + assertEquals(2, reply); + + long lreply = jedisCluster.del(foo); + assertEquals(1, lreply); + + reply = jedisCluster.exists(foo, foo2); + assertEquals(1, reply); + } + + @Test + public void del() { + jedisCluster.set(foo, bar); + jedisCluster.set(foo2, bar3); + jedisCluster.set(foo3, bar3); + + long reply = jedisCluster.del(foo, foo2, foo3); + assertEquals(3, reply); + + Boolean breply = jedisCluster.exists(foo); + assertFalse(breply); + breply = jedisCluster.exists(foo2); + assertFalse(breply); + breply = jedisCluster.exists(foo3); + assertFalse(breply); + + jedisCluster.set(foo, bar); + + reply = jedisCluster.del(foo, foo2); + assertEquals(1, reply); + + reply = jedisCluster.del(foo, foo2); + assertEquals(0, reply); + + // Binary ... + jedisCluster.set(bfoo1, bbar1); + jedisCluster.set(bfoo2, bbar2); + jedisCluster.set(bfoo3, bbar3); + + reply = jedisCluster.del(bfoo1, bfoo2, bfoo3); + assertEquals(3, reply); + + breply = jedisCluster.exists(bfoo1); + assertFalse(breply); + breply = jedisCluster.exists(bfoo2); + assertFalse(breply); + breply = jedisCluster.exists(bfoo3); + assertFalse(breply); + + jedisCluster.set(bfoo1, bbar1); + + reply = jedisCluster.del(bfoo1, bfoo2); + assertEquals(1, reply); + + reply = jedisCluster.del(bfoo1, bfoo2); + assertEquals(0, reply); + } + + @Test + public void unlink() { + jedisCluster.set(foo1, bar1); + jedisCluster.set(foo2, bar2); + jedisCluster.set(foo3, bar3); + + long reply = jedisCluster.unlink(foo1, foo2, foo3); + assertEquals(3, reply); + + reply = jedisCluster.exists(foo1, foo2, foo3); + assertEquals(0, reply); + + jedisCluster.set(foo1, bar1); + + reply = jedisCluster.unlink(foo1, foo2); + assertEquals(1, reply); + + reply = jedisCluster.unlink(foo1, foo2); + assertEquals(0, reply); + + // Binary ... + jedisCluster.set(bfoo1, bbar1); + jedisCluster.set(bfoo2, bbar2); + jedisCluster.set(bfoo3, bbar3); + + reply = jedisCluster.unlink(bfoo1, bfoo2, bfoo3); + assertEquals(3, reply); + + reply = jedisCluster.exists(bfoo1, bfoo2, bfoo3); + assertEquals(0, reply); + + jedisCluster.set(bfoo1, bbar1); + + reply = jedisCluster.unlink(bfoo1, bfoo2); + assertEquals(1, reply); + + reply = jedisCluster.unlink(bfoo1, bfoo2); + assertEquals(0, reply); + } + + @Test + public void type() { + jedisCluster.set("foo", "bar"); + String status = jedisCluster.type("foo"); + assertEquals("string", status); + + // Binary + jedisCluster.set(bfoo, bbar); + status = jedisCluster.type(bfoo); + assertEquals("string", status); + } + + @Test + public void keys() { + jedisCluster.set(foo, bar); + jedisCluster.set(foobar, bar); + + Set keys = jedisCluster.keys(foostar); + Set expected = new HashSet(); + expected.add(foo); + expected.add(foobar); + assertEquals(expected, keys); + + expected = new HashSet(); + keys = jedisCluster.keys(barstar); + + assertEquals(expected, keys); + + // Binary + jedisCluster.set(bfoo, bbar); + jedisCluster.set(bfoobar, bbar); + + Set bkeys = jedisCluster.keys(bfoostar); + assertEquals(2, bkeys.size()); + assertTrue(setContains(bkeys, bfoo)); + assertTrue(setContains(bkeys, bfoobar)); + + bkeys = jedisCluster.keys(bbarstar); + + assertEquals(0, bkeys.size()); + } + +// @Test +// public void randomKey() { +// assertNull(jedis.randomKey()); +// +// jedis.set("foo", "bar"); +// +// assertEquals("foo", jedis.randomKey()); +// +// jedis.set("bar", "foo"); +// +// String randomkey = jedis.randomKey(); +// assertTrue(randomkey.equals("foo") || randomkey.equals("bar")); +// +// // Binary +// jedis.del("foo"); +// jedis.del("bar"); +// assertNull(jedis.randomKey()); +// +// jedis.set(bfoo, bbar); +// +// assertArrayEquals(bfoo, jedis.randomBinaryKey()); +// +// jedis.set(bbar, bfoo); +// +// byte[] randomBkey = jedis.randomBinaryKey(); +// assertTrue(Arrays.equals(randomBkey, bfoo) || Arrays.equals(randomBkey, bbar)); +// +// } + + @Test + public void rename() { + String key1 = "foo{rename}"; + String key2 = "bar{rename}"; + jedisCluster.set(key1, key2); + String status = jedisCluster.rename(key1, key2); + assertEquals("OK", status); + + String value = jedisCluster.get(key1); + assertNull(value); + + value = jedisCluster.get(key2); + assertEquals(key2, value); + + // Binary + byte[] bKey1 = SafeEncoder.encode("bfoo{rename}"); + byte[] bKey2 = SafeEncoder.encode("bbar{rename}"); + jedisCluster.set(bKey1, bKey2); + String bstatus = jedisCluster.rename(bKey1, bKey2); + assertEquals("OK", bstatus); + + byte[] bvalue = jedisCluster.get(bKey1); + assertNull(bvalue); + + bvalue = jedisCluster.get(bKey2); + assertArrayEquals(bKey2, bvalue); + } + + @Test + public void renameOldAndNewAreTheSame() { + jedisCluster.set("foo", "bar"); + jedisCluster.rename("foo", "foo"); + + // Binary + jedisCluster.set(bfoo, bbar); + jedisCluster.rename(bfoo, bfoo); + } + + @Test + public void renamenx() { + jedisCluster.set(foo, bar); + long status = jedisCluster.renamenx(foo, bar); + assertEquals(1, status); + + jedisCluster.set(foo, bar); + status = jedisCluster.renamenx(foo, bar); + assertEquals(0, status); + + // Binary + jedisCluster.set(bfoo, bbar); + long bstatus = jedisCluster.renamenx(bfoo, bbar); + assertEquals(1, bstatus); + + jedisCluster.set(bfoo, bbar); + bstatus = jedisCluster.renamenx(bfoo, bbar); + assertEquals(0, bstatus); + + } + +// @Test +// public void dbSize() { +// long size = jedisCluster.dbSize(); +// assertEquals(0, size); +// +// jedisCluster.set("foo", "bar"); +// size = jedisCluster.dbSize(); +// assertEquals(1, size); +// +// // Binary +// jedisCluster.set(bfoo, bbar); +// size = jedisCluster.dbSize(); +// assertEquals(2, size); +// } + + @Test + public void expire() { + long status = jedisCluster.expire("foo", 20); + assertEquals(0, status); + + jedisCluster.set("foo", "bar"); + status = jedisCluster.expire("foo", 20); + assertEquals(1, status); + + // Binary + long bstatus = jedisCluster.expire(bfoo, 20); + assertEquals(0, bstatus); + + jedisCluster.set(bfoo, bbar); + bstatus = jedisCluster.expire(bfoo, 20); + assertEquals(1, bstatus); + + } + + @Test + public void expireAt() { + long unixTime = (System.currentTimeMillis() / 1000L) + 20; + + long status = jedisCluster.expireAt("foo", unixTime); + assertEquals(0, status); + + jedisCluster.set("foo", "bar"); + unixTime = (System.currentTimeMillis() / 1000L) + 20; + status = jedisCluster.expireAt("foo", unixTime); + assertEquals(1, status); + + // Binary + long bstatus = jedisCluster.expireAt(bfoo, unixTime); + assertEquals(0, bstatus); + + jedisCluster.set(bfoo, bbar); + unixTime = (System.currentTimeMillis() / 1000L) + 20; + bstatus = jedisCluster.expireAt(bfoo, unixTime); + assertEquals(1, bstatus); + + } + + @Test + public void ttl() { + long ttl = jedisCluster.ttl("foo"); + assertEquals(-2, ttl); + + jedisCluster.set("foo", "bar"); + ttl = jedisCluster.ttl("foo"); + assertEquals(-1, ttl); + + jedisCluster.expire("foo", 20); + ttl = jedisCluster.ttl("foo"); + assertTrue(ttl >= 0 && ttl <= 20); + + // Binary + long bttl = jedisCluster.ttl(bfoo); + assertEquals(-2, bttl); + + jedisCluster.set(bfoo, bbar); + bttl = jedisCluster.ttl(bfoo); + assertEquals(-1, bttl); + + jedisCluster.expire(bfoo, 20); + bttl = jedisCluster.ttl(bfoo); + assertTrue(bttl >= 0 && bttl <= 20); + + } + + +// @Test +// public void select() { +// jedisCluster.set("foo", "bar"); +// String status = jedisCluster.select(1); +// assertEquals("OK", status); +// assertNull(jedisCluster.get("foo")); +// status = jedisCluster.select(0); +// assertEquals("OK", status); +// assertEquals("bar", jedisCluster.get("foo")); +// // Binary +// jedisCluster.set(bfoo, bbar); +// String bstatus = jedisCluster.select(1); +// assertEquals("OK", bstatus); +// assertNull(jedisCluster.get(bfoo)); +// bstatus = jedisCluster.select(0); +// assertEquals("OK", bstatus); +// assertArrayEquals(bbar, jedisCluster.get(bfoo)); +// } + +// @Test +// public void getDB() { +// assertEquals(0, jedisCluster.getDB().longValue()); +// jedisCluster.select(1); +// assertEquals(1, jedisCluster.getDB().longValue()); +// } + +// @Test +// public void move() { +// long status = jedis.move("foo", 1); +// assertEquals(0, status); +// +// jedis.set("foo", "bar"); +// status = jedis.move("foo", 1); +// assertEquals(1, status); +// assertNull(jedis.get("foo")); +// +// jedis.select(1); +// assertEquals("bar", jedis.get("foo")); +// +// // Binary +// jedis.select(0); +// long bstatus = jedis.move(bfoo, 1); +// assertEquals(0, bstatus); +// +// jedis.set(bfoo, bbar); +// bstatus = jedis.move(bfoo, 1); +// assertEquals(1, bstatus); +// assertNull(jedis.get(bfoo)); +// +// jedis.select(1); +// assertArrayEquals(bbar, jedis.get(bfoo)); +// +// } +// +// @Test +// public void swapDB() { +// jedisCluster.set("foo1", "bar1"); +// jedisCluster.select(1); +// assertNull(jedisCluster.get("foo1")); +// jedisCluster.set("foo2", "bar2"); +// String status = jedisCluster.swapDB(0, 1); +// assertEquals("OK", status); +// assertEquals("bar1", jedisCluster.get("foo1")); +// assertNull(jedisCluster.get("foo2")); +// jedisCluster.select(0); +// assertNull(jedisCluster.get("foo1")); +// assertEquals("bar2", jedisCluster.get("foo2")); +// +// // Binary +// jedisCluster.set(bfoo1, bbar1); +// jedisCluster.select(1); +// assertArrayEquals(null, jedisCluster.get(bfoo1)); +// jedisCluster.set(bfoo2, bbar2); +// status = jedisCluster.swapDB(0, 1); +// assertEquals("OK", status); +// assertArrayEquals(bbar1, jedisCluster.get(bfoo1)); +// assertArrayEquals(null, jedisCluster.get(bfoo2)); +// jedisCluster.select(0); +// assertArrayEquals(null, jedisCluster.get(bfoo1)); +// assertArrayEquals(bbar2, jedisCluster.get(bfoo2)); +// } + +// @Test +// public void flushDB() { +// jedis.set("foo", "bar"); +// assertEquals(1, jedis.dbSize().intValue()); +// jedis.set("bar", "foo"); +// jedis.move("bar", 1); +// String status = jedis.flushDB(); +// assertEquals("OK", status); +// assertEquals(0, jedis.dbSize().intValue()); +// jedis.select(1); +// assertEquals(1, jedis.dbSize().intValue()); +// jedis.del("bar"); +// +// // Binary +// jedis.select(0); +// jedis.set(bfoo, bbar); +// assertEquals(1, jedis.dbSize().intValue()); +// jedis.set(bbar, bfoo); +// jedis.move(bbar, 1); +// String bstatus = jedis.flushDB(); +// assertEquals("OK", bstatus); +// assertEquals(0, jedis.dbSize().intValue()); +// jedis.select(1); +// assertEquals(1, jedis.dbSize().intValue()); +// +// } + +// +// @Test +// public void flushAll() { +// jedis.set("foo", "bar"); +// assertEquals(1, jedis.dbSize().intValue()); +// jedis.set("bar", "foo"); +// jedis.move("bar", 1); +// String status = jedis.flushAll(); +// assertEquals("OK", status); +// assertEquals(0, jedis.dbSize().intValue()); +// jedis.select(1); +// assertEquals(0, jedis.dbSize().intValue()); +// +// // Binary +// jedis.select(0); +// jedis.set(bfoo, bbar); +// assertEquals(1, jedis.dbSize().intValue()); +// jedis.set(bbar, bfoo); +// jedis.move(bbar, 1); +// String bstatus = jedis.flushAll(); +// assertEquals("OK", bstatus); +// assertEquals(0, jedis.dbSize().intValue()); +// jedis.select(1); +// assertEquals(0, jedis.dbSize().intValue()); +// +// } + + @Test + public void persist() { + jedisCluster.setex("foo", 60 * 60, "bar"); + assertTrue(jedisCluster.ttl("foo") > 0); + long status = jedisCluster.persist("foo"); + assertEquals(1, status); + assertEquals(-1, jedisCluster.ttl("foo").intValue()); + + // Binary + jedisCluster.setex(bfoo, 60 * 60, bbar); + assertTrue(jedisCluster.ttl(bfoo) > 0); + long bstatus = jedisCluster.persist(bfoo); + assertEquals(1, bstatus); + assertEquals(-1, jedisCluster.ttl(bfoo).intValue()); + + } + + @Test + public void echo() { + String result = jedisCluster.echo("hello world"); + assertEquals("hello world", result); + + // Binary + byte[] bresult = jedisCluster.echo(SafeEncoder.encode("hello world")); + assertArrayEquals(SafeEncoder.encode("hello world"), bresult); + } + + @Test + public void dumpAndRestore() { + jedisCluster.set("foo1", "bar"); + byte[] sv = jedisCluster.dump("foo1"); + jedisCluster.restore("foo2", 0, sv); + assertEquals("bar", jedisCluster.get("foo2")); + } + + @Test + public void restoreReplace() { + // take a separate instance + jedisCluster.set("foo", "bar"); + + Map map = new HashMap(); + map.put("a", "A"); + map.put("b", "B"); + + jedisCluster.hset("from", map); + byte[] serialized = jedisCluster.dump("from"); + + try { + jedisCluster.restore("foo", 0, serialized); + fail("Simple restore on a existing key should fail"); + } catch (JedisDataException e) { + // should be here + } + assertEquals("bar", jedisCluster.get("foo")); + + jedisCluster.getConnectionFromSlot(JedisClusterCRC16.getSlot("foo")).restoreReplace("foo", 0, serialized); + assertEquals(map, jedisCluster.hgetAll("foo")); + } + + @Test + public void pexpire() { + long status = jedisCluster.pexpire("foo", 10000); + assertEquals(0, status); + + jedisCluster.set("foo1", "bar1"); + status = jedisCluster.pexpire("foo1", 10000); + assertEquals(1, status); + + jedisCluster.set("foo2", "bar2"); + status = jedisCluster.pexpire("foo2", 200000000000L); + assertEquals(1, status); + + long pttl = jedisCluster.pttl("foo2"); + assertTrue(pttl > 100000000000L); + } + + @Test + public void pexpireAt() { + long unixTime = (System.currentTimeMillis()) + 10000; + + long status = jedisCluster.pexpireAt("foo", unixTime); + assertEquals(0, status); + + jedisCluster.set("foo", "bar"); + unixTime = (System.currentTimeMillis()) + 10000; + status = jedisCluster.pexpireAt("foo", unixTime); + assertEquals(1, status); + } + + @Test + public void pttl() { + long pttl = jedisCluster.pttl("foo"); + assertEquals(-2, pttl); + + jedisCluster.set("foo", "bar"); + pttl = jedisCluster.pttl("foo"); + assertEquals(-1, pttl); + + jedisCluster.pexpire("foo", 20000); + pttl = jedisCluster.pttl("foo"); + assertTrue(pttl >= 0 && pttl <= 20000); + } + + @Test + public void psetex() { + long pttl = jedisCluster.pttl("foo"); + assertEquals(-2, pttl); + + String status = jedisCluster.psetex("foo", 200000000000L, "bar"); + assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); + + pttl = jedisCluster.pttl("foo"); + assertTrue(pttl > 100000000000L); + } + +// @Test +// public void scan() { +// jedis.set("b", "b"); +// jedis.set("a", "a"); +// +// ScanResult result = jedis.scan(SCAN_POINTER_START); +// +// assertEquals(SCAN_POINTER_START, result.getStringCursor()); +// assertFalse(result.getResult().isEmpty()); +// +// // binary +// ScanResult bResult = jedis.scan(SCAN_POINTER_START_BINARY); +// +// assertArrayEquals(SCAN_POINTER_START_BINARY, bResult.getCursorAsBytes()); +// assertFalse(bResult.getResult().isEmpty()); +// } + + @Test + public void scanMatch() { + ScanParams params = new ScanParams(); + params.match("a{scan}*"); + + jedisCluster.set("b{scan{", "b"); + jedisCluster.set("a{scan}", "a"); + jedisCluster.set("aa{scan}", "aa"); + ScanResult result = jedisCluster.scan(SCAN_POINTER_START, params); + + assertEquals(SCAN_POINTER_START, result.getStringCursor()); + assertFalse(result.getResult().isEmpty()); + + // binary + params = new ScanParams(); + params.match(SafeEncoder.encode("ba{scan}*")); + + jedisCluster.set(SafeEncoder.encode("ba{scan}1"), bbar); + jedisCluster.set(SafeEncoder.encode("ba{scan}2"), bbar); + jedisCluster.set(SafeEncoder.encode("ba{scan}3"), bbar); + + ScanResult bResult = jedisCluster.scan(SCAN_POINTER_START_BINARY, params); + + assertArrayEquals(SCAN_POINTER_START_BINARY, bResult.getCursorAsBytes()); + assertFalse(bResult.getResult().isEmpty()); + } + +// @Test +// public void scanCount() { +// ScanParams params = new ScanParams(); +// params.count(2); +// +// for (int i = 0; i < 10; i++) { +// jedisCluster.set("a" + i, "a" + i); +// } +// +// ScanResult result = jedisCluster.scan(SCAN_POINTER_START, params); +// +// assertFalse(result.getResult().isEmpty()); +// +// // binary +// params = new ScanParams(); +// params.count(2); +// +// jedisCluster.set(bfoo1, bbar); +// jedisCluster.set(bfoo2, bbar); +// jedisCluster.set(bfoo3, bbar); +// +// ScanResult bResult = jedisCluster.scan(SCAN_POINTER_START_BINARY, params); +// +// assertFalse(bResult.getResult().isEmpty()); +// } +// +// @Test +// public void scanIsCompleteIteration() { +// for (int i = 0; i < 100; i++) { +// jedis.set("a" + i, "a" + i); +// } +// +// ScanResult result = jedis.scan(SCAN_POINTER_START); +// // note: in theory Redis would be allowed to already return all results on the 1st scan, +// // but in practice this never happens for data sets greater than a few tens +// // see: https://redis.io/commands/scan#number-of-elements-returned-at-every-scan-call +// assertFalse(result.isCompleteIteration()); +// +// result = scanCompletely(result.getStringCursor()); +// +// assertNotNull(result); +// assertTrue(result.isCompleteIteration()); +// } + +// private ScanResult scanCompletely(String cursor) { +// ScanResult scanResult; +// do { +// scanResult = jedis.scan(cursor); +// cursor = scanResult.getStringCursor(); +// } while (!SCAN_POINTER_START.equals(scanResult.getStringCursor())); +// +// return scanResult; +// } + + @Test + public void setNxExAndGet() { + String status = jedisCluster.set("hello", "world", "NX", "EX", expireSeconds); + assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); + String value = jedisCluster.get("hello"); + assertEquals("world", value); + + jedisCluster.set("hello", "bar", "NX", "EX", expireSeconds); + value = jedisCluster.get("hello"); + assertEquals("world", value); + + long ttl = jedisCluster.ttl("hello"); + assertTrue(ttl > 0 && ttl <= expireSeconds); + + // binary + byte[] bworld = {0x77, 0x6F, 0x72, 0x6C, 0x64}; + byte[] bhello = {0x68, 0x65, 0x6C, 0x6C, 0x6F}; + String bstatus = jedisCluster.set(bworld, bhello, bnx, bex, expireSeconds); + assertTrue(Keyword.OK.name().equalsIgnoreCase(bstatus)); + byte[] bvalue = jedisCluster.get(bworld); + assertTrue(Arrays.equals(bhello, bvalue)); + + jedisCluster.set(bworld, bbar, bnx, bex, expireSeconds); + bvalue = jedisCluster.get(bworld); + assertTrue(Arrays.equals(bhello, bvalue)); + + long bttl = jedisCluster.ttl(bworld); + assertTrue(bttl > 0 && bttl <= expireSeconds); + } +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/BinaryValuesCommandsTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/BinaryValuesCommandsTest.java new file mode 100644 index 0000000..5408276 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/BinaryValuesCommandsTest.java @@ -0,0 +1,281 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import org.junit.Before; +import org.junit.Test; +import redis.clients.jedis.Protocol.Keyword; +import redis.clients.jedis.exceptions.JedisDataException; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static io.opentracing.contrib.redis.jediscluster.commands.TestKeys.*; +import static io.opentracing.contrib.redis.utils.AssertUtil.assertByteArrayListEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +public class BinaryValuesCommandsTest extends JedisCommandTestBase { + byte[] bxx = { 0x78, 0x78 }; + byte[] bnx = { 0x6E, 0x78 }; + byte[] bex = { 0x65, 0x78 }; + byte[] bpx = { 0x70, 0x78 }; + long expireSeconds = 2; + long expireMillis = expireSeconds * 1000; + byte[] binaryValue; + + @Before + public void startUp() { + StringBuilder sb = new StringBuilder(); + + for (int n = 0; n < 1000; n++) { + sb.append("A"); + } + + binaryValue = sb.toString().getBytes(); + } + + @Test + public void setAndGet() { + String status = jedisCluster.set(bfoo, binaryValue); + assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); + + byte[] value = jedisCluster.get(bfoo); + assertTrue(Arrays.equals(binaryValue, value)); + + assertNull(jedisCluster.get(bbar)); + } + + @Test + public void setNxExAndGet() { + String status = jedisCluster.set(bfoo, binaryValue, bnx, bex, expireSeconds); + assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); + byte[] value = jedisCluster.get(bfoo); + assertTrue(Arrays.equals(binaryValue, value)); + + assertNull(jedisCluster.get(bbar)); + } + + @Test + public void setIfNotExistAndGet() { + String status = jedisCluster.set(bfoo, binaryValue); + assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); + // nx should fail if value exists + String statusFail = jedisCluster.set(bfoo, binaryValue, bnx, bex, expireSeconds); + assertNull(statusFail); + + byte[] value = jedisCluster.get(bfoo); + assertTrue(Arrays.equals(binaryValue, value)); + + assertNull(jedisCluster.get(bbar)); + } + + @Test + public void setIfExistAndGet() { + String status = jedisCluster.set(bfoo, binaryValue); + assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); + // nx should fail if value exists + String statusSuccess = jedisCluster.set(bfoo, binaryValue, bxx, bex, expireSeconds); + assertTrue(Keyword.OK.name().equalsIgnoreCase(statusSuccess)); + + byte[] value = jedisCluster.get(bfoo); + assertTrue(Arrays.equals(binaryValue, value)); + + assertNull(jedisCluster.get(bbar)); + } + + @Test + public void setFailIfNotExistAndGet() { + // xx should fail if value does NOT exists + String statusFail = jedisCluster.set(bfoo, binaryValue, bxx, bex, expireSeconds); + assertNull(statusFail); + } + + @Test + public void setAndExpireMillis() { + String status = jedisCluster.set(bfoo, binaryValue, bnx, bpx, expireMillis); + assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); + long ttl = jedisCluster.ttl(bfoo); + assertTrue(ttl > 0 && ttl <= expireSeconds); + } + + @Test + public void setAndExpire() { + String status = jedisCluster.set(bfoo, binaryValue, bnx, bex, expireSeconds); + assertTrue(Keyword.OK.name().equalsIgnoreCase(status)); + long ttl = jedisCluster.ttl(bfoo); + assertTrue(ttl > 0 && ttl <= expireSeconds); + } + + @Test + public void getSet() { + byte[] value = jedisCluster.getSet(bfoo, binaryValue); + assertNull(value); + value = jedisCluster.get(bfoo); + assertTrue(Arrays.equals(binaryValue, value)); + } + + @Test + public void mget() { + List values = jedisCluster.mget(bfoo, bbar); + List expected = new ArrayList(); + expected.add(null); + expected.add(null); + + assertByteArrayListEquals(expected, values); + + jedisCluster.set(bfoo, binaryValue); + + expected = new ArrayList(); + expected.add(binaryValue); + expected.add(null); + values = jedisCluster.mget(bfoo, bbar); + + assertByteArrayListEquals(expected, values); + + jedisCluster.set(bbar, bfoo); + + expected = new ArrayList(); + expected.add(binaryValue); + expected.add(bfoo); + values = jedisCluster.mget(bfoo, bbar); + + assertByteArrayListEquals(expected, values); + } + + @Test + public void setnx() { + long status = jedisCluster.setnx(bfoo, binaryValue); + assertEquals(1, status); + assertTrue(Arrays.equals(binaryValue, jedisCluster.get(bfoo))); + + status = jedisCluster.setnx(bfoo, bbar); + assertEquals(0, status); + assertTrue(Arrays.equals(binaryValue, jedisCluster.get(bfoo))); + } + + @Test + public void setex() { + String status = jedisCluster.setex(bfoo, 20, binaryValue); + assertEquals(Keyword.OK.name(), status); + long ttl = jedisCluster.ttl(bfoo); + assertTrue(ttl > 0 && ttl <= 20); + } + + @Test + public void mset() { + String status = jedisCluster.mset(bfoo, binaryValue, bbar, bfoo); + assertEquals(Keyword.OK.name(), status); + assertTrue(Arrays.equals(binaryValue, jedisCluster.get(bfoo))); + assertTrue(Arrays.equals(bfoo, jedisCluster.get(bbar))); + } + + @Test + public void msetnx() { + long status = jedisCluster.msetnx(bfoo, binaryValue, bbar, bfoo); + assertEquals(1, status); + assertTrue(Arrays.equals(binaryValue, jedisCluster.get(bfoo))); + assertTrue(Arrays.equals(bfoo, jedisCluster.get(bbar))); + + status = jedisCluster.msetnx(bfoo, bbar, bbar2, "foo2".getBytes()); + assertEquals(0, status); + assertTrue(Arrays.equals(binaryValue, jedisCluster.get(bfoo))); + assertTrue(Arrays.equals(bfoo, jedisCluster.get(bbar))); + } + + @Test(expected = JedisDataException.class) + public void incrWrongValue() { + jedisCluster.set(bfoo, binaryValue); + jedisCluster.incr(bfoo); + } + + @Test + public void incr() { + long value = jedisCluster.incr(bfoo); + assertEquals(1, value); + value = jedisCluster.incr(bfoo); + assertEquals(2, value); + } + + @Test(expected = JedisDataException.class) + public void incrByWrongValue() { + jedisCluster.set(bfoo, binaryValue); + jedisCluster.incrBy(bfoo, 2); + } + + @Test + public void incrBy() { + long value = jedisCluster.incrBy(bfoo, 2); + assertEquals(2, value); + value = jedisCluster.incrBy(bfoo, 2); + assertEquals(4, value); + } + + @Test(expected = JedisDataException.class) + public void decrWrongValue() { + jedisCluster.set(bfoo, binaryValue); + jedisCluster.decr(bfoo); + } + + @Test + public void decr() { + long value = jedisCluster.decr(bfoo); + assertEquals(-1, value); + value = jedisCluster.decr(bfoo); + assertEquals(-2, value); + } + + @Test(expected = JedisDataException.class) + public void decrByWrongValue() { + jedisCluster.set(bfoo, binaryValue); + jedisCluster.decrBy(bfoo, 2); + } + + @Test + public void decrBy() { + long value = jedisCluster.decrBy(bfoo, 2); + assertEquals(-2, value); + value = jedisCluster.decrBy(bfoo, 2); + assertEquals(-4, value); + } + + @Test + public void append() { + byte[] first512 = new byte[512]; + System.arraycopy(binaryValue, 0, first512, 0, 512); + long value = jedisCluster.append(bfoo, first512); + assertEquals(512, value); + assertTrue(Arrays.equals(first512, jedisCluster.get(bfoo))); + + byte[] rest = new byte[binaryValue.length - 512]; + System.arraycopy(binaryValue, 512, rest, 0, binaryValue.length - 512); + value = jedisCluster.append(bfoo, rest); + assertEquals(binaryValue.length, value); + + assertTrue(Arrays.equals(binaryValue, jedisCluster.get(bfoo))); + } + + @Test + public void substr() { + jedisCluster.set(bfoo, binaryValue); + + byte[] first512 = new byte[512]; + System.arraycopy(binaryValue, 0, first512, 0, 512); + byte[] rfirst512 = jedisCluster.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, jedisCluster.substr(bfoo, -512, -1))); + + assertTrue(Arrays.equals(binaryValue, jedisCluster.substr(bfoo, 0, -1))); + + assertTrue(Arrays.equals(last512, jedisCluster.substr(bfoo, binaryValue.length - 512, 100000))); + } + + @Test + public void strlen() { + jedisCluster.set(bfoo, binaryValue); + assertEquals(binaryValue.length, jedisCluster.strlen(bfoo).intValue()); + } +} \ No newline at end of file diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/BitCommandsTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/BitCommandsTest.java new file mode 100644 index 0000000..71bb241 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/BitCommandsTest.java @@ -0,0 +1,211 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import org.junit.Test; +import redis.clients.jedis.BitOP; +import redis.clients.jedis.BitPosParams; +import redis.clients.jedis.Protocol; +import redis.clients.util.SafeEncoder; + +import java.util.List; + +import static io.opentracing.contrib.redis.jediscluster.commands.TestKeys.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class BitCommandsTest extends JedisCommandTestBase { + @Test + public void setAndgetbit() { + boolean bit = jedisCluster.setbit("foo", 0, true); + assertEquals(false, bit); + + bit = jedisCluster.getbit("foo", 0); + assertEquals(true, bit); + + boolean bbit = jedisCluster.setbit("bfoo".getBytes(), 0, "1".getBytes()); + assertFalse(bbit); + + bbit = jedisCluster.getbit("bfoo".getBytes(), 0); + assertTrue(bbit); + } + + @Test + public void bitpos() { + String foo = "foo"; + + jedisCluster.set(foo, String.valueOf(0)); + + jedisCluster.setbit(foo, 3, true); + jedisCluster.setbit(foo, 7, true); + jedisCluster.setbit(foo, 13, true); + jedisCluster.setbit(foo, 39, true); + + /* + * byte: 0 1 2 3 4 bit: 00010001 / 00000100 / 00000000 / 00000000 / 00000001 + */ + long offset = jedisCluster.bitpos(foo, true); + assertEquals(2, offset); + offset = jedisCluster.bitpos(foo, false); + assertEquals(0, offset); + + offset = jedisCluster.bitpos(foo, true, new BitPosParams(1)); + assertEquals(13, offset); + offset = jedisCluster.bitpos(foo, false, new BitPosParams(1)); + assertEquals(8, offset); + + offset = jedisCluster.bitpos(foo, true, new BitPosParams(2, 3)); + assertEquals(-1, offset); + offset = jedisCluster.bitpos(foo, false, new BitPosParams(2, 3)); + assertEquals(16, offset); + + offset = jedisCluster.bitpos(foo, true, new BitPosParams(3, 4)); + assertEquals(39, offset); + } + + @Test + public void bitposBinary() { + // binary + byte[] bfoo = { 0x01, 0x02, 0x03, 0x04 }; + String foo = new String(bfoo); + + jedisCluster.set(bfoo, Protocol.toByteArray(0)); + + jedisCluster.setbit(bfoo, 3, true); + jedisCluster.setbit(bfoo, 7, true); + jedisCluster.setbit(bfoo, 13, true); + jedisCluster.setbit(bfoo, 39, true); + + /* + * byte: 0 1 2 3 4 bit: 00010001 / 00000100 / 00000000 / 00000000 / 00000001 + */ + long offset = jedisCluster.bitpos(foo, true); + assertEquals(2, offset); + offset = jedisCluster.bitpos(foo, false); + assertEquals(0, offset); + + offset = jedisCluster.bitpos(foo, true, new BitPosParams(1)); + assertEquals(13, offset); + offset = jedisCluster.bitpos(foo, false, new BitPosParams(1)); + assertEquals(8, offset); + + offset = jedisCluster.bitpos(foo, true, new BitPosParams(2, 3)); + assertEquals(-1, offset); + offset = jedisCluster.bitpos(foo, false, new BitPosParams(2, 3)); + assertEquals(16, offset); + + offset = jedisCluster.bitpos(foo, true, new BitPosParams(3, 4)); + assertEquals(39, offset); + } + + @Test + public void bitposWithNoMatchingBitExist() { + String foo = "foo"; + + jedisCluster.set(foo, String.valueOf(0)); + for (int idx = 0; idx < 8; idx++) { + jedisCluster.setbit(foo, idx, true); + } + + /* + * byte: 0 bit: 11111111 + */ + long offset = jedisCluster.bitpos(foo, false); + // offset should be last index + 1 + assertEquals(8, offset); + } + + @Test + public void bitposWithNoMatchingBitExistWithinRange() { + String foo = "foo"; + + jedisCluster.set(foo, String.valueOf(0)); + for (int idx = 0; idx < 8 * 5; idx++) { + jedisCluster.setbit(foo, idx, true); + } + + /* + * byte: 0 1 2 3 4 bit: 11111111 / 11111111 / 11111111 / 11111111 / 11111111 + */ + long offset = jedisCluster.bitpos(foo, false, new BitPosParams(2, 3)); + // offset should be -1 + assertEquals(-1, offset); + } + + @Test + public void setAndgetrange() { + jedisCluster.set("key1", "Hello World"); + long reply = jedisCluster.setrange("key1", 6, "Jedis"); + assertEquals(11, reply); + + assertEquals("Hello Jedis", jedisCluster.get("key1")); + + assertEquals("Hello", jedisCluster.getrange("key1", 0, 4)); + assertEquals("Jedis", jedisCluster.getrange("key1", 6, 11)); + } + + @Test + public void bitCount() { + jedisCluster.setbit("foo", 16, true); + jedisCluster.setbit("foo", 24, true); + jedisCluster.setbit("foo", 40, true); + jedisCluster.setbit("foo", 56, true); + + long c4 = jedisCluster.bitcount("foo"); + assertEquals(4, c4); + + long c3 = jedisCluster.bitcount("foo", 2L, 5L); + assertEquals(3, c3); + } + + @Test + public void bitOp() { + jedisCluster.set(foo1, "\u0060"); + jedisCluster.set(foo2, "\u0044"); + + jedisCluster.bitop(BitOP.AND, Key_resultAnd, foo1, foo2); + String resultAnd = jedisCluster.get(Key_resultAnd); + assertEquals("\u0040", resultAnd); + + jedisCluster.bitop(BitOP.OR, Key_resultOr, foo1, foo2); + String resultOr = jedisCluster.get(Key_resultOr); + assertEquals("\u0064", resultOr); + + jedisCluster.bitop(BitOP.XOR, Key_resultXor, foo1, foo2); + String resultXor = jedisCluster.get(Key_resultXor); + assertEquals("\u0024", resultXor); + } + + @Test + public void bitOpNot() { + jedisCluster.setbit(foo, 0, true); + jedisCluster.setbit(foo, 4, true); + + jedisCluster.bitop(BitOP.NOT, Key_resultNot, foo); + + String resultNot = jedisCluster.get(Key_resultNot); + assertEquals("\u0077", resultNot); + } + + @Test(expected = redis.clients.jedis.exceptions.JedisDataException.class) + public void bitOpNotMultiSourceShouldFail() { + jedisCluster.bitop(BitOP.NOT, "dest", "src1", "src2"); + } + + @Test + public void testBitfield() { + List responses = jedisCluster.bitfield("mykey", "INCRBY","i5","100","1", "GET", "u4", "0"); + assertEquals(1L, responses.get(0).longValue()); + assertEquals(0L, responses.get(1).longValue()); + } + + @Test + public void testBinaryBitfield() { + List responses = jedisCluster.bitfield(SafeEncoder.encode("mykey"), SafeEncoder.encode("INCRBY"), + SafeEncoder.encode("i5"), SafeEncoder.encode("100"), SafeEncoder.encode("1"), + SafeEncoder.encode("GET"), SafeEncoder.encode("u4"), SafeEncoder.encode("0") + ); + assertEquals(1L, responses.get(0).longValue()); + assertEquals(0L, responses.get(1).longValue()); + } + +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/GeoCommandsTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/GeoCommandsTest.java new file mode 100644 index 0000000..651f264 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/GeoCommandsTest.java @@ -0,0 +1,386 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import org.junit.Test; +import redis.clients.jedis.GeoCoordinate; +import redis.clients.jedis.GeoRadiusResponse; +import redis.clients.jedis.GeoUnit; +import redis.clients.jedis.params.geo.GeoRadiusParam; +import redis.clients.util.SafeEncoder; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +public class GeoCommandsTest extends JedisCommandTestBase { + final byte[] bfoo = { 0x01, 0x02, 0x03, 0x04 }; + final byte[] bA = { 0x0A }; + final byte[] bB = { 0x0B }; + final byte[] bC = { 0x0C }; + final byte[] bD = { 0x0D }; + final byte[] bNotexist = { 0x0F }; + + @Test + public void geoadd() { + long size = jedisCluster.geoadd("foo", 1, 2, "a"); + assertEquals(1, size); + size = jedisCluster.geoadd("foo", 2, 3, "a"); + assertEquals(0, size); + + Map coordinateMap = new HashMap(); + coordinateMap.put("a", new GeoCoordinate(3, 4)); + coordinateMap.put("b", new GeoCoordinate(2, 3)); + coordinateMap.put("c", new GeoCoordinate(3.314, 2.3241)); + + size = jedisCluster.geoadd("foo", coordinateMap); + assertEquals(2, size); + + // binary + size = jedisCluster.geoadd(bfoo, 1, 2, bA); + assertEquals(1, size); + size = jedisCluster.geoadd(bfoo, 2, 3, bA); + assertEquals(0, size); + + Map bcoordinateMap = new HashMap(); + bcoordinateMap.put(bA, new GeoCoordinate(3, 4)); + bcoordinateMap.put(bB, new GeoCoordinate(2, 3)); + bcoordinateMap.put(bC, new GeoCoordinate(3.314, 2.3241)); + + size = jedisCluster.geoadd(bfoo, bcoordinateMap); + assertEquals(2, size); + } + + @Test + public void geodist() { + prepareGeoData(); + + Double dist = jedisCluster.geodist("foo", "a", "b"); + assertEquals(157149, dist.intValue()); + + dist = jedisCluster.geodist("foo", "a", "b", GeoUnit.KM); + assertEquals(157, dist.intValue()); + + dist = jedisCluster.geodist("foo", "a", "b", GeoUnit.MI); + assertEquals(97, dist.intValue()); + + dist = jedisCluster.geodist("foo", "a", "b", GeoUnit.FT); + assertEquals(515583, dist.intValue()); + + // binary + dist = jedisCluster.geodist(bfoo, bA, bB); + assertEquals(157149, dist.intValue()); + + dist = jedisCluster.geodist(bfoo, bA, bB, GeoUnit.KM); + assertEquals(157, dist.intValue()); + + dist = jedisCluster.geodist(bfoo, bA, bB, GeoUnit.MI); + assertEquals(97, dist.intValue()); + + dist = jedisCluster.geodist(bfoo, bA, bB, GeoUnit.FT); + assertEquals(515583, dist.intValue()); + } + + @Test + public void geohash() { + prepareGeoData(); + + List hashes = jedisCluster.geohash("foo", "a", "b", "notexist"); + assertEquals(3, hashes.size()); + assertEquals("s0dnu20t9j0", hashes.get(0)); + assertEquals("s093jd0k720", hashes.get(1)); + assertNull(hashes.get(2)); + + // binary + List bhashes = jedisCluster.geohash(bfoo, bA, bB, bNotexist); + assertEquals(3, bhashes.size()); + assertArrayEquals(SafeEncoder.encode("s0dnu20t9j0"), bhashes.get(0)); + assertArrayEquals(SafeEncoder.encode("s093jd0k720"), bhashes.get(1)); + assertNull(bhashes.get(2)); + } + + @Test + public void geopos() { + prepareGeoData(); + + List coordinates = jedisCluster.geopos("foo", "a", "b", "notexist"); + assertEquals(3, coordinates.size()); + assertTrue(equalsWithinEpsilon(3.0, coordinates.get(0).getLongitude())); + assertTrue(equalsWithinEpsilon(4.0, coordinates.get(0).getLatitude())); + assertTrue(equalsWithinEpsilon(2.0, coordinates.get(1).getLongitude())); + assertTrue(equalsWithinEpsilon(3.0, coordinates.get(1).getLatitude())); + assertNull(coordinates.get(2)); + + List bcoordinates = jedisCluster.geopos(bfoo, bA, bB, bNotexist); + assertEquals(3, bcoordinates.size()); + assertTrue(equalsWithinEpsilon(3.0, bcoordinates.get(0).getLongitude())); + assertTrue(equalsWithinEpsilon(4.0, bcoordinates.get(0).getLatitude())); + assertTrue(equalsWithinEpsilon(2.0, bcoordinates.get(1).getLongitude())); + assertTrue(equalsWithinEpsilon(3.0, bcoordinates.get(1).getLatitude())); + assertNull(bcoordinates.get(2)); + } + + @Test + public void georadius() { + // prepare datas + Map coordinateMap = new HashMap(); + coordinateMap.put("Palermo", new GeoCoordinate(13.361389, 38.115556)); + coordinateMap.put("Catania", new GeoCoordinate(15.087269, 37.502669)); + jedisCluster.geoadd("Sicily", coordinateMap); + + List members = jedisCluster.georadius("Sicily", 15, 37, 200, GeoUnit.KM); + assertEquals(2, members.size()); + + // sort + members = jedisCluster.georadius("Sicily", 15, 37, 200, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending()); + assertEquals(2, members.size()); + assertEquals("Catania", members.get(0).getMemberByString()); + assertEquals("Palermo", members.get(1).getMemberByString()); + + // sort, count 1 + members = jedisCluster.georadius("Sicily", 15, 37, 200, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending().count(1)); + assertEquals(1, members.size()); + + // sort, count 1, withdist, withcoord + members = jedisCluster.georadius("Sicily", 15, 37, 200, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending().count(1).withCoord().withDist()); + assertEquals(1, members.size()); + GeoRadiusResponse response = members.get(0); + assertTrue(equalsWithinEpsilon(56.4413, response.getDistance())); + assertTrue(equalsWithinEpsilon(15.087269, response.getCoordinate().getLongitude())); + assertTrue(equalsWithinEpsilon(37.502669, response.getCoordinate().getLatitude())); + } + + @Test + public void georadiusReadonly() { + // prepare datas + Map coordinateMap = new HashMap(); + coordinateMap.put("Palermo", new GeoCoordinate(13.361389, 38.115556)); + coordinateMap.put("Catania", new GeoCoordinate(15.087269, 37.502669)); + jedisCluster.geoadd("Sicily", coordinateMap); + + List members = jedisCluster.georadiusReadonly("Sicily", 15, 37, 200, GeoUnit.KM); + assertEquals(2, members.size()); + + // sort + members = jedisCluster.georadiusReadonly("Sicily", 15, 37, 200, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending()); + assertEquals(2, members.size()); + assertEquals("Catania", members.get(0).getMemberByString()); + assertEquals("Palermo", members.get(1).getMemberByString()); + + // sort, count 1 + members = jedisCluster.georadiusReadonly("Sicily", 15, 37, 200, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending().count(1)); + assertEquals(1, members.size()); + + // sort, count 1, withdist, withcoord + members = jedisCluster.georadiusReadonly("Sicily", 15, 37, 200, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending().count(1).withCoord().withDist()); + assertEquals(1, members.size()); + GeoRadiusResponse response = members.get(0); + assertTrue(equalsWithinEpsilon(56.4413, response.getDistance())); + assertTrue(equalsWithinEpsilon(15.087269, response.getCoordinate().getLongitude())); + assertTrue(equalsWithinEpsilon(37.502669, response.getCoordinate().getLatitude())); + } + + @Test + public void georadiusBinary() { + // prepare datas + Map bcoordinateMap = new HashMap(); + bcoordinateMap.put(bA, new GeoCoordinate(13.361389, 38.115556)); + bcoordinateMap.put(bB, new GeoCoordinate(15.087269, 37.502669)); + jedisCluster.geoadd(bfoo, bcoordinateMap); + + List members = jedisCluster.georadius(bfoo, 15, 37, 200, GeoUnit.KM); + assertEquals(2, members.size()); + + // sort + members = jedisCluster.georadius(bfoo, 15, 37, 200, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending()); + assertEquals(2, members.size()); + assertArrayEquals(bB, members.get(0).getMember()); + assertArrayEquals(bA, members.get(1).getMember()); + + // sort, count 1 + members = jedisCluster.georadius(bfoo, 15, 37, 200, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending().count(1)); + assertEquals(1, members.size()); + + // sort, count 1, withdist, withcoord + members = jedisCluster.georadius(bfoo, 15, 37, 200, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending().count(1).withCoord().withDist()); + assertEquals(1, members.size()); + GeoRadiusResponse response = members.get(0); + assertTrue(equalsWithinEpsilon(56.4413, response.getDistance())); + assertTrue(equalsWithinEpsilon(15.087269, response.getCoordinate().getLongitude())); + assertTrue(equalsWithinEpsilon(37.502669, response.getCoordinate().getLatitude())); + } + + @Test + public void georadiusReadonlyBinary() { + // prepare datas + Map bcoordinateMap = new HashMap(); + bcoordinateMap.put(bA, new GeoCoordinate(13.361389, 38.115556)); + bcoordinateMap.put(bB, new GeoCoordinate(15.087269, 37.502669)); + jedisCluster.geoadd(bfoo, bcoordinateMap); + + List members = jedisCluster.georadiusReadonly(bfoo, 15, 37, 200, GeoUnit.KM); + assertEquals(2, members.size()); + + // sort + members = jedisCluster.georadiusReadonly(bfoo, 15, 37, 200, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending()); + assertEquals(2, members.size()); + assertArrayEquals(bB, members.get(0).getMember()); + assertArrayEquals(bA, members.get(1).getMember()); + + // sort, count 1 + members = jedisCluster.georadiusReadonly(bfoo, 15, 37, 200, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending().count(1)); + assertEquals(1, members.size()); + + // sort, count 1, withdist, withcoord + members = jedisCluster.georadiusReadonly(bfoo, 15, 37, 200, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending().count(1).withCoord().withDist()); + assertEquals(1, members.size()); + GeoRadiusResponse response = members.get(0); + assertTrue(equalsWithinEpsilon(56.4413, response.getDistance())); + assertTrue(equalsWithinEpsilon(15.087269, response.getCoordinate().getLongitude())); + assertTrue(equalsWithinEpsilon(37.502669, response.getCoordinate().getLatitude())); + } + + @Test + public void georadiusByMember() { + jedisCluster.geoadd("Sicily", 13.583333, 37.316667, "Agrigento"); + jedisCluster.geoadd("Sicily", 13.361389, 38.115556, "Palermo"); + jedisCluster.geoadd("Sicily", 15.087269, 37.502669, "Catania"); + + List members = jedisCluster.georadiusByMember("Sicily", "Agrigento", 100, + GeoUnit.KM); + assertEquals(2, members.size()); + + members = jedisCluster.georadiusByMember("Sicily", "Agrigento", 100, GeoUnit.KM, GeoRadiusParam + .geoRadiusParam().sortAscending()); + assertEquals(2, members.size()); + assertEquals("Agrigento", members.get(0).getMemberByString()); + assertEquals("Palermo", members.get(1).getMemberByString()); + + members = jedisCluster.georadiusByMember("Sicily", "Agrigento", 100, GeoUnit.KM, GeoRadiusParam + .geoRadiusParam().sortAscending().count(1).withCoord().withDist()); + assertEquals(1, members.size()); + + GeoRadiusResponse member = members.get(0); + assertEquals("Agrigento", member.getMemberByString()); + assertTrue(equalsWithinEpsilon(0, member.getDistance())); + assertTrue(equalsWithinEpsilon(13.583333, member.getCoordinate().getLongitude())); + assertTrue(equalsWithinEpsilon(37.316667, member.getCoordinate().getLatitude())); + } + + @Test + public void georadiusByMemberReadonly() { + jedisCluster.geoadd("Sicily", 13.583333, 37.316667, "Agrigento"); + jedisCluster.geoadd("Sicily", 13.361389, 38.115556, "Palermo"); + jedisCluster.geoadd("Sicily", 15.087269, 37.502669, "Catania"); + + List members = jedisCluster.georadiusByMemberReadonly("Sicily", "Agrigento", 100, + GeoUnit.KM); + assertEquals(2, members.size()); + + members = jedisCluster.georadiusByMemberReadonly("Sicily", "Agrigento", 100, GeoUnit.KM, GeoRadiusParam + .geoRadiusParam().sortAscending()); + assertEquals(2, members.size()); + assertEquals("Agrigento", members.get(0).getMemberByString()); + assertEquals("Palermo", members.get(1).getMemberByString()); + + members = jedisCluster.georadiusByMemberReadonly("Sicily", "Agrigento", 100, GeoUnit.KM, GeoRadiusParam + .geoRadiusParam().sortAscending().count(1).withCoord().withDist()); + assertEquals(1, members.size()); + + GeoRadiusResponse member = members.get(0); + assertEquals("Agrigento", member.getMemberByString()); + assertTrue(equalsWithinEpsilon(0, member.getDistance())); + assertTrue(equalsWithinEpsilon(13.583333, member.getCoordinate().getLongitude())); + assertTrue(equalsWithinEpsilon(37.316667, member.getCoordinate().getLatitude())); + } + + @Test + public void georadiusByMemberBinary() { + jedisCluster.geoadd(bfoo, 13.583333, 37.316667, bA); + jedisCluster.geoadd(bfoo, 13.361389, 38.115556, bB); + jedisCluster.geoadd(bfoo, 15.087269, 37.502669, bC); + + List members = jedisCluster.georadiusByMember(bfoo, bA, 100, GeoUnit.KM); + assertEquals(2, members.size()); + + members = jedisCluster.georadiusByMember(bfoo, bA, 100, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending()); + assertEquals(2, members.size()); + assertArrayEquals(bA, members.get(0).getMember()); + assertArrayEquals(bB, members.get(1).getMember()); + + members = jedisCluster.georadiusByMember(bfoo, bA, 100, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending().count(1).withCoord().withDist()); + assertEquals(1, members.size()); + + GeoRadiusResponse member = members.get(0); + assertArrayEquals(bA, member.getMember()); + assertTrue(equalsWithinEpsilon(0, member.getDistance())); + assertTrue(equalsWithinEpsilon(13.583333, member.getCoordinate().getLongitude())); + assertTrue(equalsWithinEpsilon(37.316667, member.getCoordinate().getLatitude())); + } + + @Test + public void georadiusByMemberReadonlyBinary() { + jedisCluster.geoadd(bfoo, 13.583333, 37.316667, bA); + jedisCluster.geoadd(bfoo, 13.361389, 38.115556, bB); + jedisCluster.geoadd(bfoo, 15.087269, 37.502669, bC); + + List members = jedisCluster.georadiusByMemberReadonly(bfoo, bA, 100, GeoUnit.KM); + assertEquals(2, members.size()); + + members = jedisCluster.georadiusByMemberReadonly(bfoo, bA, 100, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending()); + assertEquals(2, members.size()); + assertArrayEquals(bA, members.get(0).getMember()); + assertArrayEquals(bB, members.get(1).getMember()); + + members = jedisCluster.georadiusByMemberReadonly(bfoo, bA, 100, GeoUnit.KM, GeoRadiusParam.geoRadiusParam() + .sortAscending().count(1).withCoord().withDist()); + assertEquals(1, members.size()); + + GeoRadiusResponse member = members.get(0); + assertArrayEquals(bA, member.getMember()); + assertTrue(equalsWithinEpsilon(0, member.getDistance())); + assertTrue(equalsWithinEpsilon(13.583333, member.getCoordinate().getLongitude())); + assertTrue(equalsWithinEpsilon(37.316667, member.getCoordinate().getLatitude())); + } + + private void prepareGeoData() { + Map coordinateMap = new HashMap(); + coordinateMap.put("a", new GeoCoordinate(3, 4)); + coordinateMap.put("b", new GeoCoordinate(2, 3)); + coordinateMap.put("c", new GeoCoordinate(3.314, 2.3241)); + + long size = jedisCluster.geoadd("foo", coordinateMap); + assertEquals(3, size); + + Map bcoordinateMap = new HashMap(); + bcoordinateMap.put(bA, new GeoCoordinate(3, 4)); + bcoordinateMap.put(bB, new GeoCoordinate(2, 3)); + bcoordinateMap.put(bC, new GeoCoordinate(3.314, 2.3241)); + + size = jedisCluster.geoadd(bfoo, bcoordinateMap); + assertEquals(3, size); + } + + private boolean equalsWithinEpsilon(double d1, double d2) { + double epsilon = 1E-5; + return Math.abs(d1 - d2) < epsilon; + } +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/HashesCommandsTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/HashesCommandsTest.java new file mode 100644 index 0000000..48afe4b --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/HashesCommandsTest.java @@ -0,0 +1,464 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import org.junit.Test; +import redis.clients.jedis.ScanParams; +import redis.clients.jedis.ScanResult; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static io.opentracing.contrib.redis.utils.AssertUtil.assertByteArrayListEquals; +import static io.opentracing.contrib.redis.utils.AssertUtil.assertByteArraySetEquals; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static redis.clients.jedis.ScanParams.SCAN_POINTER_START; +import static redis.clients.jedis.ScanParams.SCAN_POINTER_START_BINARY; + + +public class HashesCommandsTest extends JedisCommandTestBase { + final byte[] bfoo = { 0x01, 0x02, 0x03, 0x04 }; + final byte[] bbar = { 0x05, 0x06, 0x07, 0x08 }; + final byte[] bcar = { 0x09, 0x0A, 0x0B, 0x0C }; + + final byte[] bbar1 = { 0x05, 0x06, 0x07, 0x08, 0x0A }; + final byte[] bbar2 = { 0x05, 0x06, 0x07, 0x08, 0x0B }; + final byte[] bbar3 = { 0x05, 0x06, 0x07, 0x08, 0x0C }; + final byte[] bbarstar = { 0x05, 0x06, 0x07, 0x08, '*' }; + + @Test + public void hset() { + long status = jedisCluster.hset("foo", "bar", "car"); + assertEquals(1, status); + status = jedisCluster.hset("foo", "bar", "foo"); + assertEquals(0, status); + + // Binary + long bstatus = jedisCluster.hset(bfoo, bbar, bcar); + assertEquals(1, bstatus); + bstatus = jedisCluster.hset(bfoo, bbar, bfoo); + assertEquals(0, bstatus); + + } + + @Test + public void hget() { + jedisCluster.hset("foo", "bar", "car"); + assertNull(jedisCluster.hget("bar", "foo")); + assertNull(jedisCluster.hget("foo", "car")); + assertEquals("car", jedisCluster.hget("foo", "bar")); + + // Binary + jedisCluster.hset(bfoo, bbar, bcar); + assertNull(jedisCluster.hget(bbar, bfoo)); + assertNull(jedisCluster.hget(bfoo, bcar)); + assertArrayEquals(bcar, jedisCluster.hget(bfoo, bbar)); + } + + @Test + public void hsetnx() { + long status = jedisCluster.hsetnx("foo", "bar", "car"); + assertEquals(1, status); + assertEquals("car", jedisCluster.hget("foo", "bar")); + + status = jedisCluster.hsetnx("foo", "bar", "foo"); + assertEquals(0, status); + assertEquals("car", jedisCluster.hget("foo", "bar")); + + status = jedisCluster.hsetnx("foo", "car", "bar"); + assertEquals(1, status); + assertEquals("bar", jedisCluster.hget("foo", "car")); + + // Binary + long bstatus = jedisCluster.hsetnx(bfoo, bbar, bcar); + assertEquals(1, bstatus); + assertArrayEquals(bcar, jedisCluster.hget(bfoo, bbar)); + + bstatus = jedisCluster.hsetnx(bfoo, bbar, bfoo); + assertEquals(0, bstatus); + assertArrayEquals(bcar, jedisCluster.hget(bfoo, bbar)); + + bstatus = jedisCluster.hsetnx(bfoo, bcar, bbar); + assertEquals(1, bstatus); + assertArrayEquals(bbar, jedisCluster.hget(bfoo, bcar)); + + } + + @Test + public void hmset() { + Map hash = new HashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + String status = jedisCluster.hmset("foo", hash); + assertEquals("OK", status); + assertEquals("car", jedisCluster.hget("foo", "bar")); + assertEquals("bar", jedisCluster.hget("foo", "car")); + + // Binary + Map bhash = new HashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + String bstatus = jedisCluster.hmset(bfoo, bhash); + assertEquals("OK", bstatus); + assertArrayEquals(bcar, jedisCluster.hget(bfoo, bbar)); + assertArrayEquals(bbar, jedisCluster.hget(bfoo, bcar)); + + } + + @Test + public void hsetVariadic() { + Map hash = new HashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + long status = jedisCluster.hset("foo", hash); + assertEquals(2, status); + assertEquals("car", jedisCluster.hget("foo", "bar")); + assertEquals("bar", jedisCluster.hget("foo", "car")); + + // Binary + Map bhash = new HashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + status = jedisCluster.hset(bfoo, bhash); + assertEquals(2, status); + assertArrayEquals(bcar, jedisCluster.hget(bfoo, bbar)); + assertArrayEquals(bbar, jedisCluster.hget(bfoo, bcar)); + } + + @Test + public void hmget() { + Map hash = new HashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + jedisCluster.hmset("foo", hash); + + List values = jedisCluster.hmget("foo", "bar", "car", "foo"); + List expected = new ArrayList(); + expected.add("car"); + expected.add("bar"); + expected.add(null); + + assertEquals(expected, values); + + // Binary + Map bhash = new HashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + jedisCluster.hmset(bfoo, bhash); + + List bvalues = jedisCluster.hmget(bfoo, bbar, bcar, bfoo); + List bexpected = new ArrayList(); + bexpected.add(bcar); + bexpected.add(bbar); + bexpected.add(null); + + assertByteArrayListEquals(bexpected, bvalues); + } + + @Test + public void hincrBy() { + long value = jedisCluster.hincrBy("foo", "bar", 1); + assertEquals(1, value); + value = jedisCluster.hincrBy("foo", "bar", -1); + assertEquals(0, value); + value = jedisCluster.hincrBy("foo", "bar", -10); + assertEquals(-10, value); + + // Binary + long bvalue = jedisCluster.hincrBy(bfoo, bbar, 1); + assertEquals(1, bvalue); + bvalue = jedisCluster.hincrBy(bfoo, bbar, -1); + assertEquals(0, bvalue); + bvalue = jedisCluster.hincrBy(bfoo, bbar, -10); + assertEquals(-10, bvalue); + + } + + @Test + public void hincrByFloat() { + Double value = jedisCluster.hincrByFloat("foo", "bar", 1.5d); + assertEquals((Double) 1.5d, value); + value = jedisCluster.hincrByFloat("foo", "bar", -1.5d); + assertEquals((Double) 0d, value); + value = jedisCluster.hincrByFloat("foo", "bar", -10.7d); + assertEquals(Double.valueOf(-10.7d), value); + + // Binary + double bvalue = jedisCluster.hincrByFloat(bfoo, bbar, 1.5d); + assertEquals(1.5d, bvalue, 0d); + bvalue = jedisCluster.hincrByFloat(bfoo, bbar, -1.5d); + assertEquals(0d, bvalue, 0d); + bvalue = jedisCluster.hincrByFloat(bfoo, bbar, -10.7d); + assertEquals(-10.7d, bvalue, 0d); + + } + + @Test + public void hexists() { + Map hash = new HashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + jedisCluster.hmset("foo", hash); + + assertFalse(jedisCluster.hexists("bar", "foo")); + assertFalse(jedisCluster.hexists("foo", "foo")); + assertTrue(jedisCluster.hexists("foo", "bar")); + + // Binary + Map bhash = new HashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + jedisCluster.hmset(bfoo, bhash); + + assertFalse(jedisCluster.hexists(bbar, bfoo)); + assertFalse(jedisCluster.hexists(bfoo, bfoo)); + assertTrue(jedisCluster.hexists(bfoo, bbar)); + + } + + @Test + public void hdel() { + Map hash = new HashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + jedisCluster.hmset("foo", hash); + + assertEquals(0, jedisCluster.hdel("bar", "foo").intValue()); + assertEquals(0, jedisCluster.hdel("foo", "foo").intValue()); + assertEquals(1, jedisCluster.hdel("foo", "bar").intValue()); + assertNull(jedisCluster.hget("foo", "bar")); + + // Binary + Map bhash = new HashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + jedisCluster.hmset(bfoo, bhash); + + assertEquals(0, jedisCluster.hdel(bbar, bfoo).intValue()); + assertEquals(0, jedisCluster.hdel(bfoo, bfoo).intValue()); + assertEquals(1, jedisCluster.hdel(bfoo, bbar).intValue()); + assertNull(jedisCluster.hget(bfoo, bbar)); + + } + + @Test + public void hlen() { + Map hash = new HashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + jedisCluster.hmset("foo", hash); + + assertEquals(0, jedisCluster.hlen("bar").intValue()); + assertEquals(2, jedisCluster.hlen("foo").intValue()); + + // Binary + Map bhash = new HashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + jedisCluster.hmset(bfoo, bhash); + + assertEquals(0, jedisCluster.hlen(bbar).intValue()); + assertEquals(2, jedisCluster.hlen(bfoo).intValue()); + + } + + @Test + public void hkeys() { + Map hash = new LinkedHashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + jedisCluster.hmset("foo", hash); + + Set keys = jedisCluster.hkeys("foo"); + Set expected = new LinkedHashSet(); + expected.add("bar"); + expected.add("car"); + assertEquals(expected, keys); + + // Binary + Map bhash = new LinkedHashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + jedisCluster.hmset(bfoo, bhash); + + Set bkeys = jedisCluster.hkeys(bfoo); + Set bexpected = new LinkedHashSet(); + bexpected.add(bbar); + bexpected.add(bcar); + assertByteArraySetEquals(bexpected, bkeys); + } + + @Test + public void hvals() { + Map hash = new LinkedHashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + jedisCluster.hmset("foo", hash); + + List vals = jedisCluster.hvals("foo"); + assertEquals(2, vals.size()); + assertTrue(vals.contains("bar")); + assertTrue(vals.contains("car")); + + // Binary + Map bhash = new LinkedHashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + jedisCluster.hmset(bfoo, bhash); + + List bvals = new ArrayList<>(jedisCluster.hvals(bfoo)); + + assertEquals(2, bvals.size()); + assertTrue(arrayContains(bvals, bbar)); + assertTrue(arrayContains(bvals, bcar)); + } + + @Test + public void hgetAll() { + Map h = new HashMap(); + h.put("bar", "car"); + h.put("car", "bar"); + jedisCluster.hmset("foo", h); + + Map hash = jedisCluster.hgetAll("foo"); + assertEquals(2, hash.size()); + assertEquals("car", hash.get("bar")); + assertEquals("bar", hash.get("car")); + + // Binary + Map bh = new HashMap(); + bh.put(bbar, bcar); + bh.put(bcar, bbar); + jedisCluster.hmset(bfoo, bh); + Map bhash = jedisCluster.hgetAll(bfoo); + + assertEquals(2, bhash.size()); + assertArrayEquals(bcar, bhash.get(bbar)); + assertArrayEquals(bbar, bhash.get(bcar)); + } + +// @Test +// public void hgetAllPipeline() { +// Map bh = new HashMap(); +// bh.put(bbar, bcar); +// bh.put(bcar, bbar); +// jedis.hmset(bfoo, bh); +// Pipeline pipeline = jedis.pipelined(); +// Response> bhashResponse = pipeline.hgetAll(bfoo); +// pipeline.sync(); +// Map bhash = bhashResponse.get(); +// +// assertEquals(2, bhash.size()); +// assertArrayEquals(bcar, bhash.get(bbar)); +// assertArrayEquals(bbar, bhash.get(bcar)); +// } + + @Test + public void hscan() { + jedisCluster.hset("foo", "b", "b"); + jedisCluster.hset("foo", "a", "a"); + + ScanResult> result = jedisCluster.hscan("foo", SCAN_POINTER_START); + + assertEquals(SCAN_POINTER_START, result.getStringCursor()); + assertFalse(result.getResult().isEmpty()); + + // binary + jedisCluster.hset(bfoo, bbar, bcar); + + ScanResult> bResult = jedisCluster.hscan(bfoo, SCAN_POINTER_START_BINARY); + + assertArrayEquals(SCAN_POINTER_START_BINARY, bResult.getCursorAsBytes()); + assertFalse(bResult.getResult().isEmpty()); + } + + @Test + public void hscanMatch() { + ScanParams params = new ScanParams(); + params.match("a*"); + + jedisCluster.hset("foo", "b", "b"); + jedisCluster.hset("foo", "a", "a"); + jedisCluster.hset("foo", "aa", "aa"); + ScanResult> result = jedisCluster.hscan("foo", SCAN_POINTER_START, params); + + assertEquals(SCAN_POINTER_START, result.getStringCursor()); + assertFalse(result.getResult().isEmpty()); + + // binary + params = new ScanParams(); + params.match(bbarstar); + + jedisCluster.hset(bfoo, bbar, bcar); + jedisCluster.hset(bfoo, bbar1, bcar); + jedisCluster.hset(bfoo, bbar2, bcar); + jedisCluster.hset(bfoo, bbar3, bcar); + + ScanResult> bResult = jedisCluster.hscan(bfoo, SCAN_POINTER_START_BINARY, + params); + + assertArrayEquals(SCAN_POINTER_START_BINARY, bResult.getCursorAsBytes()); + assertFalse(bResult.getResult().isEmpty()); + } + + @Test + public void hscanCount() { + ScanParams params = new ScanParams(); + params.count(2); + + for (int i = 0; i < 10; i++) { + jedisCluster.hset("foo", "a" + i, "a" + i); + } + + ScanResult> result = jedisCluster.hscan("foo", SCAN_POINTER_START, params); + + assertFalse(result.getResult().isEmpty()); + + // binary + params = new ScanParams(); + params.count(2); + + jedisCluster.hset(bfoo, bbar, bcar); + jedisCluster.hset(bfoo, bbar1, bcar); + jedisCluster.hset(bfoo, bbar2, bcar); + jedisCluster.hset(bfoo, bbar3, bcar); + + ScanResult> bResult = jedisCluster.hscan(bfoo, SCAN_POINTER_START_BINARY, + params); + + assertFalse(bResult.getResult().isEmpty()); + } + + @Test + public void testHstrLen_EmptyHash() { + Long response = jedisCluster.hstrlen("myhash", "k1"); + assertEquals(0l, response.longValue()); + } + + @Test + public void testHstrLen() { + Map values = new HashMap(); + values.put("key", "value"); + jedisCluster.hmset("myhash", values); + Long response = jedisCluster.hstrlen("myhash", "key"); + assertEquals(5l, response.longValue()); + + } + + @Test + public void testBinaryHstrLen() { + Map values = new HashMap(); + values.put(bbar, bcar); + jedisCluster.hmset(bfoo, values); + Long response = jedisCluster.hstrlen(bfoo, bbar); + assertEquals(4l, response.longValue()); + } + +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/HyperLogLogCommandsTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/HyperLogLogCommandsTest.java new file mode 100644 index 0000000..1ead9b9 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/HyperLogLogCommandsTest.java @@ -0,0 +1,131 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import org.junit.Test; +import redis.clients.util.SafeEncoder; + +import static io.opentracing.contrib.redis.jediscluster.commands.TestKeys.*; +import static org.junit.Assert.assertEquals; + +public class HyperLogLogCommandsTest extends JedisCommandTestBase { + + @Test + public void pfadd() { + long status = jedisCluster.pfadd("foo", "a"); + assertEquals(1, status); + + status = jedisCluster.pfadd("foo", "a"); + assertEquals(0, status); + } + + @Test + public void pfaddBinary() { + byte[] bFoo = SafeEncoder.encode("foo"); + byte[] bBar = SafeEncoder.encode("bar"); + byte[] bBar2 = SafeEncoder.encode("bar2"); + + long status = jedisCluster.pfadd(bFoo, bBar, bBar2); + assertEquals(1, status); + + status = jedisCluster.pfadd(bFoo, bBar, bBar2); + assertEquals(0, status); + } + + @Test + public void pfcount() { + long status = jedisCluster.pfadd("hll", "foo", "bar", "zap"); + assertEquals(1, status); + + status = jedisCluster.pfadd("hll", "zap", "zap", "zap"); + assertEquals(0, status); + + status = jedisCluster.pfadd("hll", "foo", "bar"); + assertEquals(0, status); + + status = jedisCluster.pfcount("hll"); + assertEquals(3, status); + } + + @Test + public void pfcounts() { + long status = jedisCluster.pfadd(foo1, "foo", "bar", "zap"); + assertEquals(1, status); + status = jedisCluster.pfadd(foo2, "foo", "bar", "zap"); + assertEquals(1, status); + + status = jedisCluster.pfadd(foo3, "foo", "bar", "baz"); + assertEquals(1, status); + status = jedisCluster.pfcount(foo1); + assertEquals(3, status); + status = jedisCluster.pfcount(foo2); + assertEquals(3, status); + status = jedisCluster.pfcount(foo3); + assertEquals(3, status); + + status = jedisCluster.pfcount(foo1, foo2); + assertEquals(3, status); + + status = jedisCluster.pfcount(foo1, foo2, foo3); + assertEquals(4, status); + + } + + @Test + public void pfcountBinary() { + byte[] bHll = SafeEncoder.encode("hll"); + byte[] bFoo = SafeEncoder.encode("foo"); + byte[] bBar = SafeEncoder.encode("bar"); + byte[] bZap = SafeEncoder.encode("zap"); + + long status = jedisCluster.pfadd(bHll, bFoo, bBar, bZap); + assertEquals(1, status); + + status = jedisCluster.pfadd(bHll, bZap, bZap, bZap); + assertEquals(0, status); + + status = jedisCluster.pfadd(bHll, bFoo, bBar); + assertEquals(0, status); + + status = jedisCluster.pfcount(bHll); + assertEquals(3, status); + } + + @Test + public void pfmerge() { + long status = jedisCluster.pfadd(foo1, "foo", "bar", "zap", "a"); + assertEquals(1, status); + + status = jedisCluster.pfadd(foo2, "a", "b", "c", "foo"); + assertEquals(1, status); + + String mergeStatus = jedisCluster.pfmerge(foo3, foo1, foo2); + assertEquals("OK", mergeStatus); + + status = jedisCluster.pfcount(foo3); + assertEquals(6, status); + } + + @Test + public void pfmergeBinary() { + byte[] bHll1 = bfoo1; + byte[] bHll2 = bfoo2; + byte[] bHll3 = bfoo3; + byte[] bFoo = SafeEncoder.encode("foo"); + byte[] bBar = SafeEncoder.encode("bar"); + byte[] bZap = SafeEncoder.encode("zap"); + byte[] bA = SafeEncoder.encode("a"); + byte[] bB = SafeEncoder.encode("b"); + byte[] bC = SafeEncoder.encode("c"); + + long status = jedisCluster.pfadd(bHll1, bFoo, bBar, bZap, bA); + assertEquals(1, status); + + status = jedisCluster.pfadd(bHll2, bA, bB, bC, bFoo); + assertEquals(1, status); + + String mergeStatus = jedisCluster.pfmerge(bHll3, bHll1, bHll2); + assertEquals("OK", mergeStatus); + + status = jedisCluster.pfcount(bHll3); + assertEquals(6, status); + } +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/JedisCommandTestBase.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/JedisCommandTestBase.java new file mode 100644 index 0000000..4679dc4 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/JedisCommandTestBase.java @@ -0,0 +1,82 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import io.opentracing.contrib.redis.HostAndPortUtil; +import io.opentracing.contrib.redis.common.RedisSpanNameProvider; +import io.opentracing.contrib.redis.common.TracingConfiguration; +import io.opentracing.contrib.redis.jedis.TracingJedisCluster; +import io.opentracing.util.GlobalTracer; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import org.junit.After; +import org.junit.Before; +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.JedisCluster; + +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static org.junit.Assert.assertArrayEquals; + +public abstract class JedisCommandTestBase { + protected static HostAndPort hnp = HostAndPortUtil.getClusterServers().get(0); + + protected JedisCluster jedisCluster; + + @Before + public void setUp() throws Exception { +// jedis = new Jedis(hnp.getHost(), hnp.getPort(), 500); +// jedis.connect(); +// jedis.auth("foobared"); +// jedis.flushAll(); +// jedis = new JedisCluster(new HashSet<>(HostAndPortUtil.getClusterServers())); + TracingConfiguration tracingConfiguration = new TracingConfiguration.Builder(GlobalTracer.get()) + .withSpanNameProvider(RedisSpanNameProvider.PREFIX_OPERATION_NAME("testRedisName:")) + .build(); + jedisCluster = new TracingJedisCluster(new HashSet<>(HostAndPortUtil.getClusterServers()), new GenericObjectPoolConfig(), tracingConfiguration); + } + + @After + public void tearDown() throws IOException { + jedisCluster.getClusterNodes().forEach((ph, pool) -> { + try { + pool.getResource().flushAll(); + } catch (Exception e) { + //ignore + } + }); + jedisCluster.close(); + } +// +// protected Jedis createJedis() { +// Jedis j = new Jedis(hnp); +// j.connect(); +// j.auth("foobared"); +// j.flushAll(); +// return j; +// } + + protected boolean arrayContains(List array, byte[] expected) { + for (byte[] a : array) { + try { + assertArrayEquals(a, expected); + return true; + } catch (AssertionError e) { + + } + } + return false; + } + + protected boolean setContains(Set set, byte[] expected) { + for (byte[] a : set) { + try { + assertArrayEquals(a, expected); + return true; + } catch (AssertionError e) { + + } + } + return false; + } +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/ListCommandsTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/ListCommandsTest.java new file mode 100644 index 0000000..5af13a7 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/ListCommandsTest.java @@ -0,0 +1,581 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import org.junit.Test; +import redis.clients.jedis.ListPosition; +import redis.clients.jedis.exceptions.JedisDataException; + +import java.util.ArrayList; +import java.util.List; + +import static io.opentracing.contrib.redis.jediscluster.commands.TestKeys.*; +import static io.opentracing.contrib.redis.utils.AssertUtil.assertByteArrayListEquals; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.fail; + +public class ListCommandsTest extends JedisCommandTestBase { + final byte[] bA = { 0x0A }; + final byte[] bB = { 0x0B }; + final byte[] bC = { 0x0C }; + final byte[] b1 = { 0x01 }; + final byte[] b2 = { 0x02 }; + final byte[] b3 = { 0x03 }; + final byte[] bhello = { 0x04, 0x02 }; + final byte[] bx = { 0x02, 0x04 }; + + @Test + public void rpush() { + long size = jedisCluster.rpush("foo", "bar"); + assertEquals(1, size); + size = jedisCluster.rpush("foo", "foo"); + assertEquals(2, size); + size = jedisCluster.rpush("foo", "bar", "foo"); + assertEquals(4, size); + + // Binary + long bsize = jedisCluster.rpush(bfoo, bbar); + assertEquals(1, bsize); + bsize = jedisCluster.rpush(bfoo, bfoo); + assertEquals(2, bsize); + bsize = jedisCluster.rpush(bfoo, bbar, bfoo); + assertEquals(4, bsize); + + } + + @Test + public void lpush() { + long size = jedisCluster.lpush("foo", "bar"); + assertEquals(1, size); + size = jedisCluster.lpush("foo", "foo"); + assertEquals(2, size); + size = jedisCluster.lpush("foo", "bar", "foo"); + assertEquals(4, size); + + // Binary + long bsize = jedisCluster.lpush(bfoo, bbar); + assertEquals(1, bsize); + bsize = jedisCluster.lpush(bfoo, bfoo); + assertEquals(2, bsize); + bsize = jedisCluster.lpush(bfoo, bbar, bfoo); + assertEquals(4, bsize); + + } + + @Test + public void llen() { + assertEquals(0, jedisCluster.llen("foo").intValue()); + jedisCluster.lpush("foo", "bar"); + jedisCluster.lpush("foo", "car"); + assertEquals(2, jedisCluster.llen("foo").intValue()); + + // Binary + assertEquals(0, jedisCluster.llen(bfoo).intValue()); + jedisCluster.lpush(bfoo, bbar); + jedisCluster.lpush(bfoo, bcar); + assertEquals(2, jedisCluster.llen(bfoo).intValue()); + + } + + @Test + public void llenNotOnList() { + try { + jedisCluster.set("foo", "bar"); + jedisCluster.llen("foo"); + fail("JedisDataException expected"); + } catch (final JedisDataException e) { + } + + // Binary + try { + jedisCluster.set(bfoo, bbar); + jedisCluster.llen(bfoo); + fail("JedisDataException expected"); + } catch (final JedisDataException e) { + } + + } + + @Test + public void lrange() { + jedisCluster.rpush("foo", "a"); + jedisCluster.rpush("foo", "b"); + jedisCluster.rpush("foo", "c"); + + List expected = new ArrayList(); + expected.add("a"); + expected.add("b"); + expected.add("c"); + + List range = jedisCluster.lrange("foo", 0, 2); + assertEquals(expected, range); + + range = jedisCluster.lrange("foo", 0, 20); + assertEquals(expected, range); + + expected = new ArrayList(); + expected.add("b"); + expected.add("c"); + + range = jedisCluster.lrange("foo", 1, 2); + assertEquals(expected, range); + + expected = new ArrayList(); + range = jedisCluster.lrange("foo", 2, 1); + assertEquals(expected, range); + + // Binary + jedisCluster.rpush(bfoo, bA); + jedisCluster.rpush(bfoo, bB); + jedisCluster.rpush(bfoo, bC); + + List bexpected = new ArrayList(); + bexpected.add(bA); + bexpected.add(bB); + bexpected.add(bC); + + List brange = jedisCluster.lrange(bfoo, 0, 2); + assertByteArrayListEquals(bexpected, brange); + + brange = jedisCluster.lrange(bfoo, 0, 20); + assertByteArrayListEquals(bexpected, brange); + + bexpected = new ArrayList(); + bexpected.add(bB); + bexpected.add(bC); + + brange = jedisCluster.lrange(bfoo, 1, 2); + assertByteArrayListEquals(bexpected, brange); + + bexpected = new ArrayList(); + brange = jedisCluster.lrange(bfoo, 2, 1); + assertByteArrayListEquals(bexpected, brange); + + } + + @Test + public void ltrim() { + jedisCluster.lpush("foo", "1"); + jedisCluster.lpush("foo", "2"); + jedisCluster.lpush("foo", "3"); + String status = jedisCluster.ltrim("foo", 0, 1); + + List expected = new ArrayList(); + expected.add("3"); + expected.add("2"); + + assertEquals("OK", status); + assertEquals(2, jedisCluster.llen("foo").intValue()); + assertEquals(expected, jedisCluster.lrange("foo", 0, 100)); + + // Binary + jedisCluster.lpush(bfoo, b1); + jedisCluster.lpush(bfoo, b2); + jedisCluster.lpush(bfoo, b3); + String bstatus = jedisCluster.ltrim(bfoo, 0, 1); + + List bexpected = new ArrayList(); + bexpected.add(b3); + bexpected.add(b2); + + assertEquals("OK", bstatus); + assertEquals(2, jedisCluster.llen(bfoo).intValue()); + assertByteArrayListEquals(bexpected, jedisCluster.lrange(bfoo, 0, 100)); + + } + + @Test + public void lset() { + jedisCluster.lpush("foo", "1"); + jedisCluster.lpush("foo", "2"); + jedisCluster.lpush("foo", "3"); + + List expected = new ArrayList(); + expected.add("3"); + expected.add("bar"); + expected.add("1"); + + String status = jedisCluster.lset("foo", 1, "bar"); + + assertEquals("OK", status); + assertEquals(expected, jedisCluster.lrange("foo", 0, 100)); + + // Binary + jedisCluster.lpush(bfoo, b1); + jedisCluster.lpush(bfoo, b2); + jedisCluster.lpush(bfoo, b3); + + List bexpected = new ArrayList(); + bexpected.add(b3); + bexpected.add(bbar); + bexpected.add(b1); + + String bstatus = jedisCluster.lset(bfoo, 1, bbar); + + assertEquals("OK", bstatus); + assertByteArrayListEquals(bexpected, jedisCluster.lrange(bfoo, 0, 100)); + } + + @Test + public void lindex() { + jedisCluster.lpush("foo", "1"); + jedisCluster.lpush("foo", "2"); + jedisCluster.lpush("foo", "3"); + + assertEquals("3", jedisCluster.lindex("foo", 0)); + assertNull(jedisCluster.lindex("foo", 100)); + + // Binary + jedisCluster.lpush(bfoo, b1); + jedisCluster.lpush(bfoo, b2); + jedisCluster.lpush(bfoo, b3); + + assertArrayEquals(b3, jedisCluster.lindex(bfoo, 0)); + assertNull(jedisCluster.lindex(bfoo, 100)); + + } + + @Test + public void lrem() { + jedisCluster.lpush("foo", "hello"); + jedisCluster.lpush("foo", "hello"); + jedisCluster.lpush("foo", "x"); + jedisCluster.lpush("foo", "hello"); + jedisCluster.lpush("foo", "c"); + jedisCluster.lpush("foo", "b"); + jedisCluster.lpush("foo", "a"); + + long count = jedisCluster.lrem("foo", -2, "hello"); + + List expected = new ArrayList(); + expected.add("a"); + expected.add("b"); + expected.add("c"); + expected.add("hello"); + expected.add("x"); + + assertEquals(2, count); + assertEquals(expected, jedisCluster.lrange("foo", 0, 1000)); + assertEquals(0, jedisCluster.lrem("bar", 100, "foo").intValue()); + + // Binary + jedisCluster.lpush(bfoo, bhello); + jedisCluster.lpush(bfoo, bhello); + jedisCluster.lpush(bfoo, bx); + jedisCluster.lpush(bfoo, bhello); + jedisCluster.lpush(bfoo, bC); + jedisCluster.lpush(bfoo, bB); + jedisCluster.lpush(bfoo, bA); + + long bcount = jedisCluster.lrem(bfoo, -2, bhello); + + List bexpected = new ArrayList(); + bexpected.add(bA); + bexpected.add(bB); + bexpected.add(bC); + bexpected.add(bhello); + bexpected.add(bx); + + assertEquals(2, bcount); + assertByteArrayListEquals(bexpected, jedisCluster.lrange(bfoo, 0, 1000)); + assertEquals(0, jedisCluster.lrem(bbar, 100, bfoo).intValue()); + + } + + @Test + public void lpop() { + jedisCluster.rpush("foo", "a"); + jedisCluster.rpush("foo", "b"); + jedisCluster.rpush("foo", "c"); + + String element = jedisCluster.lpop("foo"); + assertEquals("a", element); + + List expected = new ArrayList(); + expected.add("b"); + expected.add("c"); + + assertEquals(expected, jedisCluster.lrange("foo", 0, 1000)); + jedisCluster.lpop("foo"); + jedisCluster.lpop("foo"); + + element = jedisCluster.lpop("foo"); + assertNull(element); + + // Binary + jedisCluster.rpush(bfoo, bA); + jedisCluster.rpush(bfoo, bB); + jedisCluster.rpush(bfoo, bC); + + byte[] belement = jedisCluster.lpop(bfoo); + assertArrayEquals(bA, belement); + + List bexpected = new ArrayList(); + bexpected.add(bB); + bexpected.add(bC); + + assertByteArrayListEquals(bexpected, jedisCluster.lrange(bfoo, 0, 1000)); + jedisCluster.lpop(bfoo); + jedisCluster.lpop(bfoo); + + belement = jedisCluster.lpop(bfoo); + assertNull(belement); + + } + + @Test + public void rpop() { + jedisCluster.rpush("foo", "a"); + jedisCluster.rpush("foo", "b"); + jedisCluster.rpush("foo", "c"); + + String element = jedisCluster.rpop("foo"); + assertEquals("c", element); + + List expected = new ArrayList(); + expected.add("a"); + expected.add("b"); + + assertEquals(expected, jedisCluster.lrange("foo", 0, 1000)); + jedisCluster.rpop("foo"); + jedisCluster.rpop("foo"); + + element = jedisCluster.rpop("foo"); + assertNull(element); + + // Binary + jedisCluster.rpush(bfoo, bA); + jedisCluster.rpush(bfoo, bB); + jedisCluster.rpush(bfoo, bC); + + byte[] belement = jedisCluster.rpop(bfoo); + assertArrayEquals(bC, belement); + + List bexpected = new ArrayList(); + bexpected.add(bA); + bexpected.add(bB); + + assertByteArrayListEquals(bexpected, jedisCluster.lrange(bfoo, 0, 1000)); + jedisCluster.rpop(bfoo); + jedisCluster.rpop(bfoo); + + belement = jedisCluster.rpop(bfoo); + assertNull(belement); + + } + + @Test + public void rpoplpush() { + jedisCluster.rpush(foo, "a"); + jedisCluster.rpush(foo, "b"); + jedisCluster.rpush(foo, "c"); + + jedisCluster.rpush(dst, "foo"); + jedisCluster.rpush(dst, "bar"); + + String element = jedisCluster.rpoplpush(foo, dst); + + assertEquals("c", element); + + List srcExpected = new ArrayList(); + srcExpected.add("a"); + srcExpected.add("b"); + + List dstExpected = new ArrayList(); + dstExpected.add("c"); + dstExpected.add("foo"); + dstExpected.add("bar"); + + assertEquals(srcExpected, jedisCluster.lrange(foo, 0, 1000)); + assertEquals(dstExpected, jedisCluster.lrange(dst, 0, 1000)); + + // Binary + jedisCluster.rpush(bfoo, bA); + jedisCluster.rpush(bfoo, bB); + jedisCluster.rpush(bfoo, bC); + + jedisCluster.rpush(bdst, bfoo); + jedisCluster.rpush(bdst, bbar); + + byte[] belement = jedisCluster.rpoplpush(bfoo, bdst); + + assertArrayEquals(bC, belement); + + List bsrcExpected = new ArrayList(); + bsrcExpected.add(bA); + bsrcExpected.add(bB); + + List bdstExpected = new ArrayList(); + bdstExpected.add(bC); + bdstExpected.add(bfoo); + bdstExpected.add(bbar); + + assertByteArrayListEquals(bsrcExpected, jedisCluster.lrange(bfoo, 0, 1000)); + assertByteArrayListEquals(bdstExpected, jedisCluster.lrange(bdst, 0, 1000)); + + } + + @Test + public void blpop() throws InterruptedException { + List result = jedisCluster.blpop(1, "foo"); + assertNull(result); + + jedisCluster.lpush("foo", "bar"); + result = jedisCluster.blpop(1, "foo"); + + assertNotNull(result); + assertEquals(2, result.size()); + assertEquals("foo", result.get(0)); + assertEquals("bar", result.get(1)); + + // Binary + jedisCluster.lpush(bfoo, bbar); + List bresult = jedisCluster.blpop(1, bfoo); + + assertNotNull(bresult); + assertEquals(2, bresult.size()); + assertArrayEquals(bfoo, bresult.get(0)); + assertArrayEquals(bbar, bresult.get(1)); + + } + + @Test + public void brpop() throws InterruptedException { + List result = jedisCluster.brpop(1, "foo"); + assertNull(result); + + jedisCluster.lpush("foo", "bar"); + result = jedisCluster.brpop(1, "foo"); + assertNotNull(result); + assertEquals(2, result.size()); + assertEquals("foo", result.get(0)); + assertEquals("bar", result.get(1)); + + // Binary + + jedisCluster.lpush(bfoo, bbar); + List bresult = jedisCluster.brpop(1, bfoo); + assertNotNull(bresult); + assertEquals(2, bresult.size()); + assertArrayEquals(bfoo, bresult.get(0)); + assertArrayEquals(bbar, bresult.get(1)); + + } + + @Test + public void lpushx() { + long status = jedisCluster.lpushx("foo", "bar"); + assertEquals(0, status); + + jedisCluster.lpush("foo", "a"); + status = jedisCluster.lpushx("foo", "b"); + assertEquals(2, status); + + // Binary + long bstatus = jedisCluster.lpushx(bfoo, bbar); + assertEquals(0, bstatus); + + jedisCluster.lpush(bfoo, bA); + bstatus = jedisCluster.lpushx(bfoo, bB); + assertEquals(2, bstatus); + + } + + @Test + public void rpushx() { + long status = jedisCluster.rpushx("foo", "bar"); + assertEquals(0, status); + + jedisCluster.lpush("foo", "a"); + status = jedisCluster.rpushx("foo", "b"); + assertEquals(2, status); + + // Binary + long bstatus = jedisCluster.rpushx(bfoo, bbar); + assertEquals(0, bstatus); + + jedisCluster.lpush(bfoo, bA); + bstatus = jedisCluster.rpushx(bfoo, bB); + assertEquals(2, bstatus); + } + + @Test + public void linsert() { + long status = jedisCluster.linsert("foo", ListPosition.BEFORE, "bar", "car"); + assertEquals(0, status); + + jedisCluster.lpush("foo", "a"); + status = jedisCluster.linsert("foo", ListPosition.AFTER, "a", "b"); + assertEquals(2, status); + + List actual = jedisCluster.lrange("foo", 0, 100); + List expected = new ArrayList(); + expected.add("a"); + expected.add("b"); + + assertEquals(expected, actual); + + status = jedisCluster.linsert("foo", ListPosition.BEFORE, "bar", "car"); + assertEquals(-1, status); + + // Binary + long bstatus = jedisCluster.linsert(bfoo, ListPosition.BEFORE, bbar, bcar); + assertEquals(0, bstatus); + + jedisCluster.lpush(bfoo, bA); + bstatus = jedisCluster.linsert(bfoo, ListPosition.AFTER, bA, bB); + assertEquals(2, bstatus); + + List bactual = jedisCluster.lrange(bfoo, 0, 100); + List bexpected = new ArrayList(); + bexpected.add(bA); + bexpected.add(bB); + + assertByteArrayListEquals(bexpected, bactual); + + bstatus = jedisCluster.linsert(bfoo, ListPosition.BEFORE, bbar, bcar); + assertEquals(-1, bstatus); + + } + +// @Test +// public void brpoplpush() { +// (new Thread(new Runnable() { +// public void run() { +// try { +// Thread.sleep(100); +// Jedis j = createJedis(); +// j.lpush("foo", "a"); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// } +// })).start(); +// +// String element = jedis.brpoplpush("foo", "bar", 0); +// +// assertEquals("a", element); +// assertEquals(1, jedis.llen("bar").longValue()); +// assertEquals("a", jedis.lrange("bar", 0, -1).get(0)); +// +// (new Thread(new Runnable() { +// public void run() { +// try { +// Thread.sleep(100); +// Jedis j = createJedis(); +// j.lpush("foo", "a"); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// } +// })).start(); +// +// byte[] brpoplpush = jedis.brpoplpush("foo".getBytes(), "bar".getBytes(), 0); +// +// assertTrue(Arrays.equals("a".getBytes(), brpoplpush)); +// assertEquals(1, jedis.llen("bar").longValue()); +// assertEquals("a", jedis.lrange("bar", 0, -1).get(0)); +// +// } +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/ObjectCommandsTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/ObjectCommandsTest.java new file mode 100644 index 0000000..20d5e8d --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/ObjectCommandsTest.java @@ -0,0 +1,44 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import redis.clients.util.SafeEncoder; + +public class ObjectCommandsTest extends JedisCommandTestBase { + + private String key = "mylist"; + private byte[] binaryKey = SafeEncoder.encode(key); + +// @Test +// public void objectRefcount() { +// jedis.lpush(key, "hello world"); +// Long refcount = jedis.objectRefcount(key); +// assertEquals(new Long(1), refcount); +// +// // Binary +// refcount = jedis.objectRefcount(binaryKey); +// assertEquals(new Long(1), refcount); +// +// } +// +// @Test +// public void objectEncoding() { +// jedis.lpush(key, "hello world"); +// String encoding = jedis.objectEncoding(key); +// assertEquals("quicklist", encoding); +// +// // Binary +// encoding = SafeEncoder.encode(jedis.objectEncoding(binaryKey)); +// assertEquals("quicklist", encoding); +// } +// +// @Test +// public void objectIdletime() throws InterruptedException { +// jedis.lpush(key, "hello world"); +// +// Long time = jedis.objectIdletime(key); +// assertEquals(new Long(0), time); +// +// // Binary +// time = jedis.objectIdletime(binaryKey); +// assertEquals(new Long(0), time); +// } +} \ No newline at end of file diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/ScriptingCommandsTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/ScriptingCommandsTest.java new file mode 100644 index 0000000..25c426a --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/ScriptingCommandsTest.java @@ -0,0 +1,234 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import org.hamcrest.CoreMatchers; +import org.hamcrest.Matcher; +import org.junit.Test; +import redis.clients.jedis.exceptions.JedisDataException; +import redis.clients.jedis.exceptions.JedisNoScriptException; +import redis.clients.util.SafeEncoder; + +import java.util.ArrayList; +import java.util.List; + +import static io.opentracing.contrib.redis.jediscluster.commands.TestKeys.foo1; +import static io.opentracing.contrib.redis.jediscluster.commands.TestKeys.foo2; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +public class ScriptingCommandsTest extends JedisCommandTestBase { + + @SuppressWarnings("unchecked") + @Test + public void evalMultiBulk() { + String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2],ARGV[3]}"; + List keys = new ArrayList(); + keys.add(foo1); + keys.add(foo2); + + List args = new ArrayList(); + args.add("first"); + args.add("second"); + args.add("third"); + + List response = (List) jedisCluster.eval(script, keys, args); + + assertEquals(5, response.size()); + assertEquals(foo1, response.get(0)); + assertEquals(foo2, response.get(1)); + assertEquals("first", response.get(2)); + assertEquals("second", response.get(3)); + assertEquals("third", response.get(4)); + } + + @SuppressWarnings("unchecked") + @Test + public void evalMultiBulkWithBinaryJedis() { + String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2],ARGV[3]}"; + List keys = new ArrayList(); + keys.add(foo1.getBytes()); + keys.add(foo2.getBytes()); + + List args = new ArrayList(); + args.add("first".getBytes()); + args.add("second".getBytes()); + args.add("third".getBytes()); + + List responses = (List) jedisCluster.eval(script.getBytes(), keys, args); + assertEquals(5, responses.size()); + assertEquals(foo1, new String(responses.get(0))); + assertEquals(foo2, new String(responses.get(1))); + assertEquals("first", new String(responses.get(2))); + assertEquals("second", new String(responses.get(3))); + assertEquals("third", new String(responses.get(4))); + } + + @Test + public void evalBulk() { + String script = "return KEYS[1]"; + List keys = new ArrayList(); + keys.add("key1"); + + List args = new ArrayList(); + args.add("first"); + + String response = (String) jedisCluster.eval(script, keys, args); + + assertEquals("key1", response); + } + + @Test + public void evalInt() { + String script = "return 2"; + List keys = new ArrayList(); + keys.add("key1"); + + Long response = (Long) jedisCluster.eval(script, keys, new ArrayList()); + + assertEquals(new Long(2), response); + } + + @SuppressWarnings("unchecked") + @Test + public void evalNestedLists() { + String script = "return { {KEYS[1]} , {2} }"; + List results = (List) jedisCluster.eval(script, 1, "key1"); + + assertThat((List) results.get(0), listWithItem("key1")); + assertThat((List) results.get(1), listWithItem(2L)); + } + + @Test + public void evalNoArgs() { + String script = "return KEYS[1]"; + List keys = new ArrayList(); + keys.add("key1"); + String response = (String) jedisCluster.eval(script, keys, new ArrayList()); + + assertEquals("key1", response); + } + + @Test + public void evalsha() { + jedisCluster.set("foo", "bar"); + jedisCluster.eval("return redis.call('get','foo')", "foo"); + String result = (String) jedisCluster.evalsha("6b1bf486c81ceb7edf3c093f4c48582e38c0e791", "foo"); + + assertEquals("bar", result); + } + + @Test + public void evalshaBinary() { + jedisCluster.set(SafeEncoder.encode("foo"), SafeEncoder.encode("bar")); + jedisCluster.eval(SafeEncoder.encode("return redis.call('get','foo')"), SafeEncoder.encode("foo")); + byte[] result = (byte[]) jedisCluster.evalsha(SafeEncoder.encode("6b1bf486c81ceb7edf3c093f4c48582e38c0e791"), SafeEncoder.encode("foo")); + + assertArrayEquals(SafeEncoder.encode("bar"), result); + } + + @Test(expected = JedisNoScriptException.class) + public void evalshaShaNotFound() { + jedisCluster.evalsha("notfound", "ffffffffffffffffffffffffffffffffffffffff"); + } + + @Test + public void scriptFlush() { + jedisCluster.set("foo", "bar"); + jedisCluster.eval("return redis.call('get','foo')", "foo"); + jedisCluster.scriptFlush("foo"); + assertFalse(jedisCluster.scriptExists("6b1bf486c81ceb7edf3c093f4c48582e38c0e791", "foo")); + } + + @Test + public void scriptExists() { + jedisCluster.scriptLoad("return redis.call('get','foo')", "ffffffffffffffffffffffffffffffffffffffff"); + Boolean exists = jedisCluster.scriptExists("6b1bf486c81ceb7edf3c093f4c48582e38c0e791", + "ffffffffffffffffffffffffffffffffffffffff"); + assertTrue(exists); + } + + @Test + public void scriptExistsBinary() { + jedisCluster.scriptLoad(SafeEncoder.encode("return redis.call('get','foo')"), SafeEncoder.encode("ffffffffffffffffffffffffffffffffffffffff")); + List exists = jedisCluster.scriptExists( + SafeEncoder.encode("ffffffffffffffffffffffffffffffffffffffff"), + SafeEncoder.encode("6b1bf486c81ceb7edf3c093f4c48582e38c0e791")); + assertEquals(new Long(1), exists.get(0)); + } + + @Test + public void scriptLoad() { + jedisCluster.scriptLoad("return redis.call('get','foo')", "foo"); + assertTrue(jedisCluster.scriptExists("6b1bf486c81ceb7edf3c093f4c48582e38c0e791", "foo")); + } + + @Test + public void scriptLoadBinary() { + jedisCluster.scriptLoad(SafeEncoder.encode("return redis.call('get','foo')"), SafeEncoder.encode("foo")); + List exists = jedisCluster.scriptExists(SafeEncoder.encode("foo"), SafeEncoder.encode("6b1bf486c81ceb7edf3c093f4c48582e38c0e791")); + assertEquals(new Long(1), exists.get(0)); + } + + @Test + public void scriptKill() { + try { + jedisCluster.scriptKill("foo"); + } catch (JedisDataException e) { + assertTrue(e.getMessage().contains("No scripts in execution right now.")); + } + } + + @Test + public void scriptEvalReturnNullValues() { + jedisCluster.del(foo1); + jedisCluster.del(foo2); + + String script = "return {redis.call('hget',KEYS[1],ARGV[1]),redis.call('hget',KEYS[2],ARGV[2])}"; + List results = (List) jedisCluster.eval(script, 2, foo1, foo2, "1", "2"); + assertEquals(2, results.size()); + assertNull(results.get(0)); + assertNull(results.get(1)); + } + + @Test + public void scriptEvalShaReturnNullValues() { + jedisCluster.del("key1"); + jedisCluster.del("key2"); + + String script = "return {redis.call('hget',KEYS[1],ARGV[1]),redis.call('hget',KEYS[2],ARGV[2])}"; + String sha = jedisCluster.scriptLoad(script, "scriptTag"); + List results = (List) jedisCluster.evalsha(sha, 2, "scriptTag", "key1{scriptTag}", "key2{scriptTag}", "1", "2"); + assertEquals(2, results.size()); + assertNull(results.get(0)); + assertNull(results.get(1)); + } +// +// @Test +// public void scriptExistsWithBrokenConnection() { +// Jedis deadClient = new Jedis(jedis.getClient().getHost(), jedis.getClient().getPort()); +// deadClient.auth("foobared"); +// +// deadClient.clientSetname("DEAD"); +// +// ClientKillerUtil.killClient(deadClient, "DEAD"); +// +// // sure, script doesn't exist, but it's just for checking connection +// try { +// deadClient.scriptExists("abcdefg"); +// } catch (JedisConnectionException e) { +// // ignore it +// } +// +// assertEquals(true, deadClient.getClient().isBroken()); +// +// deadClient.close(); +// } + + private Matcher> listWithItem(T expected) { + return CoreMatchers.hasItem(equalTo(expected)); + } +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SetCommandsTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SetCommandsTest.java new file mode 100644 index 0000000..1cc79e9 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SetCommandsTest.java @@ -0,0 +1,557 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import org.junit.Test; +import redis.clients.jedis.ScanParams; +import redis.clients.jedis.ScanResult; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import static io.opentracing.contrib.redis.jediscluster.commands.TestKeys.*; +import static io.opentracing.contrib.redis.utils.AssertUtil.assertByteArraySetEquals; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static redis.clients.jedis.ScanParams.SCAN_POINTER_START; +import static redis.clients.jedis.ScanParams.SCAN_POINTER_START_BINARY; + +public class SetCommandsTest extends JedisCommandTestBase { + final byte[] ba = { 0x0A }; + final byte[] bb = { 0x0B }; + final byte[] bc = { 0x0C }; + final byte[] bd = { 0x0D }; + final byte[] bx = { 0x42 }; + + + @Test + public void sadd() { + long status = jedisCluster.sadd("foo", "a"); + assertEquals(1, status); + + status = jedisCluster.sadd("foo", "a"); + assertEquals(0, status); + + long bstatus = jedisCluster.sadd(bfoo, ba); + assertEquals(1, bstatus); + + bstatus = jedisCluster.sadd(bfoo, ba); + assertEquals(0, bstatus); + + } + + @Test + public void smembers() { + jedisCluster.sadd("foo", "a"); + jedisCluster.sadd("foo", "b"); + + Set expected = new HashSet(); + expected.add("a"); + expected.add("b"); + + Set members = jedisCluster.smembers("foo"); + + assertEquals(expected, members); + + // Binary + jedisCluster.sadd(bfoo, ba); + jedisCluster.sadd(bfoo, bb); + + Set bexpected = new HashSet(); + bexpected.add(bb); + bexpected.add(ba); + + Set bmembers = jedisCluster.smembers(bfoo); + + assertByteArraySetEquals(bexpected, bmembers); + } + + @Test + public void srem() { + jedisCluster.sadd("foo", "a"); + jedisCluster.sadd("foo", "b"); + + long status = jedisCluster.srem("foo", "a"); + + Set expected = new HashSet(); + expected.add("b"); + + assertEquals(1, status); + assertEquals(expected, jedisCluster.smembers("foo")); + + status = jedisCluster.srem("foo", "bar"); + + assertEquals(0, status); + + // Binary + + jedisCluster.sadd(bfoo, ba); + jedisCluster.sadd(bfoo, bb); + + long bstatus = jedisCluster.srem(bfoo, ba); + + Set bexpected = new HashSet(); + bexpected.add(bb); + + assertEquals(1, bstatus); + assertByteArraySetEquals(bexpected, jedisCluster.smembers(bfoo)); + + bstatus = jedisCluster.srem(bfoo, bbar); + + assertEquals(0, bstatus); + + } + + @Test + public void spop() { + jedisCluster.sadd("foo", "a"); + jedisCluster.sadd("foo", "b"); + + String member = jedisCluster.spop("foo"); + + assertTrue("a".equals(member) || "b".equals(member)); + assertEquals(1, jedisCluster.smembers("foo").size()); + + member = jedisCluster.spop("bar"); + assertNull(member); + + // Binary + jedisCluster.sadd(bfoo, ba); + jedisCluster.sadd(bfoo, bb); + + byte[] bmember = jedisCluster.spop(bfoo); + + assertTrue(Arrays.equals(ba, bmember) || Arrays.equals(bb, bmember)); + assertEquals(1, jedisCluster.smembers(bfoo).size()); + + bmember = jedisCluster.spop(bbar); + assertNull(bmember); + + } + + @Test + public void spopWithCount() { + jedisCluster.sadd("foo", "a"); + jedisCluster.sadd("foo", "b"); + + Set expected = new HashSet(); + expected.add("a"); + expected.add("b"); + + Set members = jedisCluster.spop("foo", 2); + + assertEquals(2, members.size()); + assertEquals(expected, members); + + members = jedisCluster.spop("foo", 2); + assertTrue(members.isEmpty()); + + // Binary + jedisCluster.sadd(bfoo, ba); + jedisCluster.sadd(bfoo, bb); + + Set bexpected = new HashSet(); + bexpected.add(bb); + bexpected.add(ba); + + Set bmembers = jedisCluster.spop(bfoo, 2); + + assertEquals(2, bmembers.size()); + assertByteArraySetEquals(bexpected, bmembers); + + bmembers = jedisCluster.spop(bfoo, 2); + assertTrue(bmembers.isEmpty()); + } + + @Test + public void smove() { + jedisCluster.sadd(foo, "a"); + jedisCluster.sadd(foo, "b"); + + jedisCluster.sadd(bar, "c"); + + long status = jedisCluster.smove(foo, bar, "a"); + + Set expectedSrc = new HashSet(); + expectedSrc.add("b"); + + Set expectedDst = new HashSet(); + expectedDst.add("c"); + expectedDst.add("a"); + + assertEquals(status, 1); + assertEquals(expectedSrc, jedisCluster.smembers(foo)); + assertEquals(expectedDst, jedisCluster.smembers(bar)); + + status = jedisCluster.smove(foo, bar, "a"); + + assertEquals(status, 0); + + // Binary + jedisCluster.sadd(bfoo, ba); + jedisCluster.sadd(bfoo, bb); + + jedisCluster.sadd(bbar, bc); + + long bstatus = jedisCluster.smove(bfoo, bbar, ba); + + Set bexpectedSrc = new HashSet(); + bexpectedSrc.add(bb); + + Set bexpectedDst = new HashSet(); + bexpectedDst.add(bc); + bexpectedDst.add(ba); + + assertEquals(bstatus, 1); + assertByteArraySetEquals(bexpectedSrc, jedisCluster.smembers(bfoo)); + assertByteArraySetEquals(bexpectedDst, jedisCluster.smembers(bbar)); + + bstatus = jedisCluster.smove(bfoo, bbar, ba); + assertEquals(bstatus, 0); + + } + + @Test + public void scard() { + jedisCluster.sadd(foo, "a"); + jedisCluster.sadd(foo, "b"); + + long card = jedisCluster.scard(foo); + + assertEquals(2, card); + + card = jedisCluster.scard(bar); + assertEquals(0, card); + + // Binary + jedisCluster.sadd(bfoo, ba); + jedisCluster.sadd(bfoo, bb); + + long bcard = jedisCluster.scard(bfoo); + + assertEquals(2, bcard); + + bcard = jedisCluster.scard(bbar); + assertEquals(0, bcard); + + } + + @Test + public void sismember() { + jedisCluster.sadd("foo", "a"); + jedisCluster.sadd("foo", "b"); + + assertTrue(jedisCluster.sismember("foo", "a")); + + assertFalse(jedisCluster.sismember("foo", "c")); + + // Binary + jedisCluster.sadd(bfoo, ba); + jedisCluster.sadd(bfoo, bb); + + assertTrue(jedisCluster.sismember(bfoo, ba)); + + assertFalse(jedisCluster.sismember(bfoo, bc)); + + } + + @Test + public void sinter() { + jedisCluster.sadd(foo, "a"); + jedisCluster.sadd(foo, "b"); + + jedisCluster.sadd(bar, "b"); + jedisCluster.sadd(bar, "c"); + + Set expected = new HashSet(); + expected.add("b"); + + Set intersection = jedisCluster.sinter(foo, bar); + assertEquals(expected, intersection); + + // Binary + jedisCluster.sadd(bfoo, ba); + jedisCluster.sadd(bfoo, bb); + + jedisCluster.sadd(bbar, bb); + jedisCluster.sadd(bbar, bc); + + Set bexpected = new HashSet(); + bexpected.add(bb); + + Set bintersection = jedisCluster.sinter(bfoo, bbar); + assertByteArraySetEquals(bexpected, bintersection); + } + + @Test + public void sinterstore() { + jedisCluster.sadd(foo, "a"); + jedisCluster.sadd(foo, "b"); + + jedisCluster.sadd(bar, "b"); + jedisCluster.sadd(bar, "c"); + + Set expected = new HashSet(); + expected.add("b"); + + long status = jedisCluster.sinterstore(car, foo, bar); + assertEquals(1, status); + + assertEquals(expected, jedisCluster.smembers(car)); + + // Binary + jedisCluster.sadd(bfoo, ba); + jedisCluster.sadd(bfoo, bb); + + jedisCluster.sadd(bbar, bb); + jedisCluster.sadd(bbar, bc); + + Set bexpected = new HashSet(); + bexpected.add(bb); + + long bstatus = jedisCluster.sinterstore(bcar, bfoo, bbar); + assertEquals(1, bstatus); + + assertByteArraySetEquals(bexpected, jedisCluster.smembers(bcar)); + + } + + @Test + public void sunion() { + jedisCluster.sadd(foo, "a"); + jedisCluster.sadd(foo, "b"); + + jedisCluster.sadd(bar, "b"); + jedisCluster.sadd(bar, "c"); + + Set expected = new HashSet(); + expected.add("a"); + expected.add("b"); + expected.add("c"); + + Set union = jedisCluster.sunion(foo, bar); + assertEquals(expected, union); + + // Binary + jedisCluster.sadd(bfoo, ba); + jedisCluster.sadd(bfoo, bb); + + jedisCluster.sadd(bbar, bb); + jedisCluster.sadd(bbar, bc); + + Set bexpected = new HashSet(); + bexpected.add(bb); + bexpected.add(bc); + bexpected.add(ba); + + Set bunion = jedisCluster.sunion(bfoo, bbar); + assertByteArraySetEquals(bexpected, bunion); + + } + + @Test + public void sunionstore() { + jedisCluster.sadd(foo, "a"); + jedisCluster.sadd(foo, "b"); + + jedisCluster.sadd(bar, "b"); + jedisCluster.sadd(bar, "c"); + + Set expected = new HashSet(); + expected.add("a"); + expected.add("b"); + expected.add("c"); + + long status = jedisCluster.sunionstore(car, foo, bar); + assertEquals(3, status); + + assertEquals(expected, jedisCluster.smembers(car)); + + // Binary + jedisCluster.sadd(bfoo, ba); + jedisCluster.sadd(bfoo, bb); + + jedisCluster.sadd(bbar, bb); + jedisCluster.sadd(bbar, bc); + + Set bexpected = new HashSet(); + bexpected.add(bb); + bexpected.add(bc); + bexpected.add(ba); + + long bstatus = jedisCluster.sunionstore(bcar, bfoo, bbar); + assertEquals(3, bstatus); + + assertByteArraySetEquals(bexpected, jedisCluster.smembers(bcar)); + + } + + @Test + public void sdiff() { + jedisCluster.sadd(foo, "x"); + jedisCluster.sadd(foo, "a"); + jedisCluster.sadd(foo, "b"); + jedisCluster.sadd(foo, "c"); + + jedisCluster.sadd(bar, "c"); + + jedisCluster.sadd(car, "a"); + jedisCluster.sadd(car, "d"); + + Set expected = new HashSet(); + expected.add("x"); + expected.add("b"); + + Set diff = jedisCluster.sdiff(foo, bar, car); + assertEquals(expected, diff); + + // Binary + jedisCluster.sadd(bfoo, bx); + jedisCluster.sadd(bfoo, ba); + jedisCluster.sadd(bfoo, bb); + jedisCluster.sadd(bfoo, bc); + + jedisCluster.sadd(bbar, bc); + + jedisCluster.sadd(bcar, ba); + jedisCluster.sadd(bcar, bd); + + Set bexpected = new HashSet(); + bexpected.add(bb); + bexpected.add(bx); + + Set bdiff = jedisCluster.sdiff(bfoo, bbar, bcar); + assertByteArraySetEquals(bexpected, bdiff); + + } + + @Test + public void sdiffstore() { + jedisCluster.sadd(foo, "x"); + jedisCluster.sadd(foo, "a"); + jedisCluster.sadd(foo, "b"); + jedisCluster.sadd(foo, "c"); + + jedisCluster.sadd(bar, "c"); + + jedisCluster.sadd(car, "a"); + jedisCluster.sadd(car, "d"); + + Set expected = new HashSet(); + expected.add("d"); + expected.add("a"); + + long status = jedisCluster.sdiffstore(dst, foo, bar, car); + assertEquals(2, status); + assertEquals(expected, jedisCluster.smembers(car)); + + // Binary + jedisCluster.sadd(bfoo, bx); + jedisCluster.sadd(bfoo, ba); + jedisCluster.sadd(bfoo, bb); + jedisCluster.sadd(bfoo, bc); + + jedisCluster.sadd(bbar, bc); + + jedisCluster.sadd(bcar, ba); + jedisCluster.sadd(bcar, bd); + + Set bexpected = new HashSet(); + bexpected.add(bd); + bexpected.add(ba); + + long bstatus = jedisCluster.sdiffstore(bdst, bfoo, bbar, bcar); + assertEquals(2, bstatus); + assertByteArraySetEquals(bexpected, jedisCluster.smembers(bcar)); + + } + + @Test + public void srandmember() { + jedisCluster.sadd("foo", "a"); + jedisCluster.sadd("foo", "b"); + + String member = jedisCluster.srandmember("foo"); + + assertTrue("a".equals(member) || "b".equals(member)); + assertEquals(2, jedisCluster.smembers("foo").size()); + + member = jedisCluster.srandmember("bar"); + assertNull(member); + + // Binary + jedisCluster.sadd(bfoo, ba); + jedisCluster.sadd(bfoo, bb); + + byte[] bmember = jedisCluster.srandmember(bfoo); + + assertTrue(Arrays.equals(ba, bmember) || Arrays.equals(bb, bmember)); + assertEquals(2, jedisCluster.smembers(bfoo).size()); + + bmember = jedisCluster.srandmember(bbar); + assertNull(bmember); + } + + @Test + public void sscan() { + jedisCluster.sadd("foo", "a", "b"); + + ScanResult result = jedisCluster.sscan("foo", SCAN_POINTER_START); + + assertEquals(SCAN_POINTER_START, result.getStringCursor()); + assertFalse(result.getResult().isEmpty()); + + // binary + jedisCluster.sadd(bfoo, ba, bb); + + ScanResult bResult = jedisCluster.sscan(bfoo, SCAN_POINTER_START_BINARY); + + assertArrayEquals(SCAN_POINTER_START_BINARY, bResult.getCursorAsBytes()); + assertFalse(bResult.getResult().isEmpty()); + } + + @Test + public void sscanMatch() { + ScanParams params = new ScanParams(); + params.match("a*"); + + jedisCluster.sadd("foo", "b", "a", "aa"); + ScanResult result = jedisCluster.sscan("foo", SCAN_POINTER_START, params); + + assertEquals(SCAN_POINTER_START, result.getStringCursor()); + assertFalse(result.getResult().isEmpty()); + + // binary + params = new ScanParams(); + params.match(bbarstar); + + jedisCluster.sadd(bfoo, bbar1, bbar2, bbar3); + ScanResult bResult = jedisCluster.sscan(bfoo, SCAN_POINTER_START_BINARY, params); + + assertArrayEquals(SCAN_POINTER_START_BINARY, bResult.getCursorAsBytes()); + assertFalse(bResult.getResult().isEmpty()); + } + + @Test + public void sscanCount() { + ScanParams params = new ScanParams(); + params.count(2); + + jedisCluster.sadd("foo", "a1", "a2", "a3", "a4", "a5"); + + ScanResult result = jedisCluster.sscan("foo", SCAN_POINTER_START, params); + + assertFalse(result.getResult().isEmpty()); + + // binary + params = new ScanParams(); + params.count(2); + + jedisCluster.sadd(bfoo, bbar1, bbar2, bbar3); + ScanResult bResult = jedisCluster.sscan(bfoo, SCAN_POINTER_START_BINARY, params); + + assertFalse(bResult.getResult().isEmpty()); + } +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SlowlogCommandsTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SlowlogCommandsTest.java new file mode 100644 index 0000000..62ebdd9 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SlowlogCommandsTest.java @@ -0,0 +1,42 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +public class SlowlogCommandsTest extends JedisCommandTestBase { + +// @Test +// public void slowlog() { +// // do something +// jedis.configSet("slowlog-log-slower-than", "0"); +// jedis.set("foo", "bar"); +// jedis.set("foo2", "bar2"); +// +// List reducedLog = jedis.slowlogGet(1); +// assertEquals(1, reducedLog.size()); +// +// Slowlog log = reducedLog.get(0); +// assertTrue(log.getId() > 0); +// assertTrue(log.getTimeStamp() > 0); +// assertTrue(log.getExecutionTime() > 0); +// assertNotNull(log.getArgs()); +// +// List breducedLog = jedis.slowlogGetBinary(1); +// assertEquals(1, breducedLog.size()); +// +// List log1 = jedis.slowlogGet(); +// List blog1 = jedis.slowlogGetBinary(); +// +// assertNotNull(log1); +// assertNotNull(blog1); +// +// long len1 = jedis.slowlogLen(); +// +// jedis.slowlogReset(); +// +// List log2 = jedis.slowlogGet(); +// List blog2 = jedis.slowlogGetBinary(); +// long len2 = jedis.slowlogLen(); +// +// assertTrue(len1 > len2); +// assertTrue(log1.size() > log2.size()); +// assertTrue(blog1.size() > blog2.size()); +// } +} \ No newline at end of file diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SortedSetCommandsTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SortedSetCommandsTest.java new file mode 100644 index 0000000..8e9b6cf --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SortedSetCommandsTest.java @@ -0,0 +1,1214 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import org.junit.Test; +import redis.clients.jedis.ScanParams; +import redis.clients.jedis.ScanResult; +import redis.clients.jedis.Tuple; +import redis.clients.jedis.ZParams; +import redis.clients.jedis.params.sortedset.ZAddParams; +import redis.clients.jedis.params.sortedset.ZIncrByParams; +import redis.clients.util.SafeEncoder; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; + +import static io.opentracing.contrib.redis.utils.AssertUtil.assertByteArraySetEquals; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static redis.clients.jedis.ScanParams.SCAN_POINTER_START; +import static redis.clients.jedis.ScanParams.SCAN_POINTER_START_BINARY; + +public class SortedSetCommandsTest extends JedisCommandTestBase { +// final byte[] bfoo = { 0x01, 0x02, 0x03, 0x04 }; +// final byte[] bbar = { 0x05, 0x06, 0x07, 0x08 }; + final byte[] bcar = { 0x09, 0x0A, 0x0B, 0x0C }; + final byte[] ba = { 0x0A }; + final byte[] bb = { 0x0B }; + final byte[] bc = { 0x0C }; + + final byte[] bbar1 = { 0x05, 0x06, 0x07, 0x08, 0x0A }; + final byte[] bbar2 = { 0x05, 0x06, 0x07, 0x08, 0x0B }; + final byte[] bbar3 = { 0x05, 0x06, 0x07, 0x08, 0x0C }; + + final byte[] bbarstar = { 0x05, 0x06, 0x07, 0x08, '*' }; + final byte[] bInclusiveB = { 0x5B, 0x0B }; + final byte[] bExclusiveC = { 0x28, 0x0C }; + final byte[] bLexMinusInf = { 0x2D }; + final byte[] bLexPlusInf = { 0x2B }; + + private final String foo = "foo{zset}"; + private final String bar = "bar{zset}"; + private final String dst = "dst{zset}"; + + private final byte[] bfoo = SafeEncoder.encode("b" + foo); + private final byte[] bbar = SafeEncoder.encode("b" + bar); + private final byte[] bdst = SafeEncoder.encode("b" + dst); + + @Test + public void zadd() { + long status = jedisCluster.zadd("foo", 1d, "a"); + assertEquals(1, status); + + status = jedisCluster.zadd("foo", 10d, "b"); + assertEquals(1, status); + + status = jedisCluster.zadd("foo", 0.1d, "c"); + assertEquals(1, status); + + status = jedisCluster.zadd("foo", 2d, "a"); + assertEquals(0, status); + + // Binary + long bstatus = jedisCluster.zadd(bfoo, 1d, ba); + assertEquals(1, bstatus); + + bstatus = jedisCluster.zadd(bfoo, 10d, bb); + assertEquals(1, bstatus); + + bstatus = jedisCluster.zadd(bfoo, 0.1d, bc); + assertEquals(1, bstatus); + + bstatus = jedisCluster.zadd(bfoo, 2d, ba); + assertEquals(0, bstatus); + + } + + @Test + public void zaddWithParams() { + jedisCluster.del("foo"); + + // xx: never add new member + long status = jedisCluster.zadd("foo", 1d, "a", ZAddParams.zAddParams().xx()); + assertEquals(0L, status); + + jedisCluster.zadd("foo", 1d, "a"); + // nx: never update current member + status = jedisCluster.zadd("foo", 2d, "a", ZAddParams.zAddParams().nx()); + assertEquals(0L, status); + assertEquals(Double.valueOf(1d), jedisCluster.zscore("foo", "a")); + + Map scoreMembers = new HashMap(); + scoreMembers.put("a", 2d); + scoreMembers.put("b", 1d); + // ch: return count of members not only added, but also updated + status = jedisCluster.zadd("foo", scoreMembers, ZAddParams.zAddParams().ch()); + assertEquals(2L, status); + + // binary + jedisCluster.del(bfoo); + + // xx: never add new member + status = jedisCluster.zadd(bfoo, 1d, ba, ZAddParams.zAddParams().xx()); + assertEquals(0L, status); + + jedisCluster.zadd(bfoo, 1d, ba); + // nx: never update current member + status = jedisCluster.zadd(bfoo, 2d, ba, ZAddParams.zAddParams().nx()); + assertEquals(0L, status); + assertEquals(Double.valueOf(1d), jedisCluster.zscore(bfoo, ba)); + + Map binaryScoreMembers = new HashMap(); + binaryScoreMembers.put(ba, 2d); + binaryScoreMembers.put(bb, 1d); + // ch: return count of members not only added, but also updated + status = jedisCluster.zadd(bfoo, binaryScoreMembers, ZAddParams.zAddParams().ch()); + assertEquals(2L, status); + } + + @Test + public void zrange() { + jedisCluster.zadd("foo", 1d, "a"); + jedisCluster.zadd("foo", 10d, "b"); + jedisCluster.zadd("foo", 0.1d, "c"); + jedisCluster.zadd("foo", 2d, "a"); + + Set expected = new LinkedHashSet(); + expected.add("c"); + expected.add("a"); + + Set range = jedisCluster.zrange("foo", 0, 1); + assertEquals(expected, range); + + expected.add("b"); + range = jedisCluster.zrange("foo", 0, 100); + assertEquals(expected, range); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 10d, bb); + jedisCluster.zadd(bfoo, 0.1d, bc); + jedisCluster.zadd(bfoo, 2d, ba); + + Set bexpected = new LinkedHashSet(); + bexpected.add(bc); + bexpected.add(ba); + + Set brange = jedisCluster.zrange(bfoo, 0, 1); + assertByteArraySetEquals(bexpected, brange); + + bexpected.add(bb); + brange = jedisCluster.zrange(bfoo, 0, 100); + assertByteArraySetEquals(bexpected, brange); + + } + + @Test + public void zrangeByLex() { + jedisCluster.zadd("foo", 1, "aa"); + jedisCluster.zadd("foo", 1, "c"); + jedisCluster.zadd("foo", 1, "bb"); + jedisCluster.zadd("foo", 1, "d"); + + Set expected = new LinkedHashSet(); + expected.add("bb"); + expected.add("c"); + + // exclusive aa ~ inclusive c + assertEquals(expected, jedisCluster.zrangeByLex("foo", "(aa", "[c")); + + expected.clear(); + expected.add("bb"); + expected.add("c"); + + // with LIMIT + assertEquals(expected, jedisCluster.zrangeByLex("foo", "-", "+", 1, 2)); + } + + @Test + public void zrangeByLexBinary() { + // binary + jedisCluster.zadd(bfoo, 1, ba); + jedisCluster.zadd(bfoo, 1, bc); + jedisCluster.zadd(bfoo, 1, bb); + + Set bExpected = new LinkedHashSet(); + bExpected.add(bb); + + assertByteArraySetEquals(bExpected, jedisCluster.zrangeByLex(bfoo, bInclusiveB, bExclusiveC)); + + bExpected.clear(); + bExpected.add(ba); + bExpected.add(bb); + + // with LIMIT + assertByteArraySetEquals(bExpected, jedisCluster.zrangeByLex(bfoo, bLexMinusInf, bLexPlusInf, 0, 2)); + } + + @Test + public void zrevrangeByLex() { + jedisCluster.zadd("foo", 1, "aa"); + jedisCluster.zadd("foo", 1, "c"); + jedisCluster.zadd("foo", 1, "bb"); + jedisCluster.zadd("foo", 1, "d"); + + Set expected = new LinkedHashSet(); + expected.add("c"); + expected.add("bb"); + + // exclusive aa ~ inclusive c + assertEquals(expected, jedisCluster.zrevrangeByLex("foo", "[c", "(aa")); + + expected.clear(); + expected.add("c"); + expected.add("bb"); + + // with LIMIT + assertEquals(expected, jedisCluster.zrevrangeByLex("foo", "+", "-", 1, 2)); + } + + @Test + public void zrevrangeByLexBinary() { + // binary + jedisCluster.zadd(bfoo, 1, ba); + jedisCluster.zadd(bfoo, 1, bc); + jedisCluster.zadd(bfoo, 1, bb); + + Set bExpected = new LinkedHashSet(); + bExpected.add(bb); + + assertByteArraySetEquals(bExpected, jedisCluster.zrevrangeByLex(bfoo, bExclusiveC, bInclusiveB)); + + bExpected.clear(); + bExpected.add(bb); + bExpected.add(ba); + + // with LIMIT + assertByteArraySetEquals(bExpected, jedisCluster.zrevrangeByLex(bfoo, bLexPlusInf, bLexMinusInf, 0, 2)); + } + + @Test + public void zrevrange() { + jedisCluster.zadd("foo", 1d, "a"); + jedisCluster.zadd("foo", 10d, "b"); + jedisCluster.zadd("foo", 0.1d, "c"); + jedisCluster.zadd("foo", 2d, "a"); + + Set expected = new LinkedHashSet(); + expected.add("b"); + expected.add("a"); + + Set range = jedisCluster.zrevrange("foo", 0, 1); + assertEquals(expected, range); + + expected.add("c"); + range = jedisCluster.zrevrange("foo", 0, 100); + assertEquals(expected, range); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 10d, bb); + jedisCluster.zadd(bfoo, 0.1d, bc); + jedisCluster.zadd(bfoo, 2d, ba); + + Set bexpected = new LinkedHashSet(); + bexpected.add(bb); + bexpected.add(ba); + + Set brange = jedisCluster.zrevrange(bfoo, 0, 1); + assertByteArraySetEquals(bexpected, brange); + + bexpected.add(bc); + brange = jedisCluster.zrevrange(bfoo, 0, 100); + assertByteArraySetEquals(bexpected, brange); + + } + + @Test + public void zrem() { + jedisCluster.zadd("foo", 1d, "a"); + jedisCluster.zadd("foo", 2d, "b"); + + long status = jedisCluster.zrem("foo", "a"); + + Set expected = new LinkedHashSet(); + expected.add("b"); + + assertEquals(1, status); + assertEquals(expected, jedisCluster.zrange("foo", 0, 100)); + + status = jedisCluster.zrem("foo", "bar"); + + assertEquals(0, status); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 2d, bb); + + long bstatus = jedisCluster.zrem(bfoo, ba); + + Set bexpected = new LinkedHashSet(); + bexpected.add(bb); + + assertEquals(1, bstatus); + assertByteArraySetEquals(bexpected, jedisCluster.zrange(bfoo, 0, 100)); + + bstatus = jedisCluster.zrem(bfoo, bbar); + + assertEquals(0, bstatus); + + } + + @Test + public void zincrby() { + jedisCluster.zadd("foo", 1d, "a"); + jedisCluster.zadd("foo", 2d, "b"); + + double score = jedisCluster.zincrby("foo", 2d, "a"); + + Set expected = new LinkedHashSet(); + expected.add("a"); + expected.add("b"); + + assertEquals(3d, score, 0); + assertEquals(expected, jedisCluster.zrange("foo", 0, 100)); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 2d, bb); + + double bscore = jedisCluster.zincrby(bfoo, 2d, ba); + + Set bexpected = new LinkedHashSet(); + bexpected.add(bb); + bexpected.add(ba); + + assertEquals(3d, bscore, 0); + assertByteArraySetEquals(bexpected, jedisCluster.zrange(bfoo, 0, 100)); + + } + + @Test + public void zincrbyWithParams() { + jedisCluster.del("foo"); + + // xx: never add new member + Double score = jedisCluster.zincrby("foo", 2d, "a", ZIncrByParams.zIncrByParams().xx()); + assertNull(score); + + jedisCluster.zadd("foo", 2d, "a"); + + // nx: never update current member + score = jedisCluster.zincrby("foo", 1d, "a", ZIncrByParams.zIncrByParams().nx()); + assertNull(score); + assertEquals(Double.valueOf(2d), jedisCluster.zscore("foo", "a")); + + // Binary + + jedisCluster.del(bfoo); + + // xx: never add new member + score = jedisCluster.zincrby(bfoo, 2d, ba, ZIncrByParams.zIncrByParams().xx()); + assertNull(score); + + jedisCluster.zadd(bfoo, 2d, ba); + + // nx: never update current member + score = jedisCluster.zincrby(bfoo, 1d, ba, ZIncrByParams.zIncrByParams().nx()); + assertNull(score); + assertEquals(Double.valueOf(2d), jedisCluster.zscore(bfoo, ba)); + } + + @Test + public void zrank() { + jedisCluster.zadd("foo", 1d, "a"); + jedisCluster.zadd("foo", 2d, "b"); + + long rank = jedisCluster.zrank("foo", "a"); + assertEquals(0, rank); + + rank = jedisCluster.zrank("foo", "b"); + assertEquals(1, rank); + + assertNull(jedisCluster.zrank("car", "b")); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 2d, bb); + + long brank = jedisCluster.zrank(bfoo, ba); + assertEquals(0, brank); + + brank = jedisCluster.zrank(bfoo, bb); + assertEquals(1, brank); + + assertNull(jedisCluster.zrank(bcar, bb)); + + } + + @Test + public void zrevrank() { + jedisCluster.zadd("foo", 1d, "a"); + jedisCluster.zadd("foo", 2d, "b"); + + long rank = jedisCluster.zrevrank("foo", "a"); + assertEquals(1, rank); + + rank = jedisCluster.zrevrank("foo", "b"); + assertEquals(0, rank); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 2d, bb); + + long brank = jedisCluster.zrevrank(bfoo, ba); + assertEquals(1, brank); + + brank = jedisCluster.zrevrank(bfoo, bb); + assertEquals(0, brank); + + } + + @Test + public void zrangeWithScores() { + jedisCluster.zadd("foo", 1d, "a"); + jedisCluster.zadd("foo", 10d, "b"); + jedisCluster.zadd("foo", 0.1d, "c"); + jedisCluster.zadd("foo", 2d, "a"); + + Set expected = new LinkedHashSet(); + expected.add(new Tuple("c", 0.1d)); + expected.add(new Tuple("a", 2d)); + + Set range = jedisCluster.zrangeWithScores("foo", 0, 1); + assertEquals(expected, range); + + expected.add(new Tuple("b", 10d)); + range = jedisCluster.zrangeWithScores("foo", 0, 100); + assertEquals(expected, range); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 10d, bb); + jedisCluster.zadd(bfoo, 0.1d, bc); + jedisCluster.zadd(bfoo, 2d, ba); + + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bc, 0.1d)); + bexpected.add(new Tuple(ba, 2d)); + + Set brange = jedisCluster.zrangeWithScores(bfoo, 0, 1); + assertEquals(bexpected, brange); + + bexpected.add(new Tuple(bb, 10d)); + brange = jedisCluster.zrangeWithScores(bfoo, 0, 100); + assertEquals(bexpected, brange); + + } + + @Test + public void zrevrangeWithScores() { + jedisCluster.zadd("foo", 1d, "a"); + jedisCluster.zadd("foo", 10d, "b"); + jedisCluster.zadd("foo", 0.1d, "c"); + jedisCluster.zadd("foo", 2d, "a"); + + Set expected = new LinkedHashSet(); + expected.add(new Tuple("b", 10d)); + expected.add(new Tuple("a", 2d)); + + Set range = jedisCluster.zrevrangeWithScores("foo", 0, 1); + assertEquals(expected, range); + + expected.add(new Tuple("c", 0.1d)); + range = jedisCluster.zrevrangeWithScores("foo", 0, 100); + assertEquals(expected, range); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 10d, bb); + jedisCluster.zadd(bfoo, 0.1d, bc); + jedisCluster.zadd(bfoo, 2d, ba); + + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bb, 10d)); + bexpected.add(new Tuple(ba, 2d)); + + Set brange = jedisCluster.zrevrangeWithScores(bfoo, 0, 1); + assertEquals(bexpected, brange); + + bexpected.add(new Tuple(bc, 0.1d)); + brange = jedisCluster.zrevrangeWithScores(bfoo, 0, 100); + assertEquals(bexpected, brange); + + } + + @Test + public void zcard() { + jedisCluster.zadd("foo", 1d, "a"); + jedisCluster.zadd("foo", 10d, "b"); + jedisCluster.zadd("foo", 0.1d, "c"); + jedisCluster.zadd("foo", 2d, "a"); + + long size = jedisCluster.zcard("foo"); + assertEquals(3, size); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 10d, bb); + jedisCluster.zadd(bfoo, 0.1d, bc); + jedisCluster.zadd(bfoo, 2d, ba); + + long bsize = jedisCluster.zcard(bfoo); + assertEquals(3, bsize); + + } + + @Test + public void zscore() { + jedisCluster.zadd("foo", 1d, "a"); + jedisCluster.zadd("foo", 10d, "b"); + jedisCluster.zadd("foo", 0.1d, "c"); + jedisCluster.zadd("foo", 2d, "a"); + + Double score = jedisCluster.zscore("foo", "b"); + assertEquals((Double) 10d, score); + + score = jedisCluster.zscore("foo", "c"); + assertEquals((Double) 0.1d, score); + + score = jedisCluster.zscore("foo", "s"); + assertNull(score); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 10d, bb); + jedisCluster.zadd(bfoo, 0.1d, bc); + jedisCluster.zadd(bfoo, 2d, ba); + + Double bscore = jedisCluster.zscore(bfoo, bb); + assertEquals((Double) 10d, bscore); + + bscore = jedisCluster.zscore(bfoo, bc); + assertEquals((Double) 0.1d, bscore); + + bscore = jedisCluster.zscore(bfoo, SafeEncoder.encode("s")); + assertNull(bscore); + + } + + @Test + public void zcount() { + jedisCluster.zadd("foo", 1d, "a"); + jedisCluster.zadd("foo", 10d, "b"); + jedisCluster.zadd("foo", 0.1d, "c"); + jedisCluster.zadd("foo", 2d, "a"); + + long result = jedisCluster.zcount("foo", 0.01d, 2.1d); + + assertEquals(2, result); + + result = jedisCluster.zcount("foo", "(0.01", "+inf"); + + assertEquals(3, result); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 10d, bb); + jedisCluster.zadd(bfoo, 0.1d, bc); + jedisCluster.zadd(bfoo, 2d, ba); + + long bresult = jedisCluster.zcount(bfoo, 0.01d, 2.1d); + + assertEquals(2, bresult); + + bresult = jedisCluster.zcount(bfoo, SafeEncoder.encode("(0.01"), SafeEncoder.encode("+inf")); + + assertEquals(3, bresult); + } + + @Test + public void zlexcount() { + jedisCluster.zadd("foo", 1, "a"); + jedisCluster.zadd("foo", 1, "b"); + jedisCluster.zadd("foo", 1, "c"); + jedisCluster.zadd("foo", 1, "aa"); + + long result = jedisCluster.zlexcount("foo", "[aa", "(c"); + assertEquals(2, result); + + result = jedisCluster.zlexcount("foo", "-", "+"); + assertEquals(4, result); + + result = jedisCluster.zlexcount("foo", "-", "(c"); + assertEquals(3, result); + + result = jedisCluster.zlexcount("foo", "[aa", "+"); + assertEquals(3, result); + } + + @Test + public void zlexcountBinary() { + // Binary + jedisCluster.zadd(bfoo, 1, ba); + jedisCluster.zadd(bfoo, 1, bc); + jedisCluster.zadd(bfoo, 1, bb); + + long result = jedisCluster.zlexcount(bfoo, bInclusiveB, bExclusiveC); + assertEquals(1, result); + + result = jedisCluster.zlexcount(bfoo, bLexMinusInf, bLexPlusInf); + assertEquals(3, result); + } + + @Test + public void zrangebyscore() { + jedisCluster.zadd("foo", 1d, "a"); + jedisCluster.zadd("foo", 10d, "b"); + jedisCluster.zadd("foo", 0.1d, "c"); + jedisCluster.zadd("foo", 2d, "a"); + + Set range = jedisCluster.zrangeByScore("foo", 0d, 2d); + + Set expected = new LinkedHashSet(); + expected.add("c"); + expected.add("a"); + + assertEquals(expected, range); + + range = jedisCluster.zrangeByScore("foo", 0d, 2d, 0, 1); + + expected = new LinkedHashSet(); + expected.add("c"); + + assertEquals(expected, range); + + range = jedisCluster.zrangeByScore("foo", 0d, 2d, 1, 1); + Set range2 = jedisCluster.zrangeByScore("foo", "-inf", "(2"); + assertEquals(expected, range2); + + expected = new LinkedHashSet(); + expected.add("a"); + + assertEquals(expected, range); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 10d, bb); + jedisCluster.zadd(bfoo, 0.1d, bc); + jedisCluster.zadd(bfoo, 2d, ba); + + Set brange = jedisCluster.zrangeByScore(bfoo, 0d, 2d); + + Set bexpected = new LinkedHashSet(); + bexpected.add(bc); + bexpected.add(ba); + + assertByteArraySetEquals(bexpected, brange); + + brange = jedisCluster.zrangeByScore(bfoo, 0d, 2d, 0, 1); + + bexpected = new LinkedHashSet(); + bexpected.add(bc); + + assertByteArraySetEquals(bexpected, brange); + + brange = jedisCluster.zrangeByScore(bfoo, 0d, 2d, 1, 1); + Set brange2 = jedisCluster.zrangeByScore(bfoo, SafeEncoder.encode("-inf"), + SafeEncoder.encode("(2")); + assertByteArraySetEquals(bexpected, brange2); + + bexpected = new LinkedHashSet(); + bexpected.add(ba); + + assertByteArraySetEquals(bexpected, brange); + + } + + @Test + public void zrevrangebyscore() { + jedisCluster.zadd("foo", 1.0d, "a"); + jedisCluster.zadd("foo", 2.0d, "b"); + jedisCluster.zadd("foo", 3.0d, "c"); + jedisCluster.zadd("foo", 4.0d, "d"); + jedisCluster.zadd("foo", 5.0d, "e"); + + Set range = jedisCluster.zrevrangeByScore("foo", 3d, Double.NEGATIVE_INFINITY, 0, 1); + Set expected = new LinkedHashSet(); + expected.add("c"); + + assertEquals(expected, range); + + range = jedisCluster.zrevrangeByScore("foo", 3.5d, Double.NEGATIVE_INFINITY, 0, 2); + expected = new LinkedHashSet(); + expected.add("c"); + expected.add("b"); + + assertEquals(expected, range); + + range = jedisCluster.zrevrangeByScore("foo", 3.5d, Double.NEGATIVE_INFINITY, 1, 1); + expected = new LinkedHashSet(); + expected.add("b"); + + assertEquals(expected, range); + + range = jedisCluster.zrevrangeByScore("foo", 4d, 2d); + expected = new LinkedHashSet(); + expected.add("d"); + expected.add("c"); + expected.add("b"); + + assertEquals(expected, range); + + range = jedisCluster.zrevrangeByScore("foo", "+inf", "(4"); + expected = new LinkedHashSet(); + expected.add("e"); + + assertEquals(expected, range); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 10d, bb); + jedisCluster.zadd(bfoo, 0.1d, bc); + jedisCluster.zadd(bfoo, 2d, ba); + + Set brange = jedisCluster.zrevrangeByScore(bfoo, 2d, 0d); + + Set bexpected = new LinkedHashSet(); + bexpected.add(bc); + bexpected.add(ba); + + assertByteArraySetEquals(bexpected, brange); + + brange = jedisCluster.zrevrangeByScore(bfoo, 2d, 0d, 0, 1); + + bexpected = new LinkedHashSet(); + bexpected.add(ba); + + assertByteArraySetEquals(bexpected, brange); + + Set brange2 = jedisCluster.zrevrangeByScore(bfoo, SafeEncoder.encode("+inf"), + SafeEncoder.encode("(2")); + + bexpected = new LinkedHashSet(); + bexpected.add(bb); + + assertByteArraySetEquals(bexpected, brange2); + + brange = jedisCluster.zrevrangeByScore(bfoo, 2d, 0d, 1, 1); + bexpected = new LinkedHashSet(); + bexpected.add(bc); + + assertByteArraySetEquals(bexpected, brange); + } + + @Test + public void zrangebyscoreWithScores() { + jedisCluster.zadd("foo", 1d, "a"); + jedisCluster.zadd("foo", 10d, "b"); + jedisCluster.zadd("foo", 0.1d, "c"); + jedisCluster.zadd("foo", 2d, "a"); + + Set range = jedisCluster.zrangeByScoreWithScores("foo", 0d, 2d); + + Set expected = new LinkedHashSet(); + expected.add(new Tuple("c", 0.1d)); + expected.add(new Tuple("a", 2d)); + + assertEquals(expected, range); + + range = jedisCluster.zrangeByScoreWithScores("foo", 0d, 2d, 0, 1); + + expected = new LinkedHashSet(); + expected.add(new Tuple("c", 0.1d)); + + assertEquals(expected, range); + + range = jedisCluster.zrangeByScoreWithScores("foo", 0d, 2d, 1, 1); + + expected = new LinkedHashSet(); + expected.add(new Tuple("a", 2d)); + + assertEquals(expected, range); + + // Binary + + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 10d, bb); + jedisCluster.zadd(bfoo, 0.1d, bc); + jedisCluster.zadd(bfoo, 2d, ba); + + Set brange = jedisCluster.zrangeByScoreWithScores(bfoo, 0d, 2d); + + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bc, 0.1d)); + bexpected.add(new Tuple(ba, 2d)); + + assertEquals(bexpected, brange); + + brange = jedisCluster.zrangeByScoreWithScores(bfoo, 0d, 2d, 0, 1); + + bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bc, 0.1d)); + + assertEquals(bexpected, brange); + + brange = jedisCluster.zrangeByScoreWithScores(bfoo, 0d, 2d, 1, 1); + + bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(ba, 2d)); + + assertEquals(bexpected, brange); + + } + + @Test + public void zrevrangebyscoreWithScores() { + jedisCluster.zadd("foo", 1.0d, "a"); + jedisCluster.zadd("foo", 2.0d, "b"); + jedisCluster.zadd("foo", 3.0d, "c"); + jedisCluster.zadd("foo", 4.0d, "d"); + jedisCluster.zadd("foo", 5.0d, "e"); + + Set range = jedisCluster.zrevrangeByScoreWithScores("foo", 3d, Double.NEGATIVE_INFINITY, 0, 1); + Set expected = new LinkedHashSet(); + expected.add(new Tuple("c", 3.0d)); + + assertEquals(expected, range); + + range = jedisCluster.zrevrangeByScoreWithScores("foo", 3.5d, Double.NEGATIVE_INFINITY, 0, 2); + expected = new LinkedHashSet(); + expected.add(new Tuple("c", 3.0d)); + expected.add(new Tuple("b", 2.0d)); + + assertEquals(expected, range); + + range = jedisCluster.zrevrangeByScoreWithScores("foo", 3.5d, Double.NEGATIVE_INFINITY, 1, 1); + expected = new LinkedHashSet(); + expected.add(new Tuple("b", 2.0d)); + + assertEquals(expected, range); + + range = jedisCluster.zrevrangeByScoreWithScores("foo", 4d, 2d); + expected = new LinkedHashSet(); + expected.add(new Tuple("d", 4.0d)); + expected.add(new Tuple("c", 3.0d)); + expected.add(new Tuple("b", 2.0d)); + + assertEquals(expected, range); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 10d, bb); + jedisCluster.zadd(bfoo, 0.1d, bc); + jedisCluster.zadd(bfoo, 2d, ba); + + Set brange = jedisCluster.zrevrangeByScoreWithScores(bfoo, 2d, 0d); + + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bc, 0.1d)); + bexpected.add(new Tuple(ba, 2d)); + + assertEquals(bexpected, brange); + + brange = jedisCluster.zrevrangeByScoreWithScores(bfoo, 2d, 0d, 0, 1); + + bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(ba, 2d)); + + assertEquals(bexpected, brange); + + brange = jedisCluster.zrevrangeByScoreWithScores(bfoo, 2d, 0d, 1, 1); + + bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bc, 0.1d)); + + assertEquals(bexpected, brange); + } + + @Test + public void zremrangeByRank() { + jedisCluster.zadd("foo", 1d, "a"); + jedisCluster.zadd("foo", 10d, "b"); + jedisCluster.zadd("foo", 0.1d, "c"); + jedisCluster.zadd("foo", 2d, "a"); + + long result = jedisCluster.zremrangeByRank("foo", 0, 0); + + assertEquals(1, result); + + Set expected = new LinkedHashSet(); + expected.add("a"); + expected.add("b"); + + assertEquals(expected, jedisCluster.zrange("foo", 0, 100)); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 10d, bb); + jedisCluster.zadd(bfoo, 0.1d, bc); + jedisCluster.zadd(bfoo, 2d, ba); + + long bresult = jedisCluster.zremrangeByRank(bfoo, 0, 0); + + assertEquals(1, bresult); + + Set bexpected = new LinkedHashSet(); + bexpected.add(ba); + bexpected.add(bb); + + assertByteArraySetEquals(bexpected, jedisCluster.zrange(bfoo, 0, 100)); + + } + + @Test + public void zremrangeByScore() { + jedisCluster.zadd("foo", 1d, "a"); + jedisCluster.zadd("foo", 10d, "b"); + jedisCluster.zadd("foo", 0.1d, "c"); + jedisCluster.zadd("foo", 2d, "a"); + + long result = jedisCluster.zremrangeByScore("foo", 0, 2); + + assertEquals(2, result); + + Set expected = new LinkedHashSet(); + expected.add("b"); + + assertEquals(expected, jedisCluster.zrange("foo", 0, 100)); + + // Binary + jedisCluster.zadd(bfoo, 1d, ba); + jedisCluster.zadd(bfoo, 10d, bb); + jedisCluster.zadd(bfoo, 0.1d, bc); + jedisCluster.zadd(bfoo, 2d, ba); + + long bresult = jedisCluster.zremrangeByScore(bfoo, 0, 2); + + assertEquals(2, bresult); + + Set bexpected = new LinkedHashSet(); + bexpected.add(bb); + + assertByteArraySetEquals(bexpected, jedisCluster.zrange(bfoo, 0, 100)); + } + + @Test + public void zremrangeByLex() { + jedisCluster.zadd("foo", 1, "a"); + jedisCluster.zadd("foo", 1, "b"); + jedisCluster.zadd("foo", 1, "c"); + jedisCluster.zadd("foo", 1, "aa"); + + long result = jedisCluster.zremrangeByLex("foo", "[aa", "(c"); + + assertEquals(2, result); + + Set expected = new LinkedHashSet(); + expected.add("a"); + expected.add("c"); + + assertEquals(expected, jedisCluster.zrangeByLex("foo", "-", "+")); + } + + @Test + public void zremrangeByLexBinary() { + jedisCluster.zadd(bfoo, 1, ba); + jedisCluster.zadd(bfoo, 1, bc); + jedisCluster.zadd(bfoo, 1, bb); + + long bresult = jedisCluster.zremrangeByLex(bfoo, bInclusiveB, bExclusiveC); + + assertEquals(1, bresult); + + Set bexpected = new LinkedHashSet(); + bexpected.add(ba); + bexpected.add(bc); + + assertByteArraySetEquals(bexpected, jedisCluster.zrangeByLex(bfoo, bLexMinusInf, bLexPlusInf)); + } + + @Test + public void zunionstore() { + jedisCluster.zadd(foo, 1, "a"); + jedisCluster.zadd(foo, 2, "b"); + jedisCluster.zadd(bar, 2, "a"); + jedisCluster.zadd(bar, 2, "b"); + + long result = jedisCluster.zunionstore(dst, foo, bar); + + assertEquals(2, result); + + Set expected = new LinkedHashSet(); + expected.add(new Tuple("b", new Double(4))); + expected.add(new Tuple("a", new Double(3))); + + assertEquals(expected, jedisCluster.zrangeWithScores(dst, 0, 100)); + + // Binary + jedisCluster.zadd(bfoo, 1, ba); + jedisCluster.zadd(bfoo, 2, bb); + jedisCluster.zadd(bbar, 2, ba); + jedisCluster.zadd(bbar, 2, bb); + + long bresult = jedisCluster.zunionstore(bdst, bfoo, bbar); + + assertEquals(2, bresult); + + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bb, new Double(4))); + bexpected.add(new Tuple(ba, new Double(3))); + + assertEquals(bexpected, jedisCluster.zrangeWithScores(bdst, 0, 100)); + } + + @Test + public void zunionstoreParams() { + jedisCluster.zadd(foo, 1, "a"); + jedisCluster.zadd(foo, 2, "b"); + jedisCluster.zadd(bar, 2, "a"); + jedisCluster.zadd(bar, 2, "b"); + + ZParams params = new ZParams(); + params.weightsByDouble(2, 2.5); + params.aggregate(ZParams.Aggregate.SUM); + long result = jedisCluster.zunionstore(dst, params, foo, bar); + + assertEquals(2, result); + + Set expected = new LinkedHashSet(); + expected.add(new Tuple("b", new Double(9))); + expected.add(new Tuple("a", new Double(7))); + + assertEquals(expected, jedisCluster.zrangeWithScores(dst, 0, 100)); + + // Binary + jedisCluster.zadd(bfoo, 1, ba); + jedisCluster.zadd(bfoo, 2, bb); + jedisCluster.zadd(bbar, 2, ba); + jedisCluster.zadd(bbar, 2, bb); + + ZParams bparams = new ZParams(); + bparams.weightsByDouble(2, 2.5); + bparams.aggregate(ZParams.Aggregate.SUM); + long bresult = jedisCluster.zunionstore(bdst, bparams, bfoo, bbar); + + assertEquals(2, bresult); + + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(bb, new Double(9))); + bexpected.add(new Tuple(ba, new Double(7))); + + assertEquals(bexpected, jedisCluster.zrangeWithScores(bdst, 0, 100)); + } + + @Test + public void zinterstore() { + jedisCluster.zadd(foo, 1, "a"); + jedisCluster.zadd(foo, 2, "b"); + jedisCluster.zadd(bar, 2, "a"); + + long result = jedisCluster.zinterstore(dst, foo, bar); + + assertEquals(1, result); + + Set expected = new LinkedHashSet(); + expected.add(new Tuple("a", new Double(3))); + + assertEquals(expected, jedisCluster.zrangeWithScores(dst, 0, 100)); + + // Binary + jedisCluster.zadd(bfoo, 1, ba); + jedisCluster.zadd(bfoo, 2, bb); + jedisCluster.zadd(bbar, 2, ba); + + long bresult = jedisCluster.zinterstore(bdst, bfoo, bbar); + + assertEquals(1, bresult); + + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(ba, new Double(3))); + + assertEquals(bexpected, jedisCluster.zrangeWithScores(bdst, 0, 100)); + } + + @Test + public void zintertoreParams() { + jedisCluster.zadd(foo, 1, "a"); + jedisCluster.zadd(foo, 2, "b"); + jedisCluster.zadd(bar, 2, "a"); + + ZParams params = new ZParams(); + params.weightsByDouble(2, 2.5); + params.aggregate(ZParams.Aggregate.SUM); + long result = jedisCluster.zinterstore(dst, params,foo, bar); + + assertEquals(1, result); + + Set expected = new LinkedHashSet(); + expected.add(new Tuple("a", new Double(7))); + + assertEquals(expected, jedisCluster.zrangeWithScores(dst, 0, 100)); + + // Binary + jedisCluster.zadd(bfoo, 1, ba); + jedisCluster.zadd(bfoo, 2, bb); + jedisCluster.zadd(bbar, 2, ba); + + ZParams bparams = new ZParams(); + bparams.weightsByDouble(2, 2.5); + bparams.aggregate(ZParams.Aggregate.SUM); + long bresult = jedisCluster.zinterstore(bdst, bparams, bfoo, bbar); + + assertEquals(1, bresult); + + Set bexpected = new LinkedHashSet(); + bexpected.add(new Tuple(ba, new Double(7))); + + assertEquals(bexpected, jedisCluster.zrangeWithScores(bdst, 0, 100)); + } + + @Test + public void zscan() { + jedisCluster.zadd("foo", 1, "a"); + jedisCluster.zadd("foo", 2, "b"); + + ScanResult result = jedisCluster.zscan("foo", SCAN_POINTER_START); + + assertEquals(SCAN_POINTER_START, result.getStringCursor()); + assertFalse(result.getResult().isEmpty()); + + // binary + jedisCluster.zadd(bfoo, 1, ba); + jedisCluster.zadd(bfoo, 1, bb); + + ScanResult bResult = jedisCluster.zscan(bfoo, SCAN_POINTER_START_BINARY); + + assertArrayEquals(SCAN_POINTER_START_BINARY, bResult.getCursorAsBytes()); + assertFalse(bResult.getResult().isEmpty()); + } + + @Test + public void zscanMatch() { + ScanParams params = new ScanParams(); + params.match("a*"); + + jedisCluster.zadd("foo", 2, "b"); + jedisCluster.zadd("foo", 1, "a"); + jedisCluster.zadd("foo", 11, "aa"); + ScanResult result = jedisCluster.zscan("foo", SCAN_POINTER_START, params); + + assertEquals(SCAN_POINTER_START, result.getStringCursor()); + assertFalse(result.getResult().isEmpty()); + + // binary + params = new ScanParams(); + params.match(bbarstar); + + jedisCluster.zadd(bfoo, 2, bbar1); + jedisCluster.zadd(bfoo, 1, bbar2); + jedisCluster.zadd(bfoo, 11, bbar3); + ScanResult bResult = jedisCluster.zscan(bfoo, SCAN_POINTER_START_BINARY, params); + + assertArrayEquals(SCAN_POINTER_START_BINARY, bResult.getCursorAsBytes()); + assertFalse(bResult.getResult().isEmpty()); + + } + + @Test + public void zscanCount() { + ScanParams params = new ScanParams(); + params.count(2); + + jedisCluster.zadd("foo", 1, "a1"); + jedisCluster.zadd("foo", 2, "a2"); + jedisCluster.zadd("foo", 3, "a3"); + jedisCluster.zadd("foo", 4, "a4"); + jedisCluster.zadd("foo", 5, "a5"); + + ScanResult result = jedisCluster.zscan("foo", SCAN_POINTER_START, params); + + assertFalse(result.getResult().isEmpty()); + + // binary + params = new ScanParams(); + params.count(2); + + jedisCluster.zadd(bfoo, 2, bbar1); + jedisCluster.zadd(bfoo, 1, bbar2); + jedisCluster.zadd(bfoo, 11, bbar3); + + ScanResult bResult = jedisCluster.zscan(bfoo, SCAN_POINTER_START_BINARY, params); + + assertFalse(bResult.getResult().isEmpty()); + } + + @Test + public void infinity() { + jedisCluster.zadd("key", Double.POSITIVE_INFINITY, "pos"); + assertEquals(Double.POSITIVE_INFINITY, jedisCluster.zscore("key", "pos"), 0d); + jedisCluster.zadd("key", Double.NEGATIVE_INFINITY, "neg"); + assertEquals(Double.NEGATIVE_INFINITY, jedisCluster.zscore("key", "neg"), 0d); + jedisCluster.zadd("key", 0d, "zero"); + + Set set = jedisCluster.zrangeWithScores("key", 0, -1); + Iterator itr = set.iterator(); + assertEquals(Double.NEGATIVE_INFINITY, itr.next().getScore(), 0d); + assertEquals(0d, itr.next().getScore(), 0d); + assertEquals(Double.POSITIVE_INFINITY, itr.next().getScore(), 0d); + } +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SortingCommandsTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SortingCommandsTest.java new file mode 100644 index 0000000..68a2e8c --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/SortingCommandsTest.java @@ -0,0 +1,294 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import org.junit.Test; +import redis.clients.jedis.SortingParams; + +import java.util.ArrayList; +import java.util.List; + +import static io.opentracing.contrib.redis.jediscluster.commands.TestKeys.*; +import static io.opentracing.contrib.redis.utils.AssertUtil.assertByteArrayListEquals; +import static org.junit.Assert.assertEquals; + +public class SortingCommandsTest extends JedisCommandTestBase { + + final byte[] b1 = { '1' }; + final byte[] b2 = { '2' }; + final byte[] b3 = { '3' }; + final byte[] b10 = { '1', '0' }; + + @Test + public void sort() { + jedisCluster.lpush("foo", "3"); + jedisCluster.lpush("foo", "2"); + jedisCluster.lpush("foo", "1"); + + List result = jedisCluster.sort("foo"); + + List expected = new ArrayList(); + expected.add("1"); + expected.add("2"); + expected.add("3"); + + assertEquals(expected, result); + + // Binary + jedisCluster.lpush(bfoo, b3); + jedisCluster.lpush(bfoo, b2); + jedisCluster.lpush(bfoo, b1); + + List bresult = jedisCluster.sort(bfoo); + + List bexpected = new ArrayList(); + bexpected.add(b1); + bexpected.add(b2); + bexpected.add(b3); + + assertByteArrayListEquals(bexpected, bresult); + } + +// @Test +// public void sortBy() { +// jedisCluster.lpush("foo", "2"); +// jedisCluster.lpush("foo", "3"); +// jedisCluster.lpush("foo", "1"); +// +// jedisCluster.set("bar1", "3"); +// jedisCluster.set("bar2", "2"); +// jedisCluster.set("bar3", "1"); +// +// SortingParams sp = new SortingParams(); +// sp.by("bar*"); +// +// List result = jedisCluster.sort("foo", sp); +// +// List expected = new ArrayList(); +// expected.add("3"); +// expected.add("2"); +// expected.add("1"); +// +// assertEquals(expected, result); +// +// // Binary +// jedisCluster.lpush(bfoo, b2); +// jedisCluster.lpush(bfoo, b3); +// jedisCluster.lpush(bfoo, b1); +// +// jedisCluster.set(bbar1, b3); +// jedisCluster.set(bbar2, b2); +// jedisCluster.set(bbar3, b1); +// +// SortingParams bsp = new SortingParams(); +// bsp.by(bbarstar); +// +// List bresult = jedisCluster.sort(bfoo, bsp); +// +// List bexpected = new ArrayList(); +// bexpected.add(b3); +// bexpected.add(b2); +// bexpected.add(b1); +// +// assertByteArrayListEquals(bexpected, bresult); +// +// } + + @Test + public void sortDesc() { + jedisCluster.lpush("foo", "3"); + jedisCluster.lpush("foo", "2"); + jedisCluster.lpush("foo", "1"); + + SortingParams sp = new SortingParams(); + sp.desc(); + + List result = jedisCluster.sort("foo", sp); + + List expected = new ArrayList(); + expected.add("3"); + expected.add("2"); + expected.add("1"); + + assertEquals(expected, result); + + // Binary + jedisCluster.lpush(bfoo, b3); + jedisCluster.lpush(bfoo, b2); + jedisCluster.lpush(bfoo, b1); + + SortingParams bsp = new SortingParams(); + bsp.desc(); + + List bresult = jedisCluster.sort(bfoo, bsp); + + List bexpected = new ArrayList(); + bexpected.add(b3); + bexpected.add(b2); + bexpected.add(b1); + + assertByteArrayListEquals(bexpected, bresult); + } + + @Test + public void sortLimit() { + for (int n = 10; n > 0; n--) { + jedisCluster.lpush("foo", String.valueOf(n)); + } + + SortingParams sp = new SortingParams(); + sp.limit(0, 3); + + List result = jedisCluster.sort("foo", sp); + + List expected = new ArrayList(); + expected.add("1"); + expected.add("2"); + expected.add("3"); + + assertEquals(expected, result); + + // Binary + jedisCluster.rpush(bfoo, new byte[] { (byte) '4' }); + jedisCluster.rpush(bfoo, new byte[] { (byte) '3' }); + jedisCluster.rpush(bfoo, new byte[] { (byte) '2' }); + jedisCluster.rpush(bfoo, new byte[] { (byte) '1' }); + + SortingParams bsp = new SortingParams(); + bsp.limit(0, 3); + + List bresult = jedisCluster.sort(bfoo, bsp); + + List bexpected = new ArrayList(); + bexpected.add(b1); + bexpected.add(b2); + bexpected.add(b3); + + assertByteArrayListEquals(bexpected, bresult); + } + + @Test + public void sortAlpha() { + jedisCluster.lpush("foo", "1"); + jedisCluster.lpush("foo", "2"); + jedisCluster.lpush("foo", "10"); + + SortingParams sp = new SortingParams(); + sp.alpha(); + + List result = jedisCluster.sort("foo", sp); + + List expected = new ArrayList(); + expected.add("1"); + expected.add("10"); + expected.add("2"); + + assertEquals(expected, result); + + // Binary + jedisCluster.lpush(bfoo, b1); + jedisCluster.lpush(bfoo, b2); + jedisCluster.lpush(bfoo, b10); + + SortingParams bsp = new SortingParams(); + bsp.alpha(); + + List bresult = jedisCluster.sort(bfoo, bsp); + + List bexpected = new ArrayList(); + bexpected.add(b1); + bexpected.add(b10); + bexpected.add(b2); + + assertByteArrayListEquals(bexpected, bresult); + } + +// @Test +// public void sortGet() { +// jedisCluster.lpush(foo, "1"); +// jedisCluster.lpush(foo, "2"); +// jedisCluster.lpush(foo, "10"); +// +// jedisCluster.set(bar1, "bar1"); +// jedisCluster.set(bar2, "bar2"); +// jedisCluster.set(bar10, "bar10"); +// +// jedisCluster.set(car1, "car1"); +// jedisCluster.set(car2, "car2"); +// jedisCluster.set(car10, "car10"); +// +// SortingParams sp = new SortingParams(); +// sp.get(carstar, barstar); +// +// List result = jedisCluster.sort(foo, sp); +// +// List expected = new ArrayList(); +// expected.add("car1"); +// expected.add("bar1"); +// expected.add("car2"); +// expected.add("bar2"); +// expected.add("car10"); +// expected.add("bar10"); +// +// assertEquals(expected, result); +// +// // Binary +// jedisCluster.lpush(bfoo, b1); +// jedisCluster.lpush(bfoo, b2); +// jedisCluster.lpush(bfoo, b10); +// +// jedisCluster.set(bbar1, bbar1); +// jedisCluster.set(bbar2, bbar2); +// jedisCluster.set(bbar10, bbar10); +// +// jedisCluster.set(bcar1, bcar1); +// jedisCluster.set(bcar2, bcar2); +// jedisCluster.set(bcar10, bcar10); +// +// SortingParams bsp = new SortingParams(); +// bsp.get(bcarstar, bbarstar); +// +// List bresult = jedisCluster.sort(bfoo, bsp); +// +// List bexpected = new ArrayList(); +// bexpected.add(bcar1); +// bexpected.add(bbar1); +// bexpected.add(bcar2); +// bexpected.add(bbar2); +// bexpected.add(bcar10); +// bexpected.add(bbar10); +// +// assertByteArrayListEquals(bexpected, bresult); +// } + + @Test + public void sortStore() { + jedisCluster.lpush(foo, "1"); + jedisCluster.lpush(foo, "2"); + jedisCluster.lpush(foo, "10"); + + long result = jedisCluster.sort(foo, dst); + + List expected = new ArrayList(); + expected.add("1"); + expected.add("2"); + expected.add("10"); + + assertEquals(3, result); + assertEquals(expected, jedisCluster.lrange(dst, 0, 1000)); + + // Binary + jedisCluster.lpush(bfoo, b1); + jedisCluster.lpush(bfoo, b2); + jedisCluster.lpush(bfoo, b10); + + long bresult = jedisCluster.sort(bfoo, bdst); + + List bexpected = new ArrayList(); + bexpected.add(b1); + bexpected.add(b2); + bexpected.add(b10); + + assertEquals(3, bresult); + assertByteArrayListEquals(bexpected, jedisCluster.lrange(bdst, 0, 1000)); + } + +} \ No newline at end of file diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/StringValuesCommandsTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/StringValuesCommandsTest.java new file mode 100644 index 0000000..d87c48b --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/StringValuesCommandsTest.java @@ -0,0 +1,230 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import org.junit.Test; +import redis.clients.jedis.exceptions.JedisDataException; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +public class StringValuesCommandsTest extends JedisCommandTestBase { + @Test + public void setAndGet() { + String key1 = "setAndGet:foo"; + String key2 = "setAndGet:bar"; + String status = jedisCluster.set(key1, key2); + assertEquals("OK", status); + + String value = jedisCluster.get(key1); + assertEquals(key2, value); + + assertNull(jedisCluster.get(key2)); + } + + @Test + public void getSet() { + String key1 = "getSet:foo"; + String key2 = "getSet:bar"; + + String value = jedisCluster.getSet(key1, key2); + assertNull(value); + value = jedisCluster.get(key1); + assertEquals(key2, value); + } + + @Test + public void mget() { + String key1 = "foo{mget}"; + String key2 = "bar{mget}"; + List values = jedisCluster.mget(key1, key2); + List expected = new ArrayList(); + expected.add(null); + expected.add(null); + + assertEquals(expected, values); + + jedisCluster.set(key1, key2); + + expected = new ArrayList(); + expected.add(key2); + expected.add(null); + values = jedisCluster.mget(key1, key2); + + assertEquals(expected, values); + + jedisCluster.set(key2, key1); + + expected = new ArrayList(); + expected.add(key2); + expected.add(key1); + values = jedisCluster.mget(key1, key2); + + assertEquals(expected, values); + } + + @Test + public void setnx() { + String key1 = "setnx:foo"; + String key2 = "setnx:bar"; + long status = jedisCluster.setnx(key1, key2); + assertEquals(1, status); + assertEquals(key2, jedisCluster.get(key1)); + + status = jedisCluster.setnx(key1, key2); + assertEquals(0, status); + assertEquals(key2, jedisCluster.get(key1)); + } + + @Test + public void setex() { + String status = jedisCluster.setex("foo", 20, "bar"); + assertEquals("OK", status); + long ttl = jedisCluster.ttl("foo"); + assertTrue(ttl > 0 && ttl <= 20); + } + + @Test + public void mset() { + String key1 = "foo{mset}"; + String key2 = "bar{mset}"; + String status = jedisCluster.mset(key1, "bar", key2, "foo"); + assertEquals("OK", status); + assertEquals("bar", jedisCluster.get(key1)); + assertEquals("foo", jedisCluster.get(key2)); + } + + @Test + public void msetnx() { + String key1 = "foo{msetnx}"; + String key2 = "bar{msetnx}"; + long status = jedisCluster.msetnx(key1, "bar", key2, "foo"); + assertEquals(1, status); + assertEquals("bar", jedisCluster.get(key1)); + assertEquals("foo", jedisCluster.get(key2)); + + status = jedisCluster.msetnx(key1, "bar1", key2, "foo2"); + assertEquals(0, status); + assertEquals("bar", jedisCluster.get(key1)); + assertEquals("foo", jedisCluster.get(key2)); + } + + @Test(expected = JedisDataException.class) + public void incrWrongValue() { + jedisCluster.set("foo", "bar"); + jedisCluster.incr("foo"); + } + + @Test + public void incr() { + long value = jedisCluster.incr("foo"); + assertEquals(1, value); + value = jedisCluster.incr("foo"); + assertEquals(2, value); + } + + @Test(expected = JedisDataException.class) + public void incrByWrongValue() { + jedisCluster.set("foo", "bar"); + jedisCluster.incrBy("foo", 2); + } + + @Test + public void incrBy() { + long value = jedisCluster.incrBy("foo", 2); + assertEquals(2, value); + value = jedisCluster.incrBy("foo", 2); + assertEquals(4, value); + } + + @Test(expected = JedisDataException.class) + public void incrByFloatWrongValue() { + jedisCluster.set("foo", "bar"); + jedisCluster.incrByFloat("foo", 2d); + } + + @Test(expected = JedisDataException.class) + public void decrWrongValue() { + jedisCluster.set("foo", "bar"); + jedisCluster.decr("foo"); + } + + @Test + public void decr() { + long value = jedisCluster.decr("foo"); + assertEquals(-1, value); + value = jedisCluster.decr("foo"); + assertEquals(-2, value); + } + + @Test(expected = JedisDataException.class) + public void decrByWrongValue() { + jedisCluster.set("foo", "bar"); + jedisCluster.decrBy("foo", 2); + } + + @Test + public void decrBy() { + long value = jedisCluster.decrBy("foo", 2); + assertEquals(-2, value); + value = jedisCluster.decrBy("foo", 2); + assertEquals(-4, value); + } + + @Test + public void append() { + long value = jedisCluster.append("foo", "bar"); + assertEquals(3, value); + assertEquals("bar", jedisCluster.get("foo")); + value = jedisCluster.append("foo", "bar"); + assertEquals(6, value); + assertEquals("barbar", jedisCluster.get("foo")); + } + + @Test + public void substr() { + jedisCluster.set("s", "This is a string"); + assertEquals("This", jedisCluster.substr("s", 0, 3)); + assertEquals("ing", jedisCluster.substr("s", -3, -1)); + assertEquals("This is a string", jedisCluster.substr("s", 0, -1)); + assertEquals(" string", jedisCluster.substr("s", 9, 100000)); + } + + @Test + public void strlen() { + jedisCluster.set("s", "This is a string"); + assertEquals("This is a string".length(), jedisCluster.strlen("s").intValue()); + } + + @Test + public void incrLargeNumbers() { + long value = jedisCluster.incr("foo"); + assertEquals(1, value); + assertEquals(1L + Integer.MAX_VALUE, (long) jedisCluster.incrBy("foo", Integer.MAX_VALUE)); + } + + @Test(expected = JedisDataException.class) + public void incrReallyLargeNumbers() { + jedisCluster.set("foo", Long.toString(Long.MAX_VALUE)); + long value = jedisCluster.incr("foo"); + assertEquals(Long.MIN_VALUE, value); + } + + @Test + public void incrByFloat() { + double value = jedisCluster.incrByFloat("foo", (double) 10.5); + assertEquals(10.5, value, 0.0); + value = jedisCluster.incrByFloat("foo", 0.1); + assertEquals(10.6, value, 0.0); + } + + @Test + public void psetex() { + String status = jedisCluster.psetex("foo", 20000, "bar"); + assertEquals("OK", status); + long ttl = jedisCluster.ttl("foo"); + assertTrue(ttl > 0 && ttl <= 20000); + } +} \ No newline at end of file diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/TestKeys.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/TestKeys.java new file mode 100644 index 0000000..c87f5e9 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/TestKeys.java @@ -0,0 +1,53 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import redis.clients.util.SafeEncoder; + +public class TestKeys { + public static final String foo = "{tag}foo"; + public static final String foo1 = "{tag}foo1"; + public static final String foo2 = "{tag}foo2"; + public static final String foo3 = "{tag}foo3"; + public static final String bar = "{tag}bar"; + public static final String bar1 = "{tag}bar1"; + public static final String bar2 = "{tag}bar2"; + public static final String bar3 = "{tag}bar3"; + public static final String bar10 = "{tag}bar10"; + public static final String foobar = "{tag}foobar"; + public static final String foostar = foo + "*"; + public static final String barstar = bar + "*"; + + public static final String Key_resultAnd = "{tag}resultAnd"; + public static final String Key_resultOr = "{tag}resultOr"; + public static final String Key_resultXor = "{tag}resultXor"; + public static final String Key_resultNot = "{tag}resultNot"; + + public static final byte[] bfoo = SafeEncoder.encode("{tag}bfoo"); + public static final byte[] bfoo1 = SafeEncoder.encode("{tag}bfoo1"); + public static final byte[] bfoo2 = SafeEncoder.encode("{tag}bfoo2"); + public static final byte[] bfoo3 = SafeEncoder.encode("{tag}bfoo3"); + + public static final byte[] bbar = SafeEncoder.encode("{tag}bbar"); + public static final byte[] bbar1 = SafeEncoder.encode("{tag}bbar1"); + public static final byte[] bbar10 = SafeEncoder.encode("{tag}bbar10"); + public static final byte[] bbar2 = SafeEncoder.encode("{tag}bbar2"); + public static final byte[] bbar3 = SafeEncoder.encode("{tag}bbar3"); + public static final byte[] bfoobar = SafeEncoder.encode("{tag}bfoobar"); + public static final byte[] bfoostar = SafeEncoder.encode("{tag}bfoo*"); + public static final byte[] bbarstar = SafeEncoder.encode("{tag}bbar*"); + + public static final String car = "{tag}car"; + public static final String car1 = "{tag}car1"; + public static final String car2 = "{tag}car2"; + public static final String car3 = "{tag}car3"; + public static final String car10 = "{tag}car10"; + public static final String carstar = "{tag}car*"; + public static final byte[] bcar = SafeEncoder.encode("{tag}bcar"); + public static final byte[] bcar1 = SafeEncoder.encode("{tag}bcar1"); + public static final byte[] bcar2 = SafeEncoder.encode("{tag}bcar2"); + public static final byte[] bcar10 = SafeEncoder.encode("{tag}bcar10"); + public static final byte[] bcarstar = SafeEncoder.encode("{tag}bcar*"); + + public static final String dst = "{tag}dst"; + public static final byte[] bdst = SafeEncoder.encode("{tag}bdst"); + +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/VariadicCommandsTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/VariadicCommandsTest.java new file mode 100644 index 0000000..cc7a811 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/jediscluster/commands/VariadicCommandsTest.java @@ -0,0 +1,191 @@ +package io.opentracing.contrib.redis.jediscluster.commands; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static io.opentracing.contrib.redis.jediscluster.commands.TestKeys.*; +import static io.opentracing.contrib.redis.utils.AssertUtil.assertByteArrayListEquals; +import static io.opentracing.contrib.redis.utils.AssertUtil.assertByteArraySetEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +public class VariadicCommandsTest extends JedisCommandTestBase { + + @Test + public void hdel() { + Map hash = new HashMap(); + hash.put("bar", "car"); + hash.put("car", "bar"); + hash.put("foo2", "bar"); + jedisCluster.hmset("foo", hash); + + assertEquals(0, jedisCluster.hdel("bar", "foo", "foo1").intValue()); + assertEquals(0, jedisCluster.hdel("foo", "foo", "foo1").intValue()); + assertEquals(2, jedisCluster.hdel("foo", "bar", "foo2").intValue()); + assertNull(jedisCluster.hget("foo", "bar")); + + // Binary + Map bhash = new HashMap(); + bhash.put(bbar, bcar); + bhash.put(bcar, bbar); + bhash.put(bfoo2, bbar); + jedisCluster.hmset(bfoo, bhash); + + assertEquals(0, jedisCluster.hdel(bbar, bfoo, bfoo1).intValue()); + assertEquals(0, jedisCluster.hdel(bfoo, bfoo, bfoo1).intValue()); + assertEquals(2, jedisCluster.hdel(bfoo, bbar, bfoo2).intValue()); + assertNull(jedisCluster.hget(bfoo, bbar)); + + } + + @Test + public void rpush() { + long size = jedisCluster.rpush("foo", "bar", "foo"); + assertEquals(2, size); + + List expected = new ArrayList(); + expected.add("bar"); + expected.add("foo"); + + List values = jedisCluster.lrange("foo", 0, -1); + assertEquals(expected, values); + + // Binary + size = jedisCluster.rpush(bfoo, bbar, bfoo); + assertEquals(2, size); + + List bexpected = new ArrayList(); + bexpected.add(bbar); + bexpected.add(bfoo); + + List bvalues = jedisCluster.lrange(bfoo, 0, -1); + assertByteArrayListEquals(bexpected, bvalues); + + } + + @Test + public void lpush() { + long size = jedisCluster.lpush("foo", "bar", "foo"); + assertEquals(2, size); + + List expected = new ArrayList(); + expected.add("foo"); + expected.add("bar"); + + List values = jedisCluster.lrange("foo", 0, -1); + assertEquals(expected, values); + + // Binary + size = jedisCluster.lpush(bfoo, bbar, bfoo); + assertEquals(2, size); + + List bexpected = new ArrayList(); + bexpected.add(bfoo); + bexpected.add(bbar); + + List bvalues = jedisCluster.lrange(bfoo, 0, -1); + assertByteArrayListEquals(bexpected, bvalues); + + } + + @Test + public void sadd() { + long status = jedisCluster.sadd("foo", "bar", "foo1"); + assertEquals(2, status); + + status = jedisCluster.sadd("foo", "bar", "car"); + assertEquals(1, status); + + status = jedisCluster.sadd("foo", "bar", "foo1"); + assertEquals(0, status); + + status = jedisCluster.sadd(bfoo, bbar, bfoo1); + assertEquals(2, status); + + status = jedisCluster.sadd(bfoo, bbar, bcar); + assertEquals(1, status); + + status = jedisCluster.sadd(bfoo, bbar, bfoo1); + assertEquals(0, status); + + } + + @Test + public void zadd() { + Map scoreMembers = new HashMap(); + scoreMembers.put("bar", 1d); + scoreMembers.put("foo", 10d); + + long status = jedisCluster.zadd("foo", scoreMembers); + assertEquals(2, status); + + scoreMembers.clear(); + scoreMembers.put("car", 0.1d); + scoreMembers.put("bar", 2d); + + status = jedisCluster.zadd("foo", scoreMembers); + assertEquals(1, status); + + Map bscoreMembers = new HashMap(); + bscoreMembers.put(bbar, 1d); + bscoreMembers.put(bfoo, 10d); + + status = jedisCluster.zadd(bfoo, bscoreMembers); + assertEquals(2, status); + + bscoreMembers.clear(); + bscoreMembers.put(bcar, 0.1d); + bscoreMembers.put(bbar, 2d); + + status = jedisCluster.zadd(bfoo, bscoreMembers); + assertEquals(1, status); + + } + + @Test + public void zrem() { + jedisCluster.zadd("foo", 1d, "bar"); + jedisCluster.zadd("foo", 2d, "car"); + jedisCluster.zadd("foo", 3d, "foo1"); + + long status = jedisCluster.zrem("foo", "bar", "car"); + + Set expected = new LinkedHashSet(); + expected.add("foo1"); + + assertEquals(2, status); + assertEquals(expected, jedisCluster.zrange("foo", 0, 100)); + + status = jedisCluster.zrem("foo", "bar", "car"); + assertEquals(0, status); + + status = jedisCluster.zrem("foo", "bar", "foo1"); + assertEquals(1, status); + + // Binary + jedisCluster.zadd(bfoo, 1d, bbar); + jedisCluster.zadd(bfoo, 2d, bcar); + jedisCluster.zadd(bfoo, 3d, bfoo1); + + status = jedisCluster.zrem(bfoo, bbar, bcar); + + Set bexpected = new LinkedHashSet(); + bexpected.add(bfoo); + + assertEquals(2, status); + assertByteArraySetEquals(bexpected, jedisCluster.zrange(bfoo, 0, 100)); + + status = jedisCluster.zrem(bfoo, bbar, bcar); + assertEquals(0, status); + + status = jedisCluster.zrem(bfoo, bbar, bfoo1); + assertEquals(1, status); + + } +} \ No newline at end of file diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/AssertUtil.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/AssertUtil.java new file mode 100644 index 0000000..1d3e0d3 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/AssertUtil.java @@ -0,0 +1,39 @@ +package io.opentracing.contrib.redis.utils; + +import org.junit.ComparisonFailure; + +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + +public class AssertUtil { + + public static void assertByteArrayListEquals(List expected, List actual) { + assertEquals(expected.size(), actual.size()); + for (int n = 0; n < expected.size(); n++) { + assertArrayEquals(expected.get(n), actual.get(n)); + } + } + + public static void assertByteArraySetEquals(Set expected, Set actual) { + assertEquals(expected.size(), actual.size()); + Iterator e = expected.iterator(); + while (e.hasNext()) { + byte[] next = e.next(); + boolean contained = false; + for (byte[] element : expected) { + if (Arrays.equals(next, element)) { + contained = true; + } + } + if (!contained) { + throw new ComparisonFailure("element is missing", Arrays.toString(next), actual.toString()); + } + } + } + +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/ByteArrayComparatorTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/ByteArrayComparatorTest.java new file mode 100644 index 0000000..84323fa --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/ByteArrayComparatorTest.java @@ -0,0 +1,29 @@ +package io.opentracing.contrib.redis.utils; + +import org.junit.Test; +import redis.clients.util.ByteArrayComparator; +import redis.clients.util.SafeEncoder; + +import static org.junit.Assert.assertTrue; + +public class ByteArrayComparatorTest { + + @Test + public void test() { + byte[] foo = SafeEncoder.encode("foo"); + byte[] foo2 = SafeEncoder.encode("foo"); + byte[] bar = SafeEncoder.encode("bar"); + + assertTrue(ByteArrayComparator.compare(foo, foo2) == 0); + assertTrue(ByteArrayComparator.compare(foo, bar) > 0); + assertTrue(ByteArrayComparator.compare(bar, foo) < 0); + } + + @Test + public void testPrefix() { + byte[] foo = SafeEncoder.encode("foo"); + byte[] fooo = SafeEncoder.encode("fooo"); + assertTrue(ByteArrayComparator.compare(foo, fooo) < 0); + assertTrue(ByteArrayComparator.compare(fooo, foo) > 0); + } +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/ClientKillerUtil.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/ClientKillerUtil.java new file mode 100644 index 0000000..c2f6ea7 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/ClientKillerUtil.java @@ -0,0 +1,23 @@ +package io.opentracing.contrib.redis.utils; + +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.Jedis; + +public class ClientKillerUtil { + public static void killClient(Jedis jedis, String clientName) { + for (String clientInfo : jedis.clientList().split("\n")) { + if (clientInfo.contains("name=" + clientName)) { + // Ugly, but cmon, it's a test. + String hostAndPortString = clientInfo.split(" ")[1].split("=")[1]; + String[] hostAndPortParts = HostAndPort.extractParts(hostAndPortString); + // It would be better if we kill the client by Id as it's safer but jedis doesn't implement + // the command yet. + jedis.clientKill(hostAndPortParts[0] + ":" + hostAndPortParts[1]); + } + } + } + + public static void tagClient(Jedis j, String name) { + j.clientSetname(name); + } +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/FailoverAbortedException.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/FailoverAbortedException.java new file mode 100644 index 0000000..5db4819 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/FailoverAbortedException.java @@ -0,0 +1,17 @@ +package io.opentracing.contrib.redis.utils; + +public class FailoverAbortedException extends RuntimeException { + private static final long serialVersionUID = 1925110762858409954L; + + public FailoverAbortedException(String message) { + super(message); + } + + public FailoverAbortedException(Throwable cause) { + super(cause); + } + + public FailoverAbortedException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisClusterCRC16Test.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisClusterCRC16Test.java new file mode 100644 index 0000000..0e28f0f --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisClusterCRC16Test.java @@ -0,0 +1,45 @@ +package io.opentracing.contrib.redis.utils; + +import org.junit.Test; +import redis.clients.util.JedisClusterCRC16; +import redis.clients.util.SafeEncoder; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import static org.junit.Assert.assertEquals; + +public class JedisClusterCRC16Test { + + @Test + public void testGetCRC16() throws Exception { + Map solutions = prepareSolutionSet(); + + for (Entry entry : solutions.entrySet()) { + // string version + assertEquals(entry.getValue().intValue(), JedisClusterCRC16.getCRC16(entry.getKey())); + + // byte array version + assertEquals(entry.getValue().intValue(), + JedisClusterCRC16.getCRC16(SafeEncoder.encode(entry.getKey()))); + } + } + + @Test + public void testGetSlot() { + System.out.println(JedisClusterCRC16.getCRC16("aist:ecocar:track:JP2022110359727900201318351174_2")); + assertEquals(7186, JedisClusterCRC16.getSlot("51")); + } + + private Map prepareSolutionSet() { + Map solutionMap = new HashMap(); + solutionMap.put("", 0x0); + solutionMap.put("123456789", 0x31C3); + solutionMap.put("sfger132515", 0xA45C); + solutionMap.put("hae9Napahngaikeethievubaibogiech", 0x58CE); + solutionMap.put("AAAAAAAAAAAAAAAAAAAAAA", 0x92cd); + solutionMap.put("Hello, World!", 0x4FD6); + return solutionMap; + } +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisClusterTestUtil.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisClusterTestUtil.java new file mode 100644 index 0000000..2d3aa18 --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisClusterTestUtil.java @@ -0,0 +1,80 @@ +package io.opentracing.contrib.redis.utils; + +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.exceptions.JedisException; + +public class JedisClusterTestUtil { + public static void waitForClusterReady(Jedis... nodes) throws InterruptedException { + boolean clusterOk = false; + while (!clusterOk) { + boolean isOk = true; + for (Jedis node : nodes) { + if (!node.clusterInfo().split("\n")[0].contains("ok")) { + isOk = false; + break; + } + } + + if (isOk) { + clusterOk = true; + } + + Thread.sleep(50); + } + } + + public static String getNodeId(String infoOutput) { + for (String infoLine : infoOutput.split("\n")) { + if (infoLine.contains("myself")) { + return infoLine.split(" ")[0]; + } + } + return ""; + } + + public static String getNodeId(String infoOutput, HostAndPort node) { + + for (String infoLine : infoOutput.split("\n")) { + if (infoLine.contains(node.toString())) { + return infoLine.split(" ")[0]; + } + } + return ""; + } + + public static void assertNodeIsKnown(Jedis node, String targetNodeId, int timeoutMs) { + assertNodeRecognizedStatus(node, targetNodeId, true, timeoutMs); + } + + public static void assertNodeIsUnknown(Jedis node, String targetNodeId, int timeoutMs) { + assertNodeRecognizedStatus(node, targetNodeId, false, timeoutMs); + } + + private static void assertNodeRecognizedStatus(Jedis node, String targetNodeId, + boolean shouldRecognized, int timeoutMs) { + int sleepInterval = 100; + for (int sleepTime = 0; sleepTime <= timeoutMs; sleepTime += sleepInterval) { + boolean known = isKnownNode(node, targetNodeId); + if (shouldRecognized == known) return; + + try { + Thread.sleep(sleepInterval); + } catch (InterruptedException e) { + } + } + + throw new JedisException("Node recognize check error"); + } + + private static boolean isKnownNode(Jedis node, String nodeId) { + String infoOutput = node.clusterNodes(); + for (String infoLine : infoOutput.split("\n")) { + if (infoLine.contains(nodeId)) { + return true; + } + } + return false; + } + +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisSentinelTestUtil.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisSentinelTestUtil.java new file mode 100644 index 0000000..facd12d --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisSentinelTestUtil.java @@ -0,0 +1,41 @@ +package io.opentracing.contrib.redis.utils; + +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPubSub; + +import java.util.concurrent.atomic.AtomicReference; + +public class JedisSentinelTestUtil { + public static HostAndPort waitForNewPromotedMaster(final String masterName, + final Jedis sentinelJedis, final Jedis commandJedis) throws InterruptedException { + + final AtomicReference newmaster = new AtomicReference(""); + + sentinelJedis.psubscribe(new JedisPubSub() { + + @Override + public void onPMessage(String pattern, String channel, String message) { + if (channel.equals("+switch-master")) { + newmaster.set(message); + punsubscribe(); + } else if (channel.startsWith("-failover-abort")) { + punsubscribe(); + throw new FailoverAbortedException("Unfortunately sentinel cannot failover..." + + " reason(channel) : " + channel + " / message : " + message); + } + } + + @Override + public void onPSubscribe(String pattern, int subscribedChannels) { + commandJedis.sentinelFailover(masterName); + } + }, "*"); + + String[] chunks = newmaster.get().split(" "); + HostAndPort newMaster = new HostAndPort(chunks[3], Integer.parseInt(chunks[4])); + + return newMaster; + } + +} diff --git a/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisURIHelperTest.java b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisURIHelperTest.java new file mode 100644 index 0000000..be8a82a --- /dev/null +++ b/opentracing-redis-jedis/src/test/java/io/opentracing/contrib/redis/utils/JedisURIHelperTest.java @@ -0,0 +1,53 @@ +package io.opentracing.contrib.redis.utils; + +import org.junit.Test; +import redis.clients.util.JedisURIHelper; + +import java.net.URI; +import java.net.URISyntaxException; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; + +public class JedisURIHelperTest { + + @Test + public void shouldGetPasswordFromURIWithCredentials() throws URISyntaxException { + URI uri = new URI("redis://user:password@host:9000/0"); + assertEquals("password", JedisURIHelper.getPassword(uri)); + } + + @Test + public void shouldReturnNullIfURIDoesNotHaveCredentials() throws URISyntaxException { + URI uri = new URI("redis://host:9000/0"); + assertNull(JedisURIHelper.getPassword(uri)); + } + + @Test + public void shouldGetDbFromURIWithCredentials() throws URISyntaxException { + URI uri = new URI("redis://user:password@host:9000/3"); + assertEquals(3, JedisURIHelper.getDBIndex(uri)); + } + + @Test + public void shouldGetDbFromURIWithoutCredentials() throws URISyntaxException { + URI uri = new URI("redis://host:9000/4"); + assertEquals(4, JedisURIHelper.getDBIndex(uri)); + } + + @Test + public void shouldGetDefaultDbFromURIIfNoDbWasSpecified() throws URISyntaxException { + URI uri = new URI("redis://host:9000"); + assertEquals(0, JedisURIHelper.getDBIndex(uri)); + } + + @Test + public void shouldValidateInvalidURIs() throws URISyntaxException { + assertFalse(JedisURIHelper.isValid(new URI("host:9000"))); + assertFalse(JedisURIHelper.isValid(new URI("user:password@host:9000/0"))); + assertFalse(JedisURIHelper.isValid(new URI("host:9000/0"))); + assertFalse(JedisURIHelper.isValid(new URI("redis://host/0"))); + } + +}