mirror of
https://github.com/fluencelabs/redis
synced 2025-06-30 09:21:34 +00:00
Merge remote branch 'pietern/brpoplpush'
This commit is contained in:
@ -127,8 +127,141 @@ start_server {
|
||||
assert_equal 0 [r llen blist1]
|
||||
assert_equal 1 [r llen blist2]
|
||||
}
|
||||
|
||||
test "BRPOPLPUSH - $type" {
|
||||
r del target
|
||||
|
||||
set rd [redis_deferring_client]
|
||||
create_$type blist "a b $large c d"
|
||||
|
||||
$rd brpoplpush blist target 1
|
||||
assert_equal d [$rd read]
|
||||
|
||||
assert_equal d [r rpop target]
|
||||
assert_equal "a b $large c" [r lrange blist 0 -1]
|
||||
}
|
||||
}
|
||||
|
||||
test "BRPOPLPUSH with zero timeout should block indefinitely" {
|
||||
set rd [redis_deferring_client]
|
||||
r del blist target
|
||||
$rd brpoplpush blist target 0
|
||||
after 1000
|
||||
r rpush blist foo
|
||||
assert_equal foo [$rd read]
|
||||
assert_equal {foo} [r lrange target 0 -1]
|
||||
}
|
||||
|
||||
test "BRPOPLPUSH with a client BLPOPing the target list" {
|
||||
set rd [redis_deferring_client]
|
||||
set rd2 [redis_deferring_client]
|
||||
r del blist target
|
||||
$rd2 blpop target 0
|
||||
$rd brpoplpush blist target 0
|
||||
after 1000
|
||||
r rpush blist foo
|
||||
assert_equal foo [$rd read]
|
||||
assert_equal {target foo} [$rd2 read]
|
||||
assert_equal 0 [r exists target]
|
||||
}
|
||||
|
||||
test "BRPOPLPUSH with wrong source type" {
|
||||
set rd [redis_deferring_client]
|
||||
r del blist target
|
||||
r set blist nolist
|
||||
$rd brpoplpush blist target 1
|
||||
assert_error "ERR*wrong kind*" {$rd read}
|
||||
}
|
||||
|
||||
test "BRPOPLPUSH with wrong destination type" {
|
||||
set rd [redis_deferring_client]
|
||||
r del blist target
|
||||
r set target nolist
|
||||
r lpush blist foo
|
||||
$rd brpoplpush blist target 1
|
||||
assert_error "ERR*wrong kind*" {$rd read}
|
||||
|
||||
set rd [redis_deferring_client]
|
||||
r del blist target
|
||||
r set target nolist
|
||||
$rd brpoplpush blist target 0
|
||||
after 1000
|
||||
r rpush blist foo
|
||||
assert_error "ERR*wrong kind*" {$rd read}
|
||||
assert_equal {foo} [r lrange blist 0 -1]
|
||||
}
|
||||
|
||||
test "BRPOPLPUSH with multiple blocked clients" {
|
||||
set rd1 [redis_deferring_client]
|
||||
set rd2 [redis_deferring_client]
|
||||
r del blist target1 target2
|
||||
r set target1 nolist
|
||||
$rd1 brpoplpush blist target1 0
|
||||
$rd2 brpoplpush blist target2 0
|
||||
r lpush blist foo
|
||||
|
||||
assert_error "ERR*wrong kind*" {$rd1 read}
|
||||
assert_equal {foo} [$rd2 read]
|
||||
assert_equal {foo} [r lrange target2 0 -1]
|
||||
}
|
||||
|
||||
test "Linked BRPOPLPUSH" {
|
||||
set rd1 [redis_deferring_client]
|
||||
set rd2 [redis_deferring_client]
|
||||
|
||||
r del list1 list2 list3
|
||||
|
||||
$rd1 brpoplpush list1 list2 0
|
||||
$rd2 brpoplpush list2 list3 0
|
||||
|
||||
r rpush list1 foo
|
||||
|
||||
assert_equal {} [r lrange list1 0 -1]
|
||||
assert_equal {} [r lrange list2 0 -1]
|
||||
assert_equal {foo} [r lrange list3 0 -1]
|
||||
}
|
||||
|
||||
test "Circular BRPOPLPUSH" {
|
||||
set rd1 [redis_deferring_client]
|
||||
set rd2 [redis_deferring_client]
|
||||
|
||||
r del list1 list2
|
||||
|
||||
$rd1 brpoplpush list1 list2 0
|
||||
$rd2 brpoplpush list2 list1 0
|
||||
|
||||
r rpush list1 foo
|
||||
|
||||
assert_equal {foo} [r lrange list1 0 -1]
|
||||
assert_equal {} [r lrange list2 0 -1]
|
||||
}
|
||||
|
||||
test "Self-referential BRPOPLPUSH" {
|
||||
set rd [redis_deferring_client]
|
||||
|
||||
r del blist
|
||||
|
||||
$rd brpoplpush blist blist 0
|
||||
|
||||
r rpush blist foo
|
||||
|
||||
assert_equal {foo} [r lrange blist 0 -1]
|
||||
}
|
||||
|
||||
test "BRPOPLPUSH inside a transaction" {
|
||||
r del xlist target
|
||||
r lpush xlist foo
|
||||
r lpush xlist bar
|
||||
|
||||
r multi
|
||||
r brpoplpush xlist target 0
|
||||
r brpoplpush xlist target 0
|
||||
r brpoplpush xlist target 0
|
||||
r lrange xlist 0 -1
|
||||
r lrange target 0 -1
|
||||
r exec
|
||||
} {foo bar {} {} {bar foo}}
|
||||
|
||||
foreach {pop} {BLPOP BRPOP} {
|
||||
test "$pop: with single empty list argument" {
|
||||
set rd [redis_deferring_client]
|
||||
|
Reference in New Issue
Block a user