initial basic pub/sub tests

This commit is contained in:
Pieter Noordhuis 2010-06-15 22:40:21 +02:00
parent 676740a960
commit 4589a823fd
3 changed files with 47 additions and 1 deletions

View File

@ -41,7 +41,7 @@ array set ::redis::multibulkarg {}
# Flag commands requiring last argument as a bulk write operation
foreach redis_bulk_cmd {
set setnx rpush lpush rpushx lpushx linsert lset lrem sadd srem sismember echo getset smove zadd zrem zscore zincrby append zrank zrevrank hget hdel hexists setex
set setnx rpush lpush rpushx lpushx linsert lset lrem sadd srem sismember echo getset smove zadd zrem zscore zincrby append zrank zrevrank hget hdel hexists setex publish
} {
set ::redis::bulkarg($redis_bulk_cmd) {}
}

View File

@ -88,6 +88,7 @@ proc main {} {
execute_tests "unit/cas"
execute_tests "integration/replication"
execute_tests "integration/aof"
execute_tests "unit/pubsub"
# run tests with VM enabled
set ::global_overrides {vm-enabled yes}

45
tests/unit/pubsub.tcl Normal file
View File

@ -0,0 +1,45 @@
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]
}
}