redis/tests/unit/pubsub.tcl

45 lines
1.6 KiB
Tcl
Raw Normal View History

2010-06-15 22:40:21 +02:00
start_server {tags {"pubsub"}} {
test "PUBLISH when no one is listening" {
assert_equal 0 [r publish chan hello]
}
test "SUBSCRIBE basics" {
set rd1 [redis_deferring_client]
set rd2 [redis_deferring_client]
# subscribe first client to two channels
$rd1 subscribe chan1 chan2
assert_equal {subscribe chan1 1} [$rd1 read]
assert_equal {subscribe chan2 2} [$rd1 read]
# publish on both channels
assert_equal 1 [r publish chan1 hello]
assert_equal 1 [r publish chan2 world]
assert_equal {message chan1 hello} [$rd1 read]
assert_equal {message chan2 world} [$rd1 read]
# subscribe second client to one channel
$rd2 subscribe chan1
assert_equal {subscribe chan1 1} [$rd2 read]
# publish on channel with two subscribers
assert_equal 2 [r publish chan1 hello]
assert_equal {message chan1 hello} [$rd1 read]
assert_equal {message chan1 hello} [$rd2 read]
# unsubscribe first client from all channels
$rd1 unsubscribe
set msg [$rd1 read]
assert_equal "unsubscribe" [lindex $msg 0]
assert_match "chan*" [lindex $msg 1]
assert_match 1 [lindex $msg 2]
set msg [$rd1 read]
assert_equal "unsubscribe" [lindex $msg 0]
assert_match "chan*" [lindex $msg 1]
assert_match 0 [lindex $msg 2]
# publish on channel with only remaining subscriber
assert_equal 1 [r publish chan1 hello]
assert_equal {message chan1 hello} [$rd2 read]
}
}