
We currently has two disjoint TCL frameworks: 1. Normal testing framework, which trigger by runtest, which individually launches nodes for testing. 2. Cluster framework, which trigger by runtest-cluster, which pre-allocates N nodes and uses them for testing large configurations. The normal TCL testing framework is much more readily tested and is also automatically run as part of the CI for new PRs. The runtest-cluster since it runs very slowly (cannot be parallelized), it currently only runs in daily CI, this results in some changes to the cluster not being exposed in PR CI in time. This PR migrate the Cluster mode tests to normal framework. Some cluster tests are kept in runtest-cluster because of timing issues or not yet supported, we can process them later. Signed-off-by: Binbin <binloveplay1314@qq.com>
84 lines
2.1 KiB
Tcl
84 lines
2.1 KiB
Tcl
# Check basic transactions on a replica.
|
|
|
|
start_cluster 1 1 {tags {external:skip cluster}} {
|
|
|
|
test "Cluster should start ok" {
|
|
wait_for_cluster_state ok
|
|
}
|
|
|
|
set primary [srv 0 "client"]
|
|
set replica [srv -1 "client"]
|
|
|
|
test "Can't read from replica without READONLY" {
|
|
$primary SET a 1
|
|
wait_for_ofs_sync $primary $replica
|
|
catch {$replica GET a} err
|
|
assert {[string range $err 0 4] eq {MOVED}}
|
|
}
|
|
|
|
test "Can't read from replica after READWRITE" {
|
|
$replica READWRITE
|
|
catch {$replica GET a} err
|
|
assert {[string range $err 0 4] eq {MOVED}}
|
|
}
|
|
|
|
test "Can read from replica after READONLY" {
|
|
$replica READONLY
|
|
assert {[$replica GET a] eq {1}}
|
|
}
|
|
|
|
test "Can perform HSET primary and HGET from replica" {
|
|
$primary HSET h a 1
|
|
$primary HSET h b 2
|
|
$primary HSET h c 3
|
|
wait_for_ofs_sync $primary $replica
|
|
assert {[$replica HGET h a] eq {1}}
|
|
assert {[$replica HGET h b] eq {2}}
|
|
assert {[$replica HGET h c] eq {3}}
|
|
}
|
|
|
|
test "Can MULTI-EXEC transaction of HGET operations from replica" {
|
|
$replica MULTI
|
|
assert {[$replica HGET h a] eq {QUEUED}}
|
|
assert {[$replica HGET h b] eq {QUEUED}}
|
|
assert {[$replica HGET h c] eq {QUEUED}}
|
|
assert {[$replica EXEC] eq {1 2 3}}
|
|
}
|
|
|
|
test "MULTI-EXEC with write operations is MOVED" {
|
|
$replica MULTI
|
|
catch {$replica HSET h b 4} err
|
|
assert {[string range $err 0 4] eq {MOVED}}
|
|
catch {$replica exec} err
|
|
assert {[string range $err 0 8] eq {EXECABORT}}
|
|
}
|
|
|
|
test "read-only blocking operations from replica" {
|
|
set rd [valkey_deferring_client -1]
|
|
$rd readonly
|
|
$rd read
|
|
$rd XREAD BLOCK 0 STREAMS k 0
|
|
|
|
wait_for_condition 1000 50 {
|
|
[s -1 blocked_clients] eq {1}
|
|
} else {
|
|
fail "client wasn't blocked"
|
|
}
|
|
|
|
$primary XADD k * foo bar
|
|
set res [$rd read]
|
|
set res [lindex [lindex [lindex [lindex $res 0] 1] 0] 1]
|
|
assert {$res eq {foo bar}}
|
|
$rd close
|
|
}
|
|
|
|
test "reply MOVED when eval from replica for update" {
|
|
catch {[$replica eval {#!lua
|
|
return server.call('del','a')
|
|
} 1 a
|
|
]} err
|
|
assert {[string range $err 0 4] eq {MOVED}}
|
|
}
|
|
|
|
} ;# start_cluster
|