From: Pieter Noordhuis Date: Tue, 15 Jun 2010 20:40:21 +0000 (+0200) Subject: initial basic pub/sub tests X-Git-Url: https://git.saurik.com/redis.git/commitdiff_plain/4589a823fd3da534ee3e80870ad2de86a23c3361?ds=inline initial basic pub/sub tests --- diff --git a/tests/support/redis.tcl b/tests/support/redis.tcl index 338dcf77..7c7c65c6 100644 --- a/tests/support/redis.tcl +++ b/tests/support/redis.tcl @@ -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) {} } diff --git a/tests/test_helper.tcl b/tests/test_helper.tcl index dac91bef..59470e64 100644 --- a/tests/test_helper.tcl +++ b/tests/test_helper.tcl @@ -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} diff --git a/tests/unit/pubsub.tcl b/tests/unit/pubsub.tcl new file mode 100644 index 00000000..10af8585 --- /dev/null +++ b/tests/unit/pubsub.tcl @@ -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] + } +} \ No newline at end of file