Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
d2b27f1d
Commit
d2b27f1d
authored
Jan 28, 2013
by
antirez
Browse files
Tests for keyspace notifications.
parent
4dfb5752
Changes
1
Show whitespace changes
Inline
Side-by-side
tests/unit/pubsub.tcl
View file @
d2b27f1d
...
@@ -193,7 +193,7 @@ start_server {tags {"pubsub"}} {
...
@@ -193,7 +193,7 @@ start_server {tags {"pubsub"}} {
$rd1 close
$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.
# Make sure we are not subscribed to any channel at all.
r punsubscribe
r punsubscribe
r unsubscribe
r unsubscribe
...
@@ -202,4 +202,158 @@ start_server {tags {"pubsub"}} {
...
@@ -202,4 +202,158 @@ start_server {tags {"pubsub"}} {
set reply2
[
r unsubscribe
]
set reply2
[
r unsubscribe
]
concat $reply1 $reply2
concat $reply1 $reply2
}
{
punsubscribe
{}
0 unsubscribe
{}
0
}
}
{
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
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment