mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-23 08:38:27 -05:00
67 lines
2.1 KiB
Tcl
67 lines
2.1 KiB
Tcl
start_server {tags {"tracking"}} {
|
|
# Create a deferred client we'll use to redirect invalidation
|
|
# messages to.
|
|
set rd1 [redis_deferring_client]
|
|
$rd1 client id
|
|
set redir [$rd1 read]
|
|
$rd1 subscribe __redis__:invalidate
|
|
$rd1 read ; # Consume the SUBSCRIBE reply.
|
|
|
|
test {Clients are able to enable tracking and redirect it} {
|
|
r CLIENT TRACKING on REDIRECT $redir
|
|
} {*OK}
|
|
|
|
test {The other connection is able to get invalidations} {
|
|
r SET a 1
|
|
r GET a
|
|
r INCR a
|
|
r INCR b ; # This key should not be notified, since it wasn't fetched.
|
|
set keys [lindex [$rd1 read] 2]
|
|
assert {[llength $keys] == 1}
|
|
assert {[lindex $keys 0] eq {a}}
|
|
}
|
|
|
|
test {The client is now able to disable tracking} {
|
|
# Make sure to add a few more keys in the tracking list
|
|
# so that we can check for leaks, as a side effect.
|
|
r MGET a b c d e f g
|
|
r CLIENT TRACKING off
|
|
}
|
|
|
|
test {Clients can enable the BCAST mode with the empty prefix} {
|
|
r CLIENT TRACKING on BCAST REDIRECT $redir
|
|
} {*OK*}
|
|
|
|
test {The connection gets invalidation messages about all the keys} {
|
|
r MSET a 1 b 2 c 3
|
|
set keys [lsort [lindex [$rd1 read] 2]]
|
|
assert {$keys eq {a b c}}
|
|
}
|
|
|
|
test {Clients can enable the BCAST mode with prefixes} {
|
|
r CLIENT TRACKING off
|
|
r CLIENT TRACKING on BCAST REDIRECT $redir PREFIX a: PREFIX b:
|
|
r MULTI
|
|
r INCR a:1
|
|
r INCR a:2
|
|
r INCR b:1
|
|
r INCR b:2
|
|
r EXEC
|
|
# Because of the internals, we know we are going to receive
|
|
# two separated notifications for the two different prefixes.
|
|
set keys1 [lsort [lindex [$rd1 read] 2]]
|
|
set keys2 [lsort [lindex [$rd1 read] 2]]
|
|
set keys [lsort [list {*}$keys1 {*}$keys2]]
|
|
assert {$keys eq {a:1 a:2 b:1 b:2}}
|
|
}
|
|
|
|
test {Adding prefixes to BCAST mode works} {
|
|
r CLIENT TRACKING on BCAST REDIRECT $redir PREFIX c:
|
|
r INCR c:1234
|
|
set keys [lsort [lindex [$rd1 read] 2]]
|
|
assert {$keys eq {c:1234}}
|
|
}
|
|
|
|
$rd1 close
|
|
}
|