summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2013-01-28 13:04:23 +0100
committerantirez <antirez@gmail.com>2013-01-28 13:15:22 +0100
commitd2b27f1d96a60bcfad48c5ae659741241559662b (patch)
tree43597ffb293d10094fd5f245dfc85d4b86de3ec4 /tests
parent4dfb5752e0714228ff6fb0a2728ee03638ac232f (diff)
downloadredis-d2b27f1d96a60bcfad48c5ae659741241559662b.tar.gz
Tests for keyspace notifications.
Diffstat (limited to 'tests')
-rw-r--r--tests/unit/pubsub.tcl156
1 files changed, 155 insertions, 1 deletions
diff --git a/tests/unit/pubsub.tcl b/tests/unit/pubsub.tcl
index 769151600..901668851 100644
--- a/tests/unit/pubsub.tcl
+++ b/tests/unit/pubsub.tcl
@@ -193,7 +193,7 @@ start_server {tags {"pubsub"}} {
$rd1 close
}
- test "PUNSUBSCRIBE and UNSUBSCRIBE should always reply." {
+ test "PUNSUBSCRIBE and UNSUBSCRIBE should always reply" {
# Make sure we are not subscribed to any channel at all.
r punsubscribe
r unsubscribe
@@ -202,4 +202,158 @@ start_server {tags {"pubsub"}} {
set reply2 [r unsubscribe]
concat $reply1 $reply2
} {punsubscribe {} 0 unsubscribe {} 0}
+
+ ### Keyspace events notification tests
+
+ test "Keyspace notifications: we receive keyspace notifications" {
+ r config set notify-keyspace-events KA
+ set rd1 [redis_deferring_client]
+ assert_equal {1} [psubscribe $rd1 *]
+ r set foo bar
+ assert_equal {pmessage * __keyspace@9__:foo set} [$rd1 read]
+ $rd1 close
+ }
+
+ test "Keyspace notifications: we receive keyevent notifications" {
+ r config set notify-keyspace-events EA
+ set rd1 [redis_deferring_client]
+ assert_equal {1} [psubscribe $rd1 *]
+ r set foo bar
+ assert_equal {pmessage * __keyevent@9__:set foo} [$rd1 read]
+ $rd1 close
+ }
+
+ test "Keyspace notifications: we can receive both kind of events" {
+ r config set notify-keyspace-events KEA
+ set rd1 [redis_deferring_client]
+ assert_equal {1} [psubscribe $rd1 *]
+ r set foo bar
+ assert_equal {pmessage * __keyspace@9__:foo set} [$rd1 read]
+ assert_equal {pmessage * __keyevent@9__:set foo} [$rd1 read]
+ $rd1 close
+ }
+
+ test "Keyspace notifications: we are able to mask events" {
+ r config set notify-keyspace-events KEl
+ r del mylist
+ set rd1 [redis_deferring_client]
+ assert_equal {1} [psubscribe $rd1 *]
+ r set foo bar
+ r lpush mylist a
+ # No notification for set, because only list commands are enabled.
+ assert_equal {pmessage * __keyspace@9__:mylist lpush} [$rd1 read]
+ assert_equal {pmessage * __keyevent@9__:lpush mylist} [$rd1 read]
+ $rd1 close
+ }
+
+ test "Keyspace notifications: general events test" {
+ r config set notify-keyspace-events KEg
+ set rd1 [redis_deferring_client]
+ assert_equal {1} [psubscribe $rd1 *]
+ r set foo bar
+ r expire foo 1
+ r del foo
+ assert_equal {pmessage * __keyspace@9__:foo expire} [$rd1 read]
+ assert_equal {pmessage * __keyevent@9__:expire foo} [$rd1 read]
+ assert_equal {pmessage * __keyspace@9__:foo del} [$rd1 read]
+ assert_equal {pmessage * __keyevent@9__:del foo} [$rd1 read]
+ $rd1 close
+ }
+
+ test "Keyspace notifications: list events test" {
+ r config set notify-keyspace-events KEl
+ r del mylist
+ set rd1 [redis_deferring_client]
+ assert_equal {1} [psubscribe $rd1 *]
+ r lpush mylist a
+ r rpush mylist a
+ r rpop mylist
+ assert_equal {pmessage * __keyspace@9__:mylist lpush} [$rd1 read]
+ assert_equal {pmessage * __keyevent@9__:lpush mylist} [$rd1 read]
+ assert_equal {pmessage * __keyspace@9__:mylist rpush} [$rd1 read]
+ assert_equal {pmessage * __keyevent@9__:rpush mylist} [$rd1 read]
+ assert_equal {pmessage * __keyspace@9__:mylist rpop} [$rd1 read]
+ assert_equal {pmessage * __keyevent@9__:rpop mylist} [$rd1 read]
+ $rd1 close
+ }
+
+ test "Keyspace notifications: set events test" {
+ r config set notify-keyspace-events Ks
+ r del myset
+ set rd1 [redis_deferring_client]
+ assert_equal {1} [psubscribe $rd1 *]
+ r sadd myset a b c d
+ r srem myset x
+ r sadd myset x y z
+ r srem myset x
+ assert_equal {pmessage * __keyspace@9__:myset sadd} [$rd1 read]
+ assert_equal {pmessage * __keyspace@9__:myset sadd} [$rd1 read]
+ assert_equal {pmessage * __keyspace@9__:myset srem} [$rd1 read]
+ $rd1 close
+ }
+
+ test "Keyspace notifications: zset events test" {
+ r config set notify-keyspace-events Kz
+ r del myzset
+ set rd1 [redis_deferring_client]
+ assert_equal {1} [psubscribe $rd1 *]
+ r zadd myzset 1 a 2 b
+ r zrem myzset x
+ r zadd myzset 3 x 4 y 5 z
+ r zrem myzset x
+ assert_equal {pmessage * __keyspace@9__:myzset zadd} [$rd1 read]
+ assert_equal {pmessage * __keyspace@9__:myzset zadd} [$rd1 read]
+ assert_equal {pmessage * __keyspace@9__:myzset zrem} [$rd1 read]
+ $rd1 close
+ }
+
+ test "Keyspace notifications: hash events test" {
+ r config set notify-keyspace-events Kh
+ r del myhash
+ set rd1 [redis_deferring_client]
+ assert_equal {1} [psubscribe $rd1 *]
+ r hmset myhash yes 1 no 0
+ r hincrby myhash yes 10
+ assert_equal {pmessage * __keyspace@9__:myhash hset} [$rd1 read]
+ assert_equal {pmessage * __keyspace@9__:myhash hincrby} [$rd1 read]
+ $rd1 close
+ }
+
+ test "Keyspace notifications: expired events (triggered expire)" {
+ r config set notify-keyspace-events Ex
+ r del foo
+ set rd1 [redis_deferring_client]
+ assert_equal {1} [psubscribe $rd1 *]
+ r psetex foo 100 1
+ wait_for_condition 50 100 {
+ [r exists foo] == 0
+ } else {
+ fail "Key does not expire?!"
+ }
+ assert_equal {pmessage * __keyevent@9__:expired foo} [$rd1 read]
+ $rd1 close
+ }
+
+ test "Keyspace notifications: expired events (background expire)" {
+ r config set notify-keyspace-events Ex
+ r del foo
+ set rd1 [redis_deferring_client]
+ assert_equal {1} [psubscribe $rd1 *]
+ r psetex foo 100 1
+ assert_equal {pmessage * __keyevent@9__:expired foo} [$rd1 read]
+ $rd1 close
+ }
+
+ test "Keyspace notifications: evicted events" {
+ r config set notify-keyspace-events Ee
+ r config set maxmemory-policy allkeys-lru
+ r flushdb
+ set rd1 [redis_deferring_client]
+ assert_equal {1} [psubscribe $rd1 *]
+ r set foo bar
+ r config set maxmemory 1
+ assert_equal {pmessage * __keyevent@9__:evicted foo} [$rd1 read]
+ r config set maxmemory 0
+ $rd1 close
+ }
}