futriix/tests/unit/pubsub.tcl
2010-06-16 11:01:42 +02:00

45 lines
1.6 KiB
Tcl

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]
}
}