futriix/tests/unit/cluster/multi-slot-operations.tcl
Binbin fdd023ff82
Migrate cluster mode tests to normal framework (#442)
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>
2024-05-09 10:14:47 +08:00

110 lines
5.6 KiB
Tcl

# This test uses a custom slot allocation for testing
proc cluster_allocate_with_continuous_slots_local {masters replicas} {
R 0 cluster ADDSLOTSRANGE 0 3276
R 1 cluster ADDSLOTSRANGE 3277 6552
R 2 cluster ADDSLOTSRANGE 6553 9828
R 3 cluster ADDSLOTSRANGE 9829 13104
R 4 cluster ADDSLOTSRANGE 13105 16383
}
start_cluster 5 0 {tags {external:skip cluster}} {
set master1 [srv 0 "client"]
set master2 [srv -1 "client"]
set master3 [srv -2 "client"]
set master4 [srv -3 "client"]
set master5 [srv -4 "client"]
test "Continuous slots distribution" {
assert_match "* 0-3276*" [$master1 CLUSTER NODES]
assert_match "* 3277-6552*" [$master2 CLUSTER NODES]
assert_match "* 6553-9828*" [$master3 CLUSTER NODES]
assert_match "* 9829-13104*" [$master4 CLUSTER NODES]
assert_match "* 13105-16383*" [$master5 CLUSTER NODES]
assert_match "*0 3276*" [$master1 CLUSTER SLOTS]
assert_match "*3277 6552*" [$master2 CLUSTER SLOTS]
assert_match "*6553 9828*" [$master3 CLUSTER SLOTS]
assert_match "*9829 13104*" [$master4 CLUSTER SLOTS]
assert_match "*13105 16383*" [$master5 CLUSTER SLOTS]
$master1 CLUSTER DELSLOTSRANGE 3001 3050
assert_match "* 0-3000 3051-3276*" [$master1 CLUSTER NODES]
assert_match "*0 3000*3051 3276*" [$master1 CLUSTER SLOTS]
$master2 CLUSTER DELSLOTSRANGE 5001 5500
assert_match "* 3277-5000 5501-6552*" [$master2 CLUSTER NODES]
assert_match "*3277 5000*5501 6552*" [$master2 CLUSTER SLOTS]
$master3 CLUSTER DELSLOTSRANGE 7001 7100 8001 8500
assert_match "* 6553-7000 7101-8000 8501-9828*" [$master3 CLUSTER NODES]
assert_match "*6553 7000*7101 8000*8501 9828*" [$master3 CLUSTER SLOTS]
$master4 CLUSTER DELSLOTSRANGE 11001 12000 12101 12200
assert_match "* 9829-11000 12001-12100 12201-13104*" [$master4 CLUSTER NODES]
assert_match "*9829 11000*12001 12100*12201 13104*" [$master4 CLUSTER SLOTS]
$master5 CLUSTER DELSLOTSRANGE 13501 14000 15001 16000
assert_match "* 13105-13500 14001-15000 16001-16383*" [$master5 CLUSTER NODES]
assert_match "*13105 13500*14001 15000*16001 16383*" [$master5 CLUSTER SLOTS]
}
test "ADDSLOTS command with several boundary conditions test suite" {
assert_error "ERR Invalid or out of range slot" {R 0 cluster ADDSLOTS 3001 aaa}
assert_error "ERR Invalid or out of range slot" {R 0 cluster ADDSLOTS 3001 -1000}
assert_error "ERR Invalid or out of range slot" {R 0 cluster ADDSLOTS 3001 30003}
assert_error "ERR Slot 3200 is already busy" {R 0 cluster ADDSLOTS 3200}
assert_error "ERR Slot 8501 is already busy" {R 0 cluster ADDSLOTS 8501}
assert_error "ERR Slot 3001 specified multiple times" {R 0 cluster ADDSLOTS 3001 3002 3001}
}
test "ADDSLOTSRANGE command with several boundary conditions test suite" {
# Add multiple slots with incorrect argument number
assert_error "ERR wrong number of arguments for 'cluster|addslotsrange' command" {R 0 cluster ADDSLOTSRANGE 3001 3020 3030}
# Add multiple slots with invalid input slot
assert_error "ERR Invalid or out of range slot" {R 0 cluster ADDSLOTSRANGE 3001 3020 3030 aaa}
assert_error "ERR Invalid or out of range slot" {R 0 cluster ADDSLOTSRANGE 3001 3020 3030 70000}
assert_error "ERR Invalid or out of range slot" {R 0 cluster ADDSLOTSRANGE 3001 3020 -1000 3030}
# Add multiple slots when start slot number is greater than the end slot
assert_error "ERR start slot number 3030 is greater than end slot number 3025" {R 0 cluster ADDSLOTSRANGE 3001 3020 3030 3025}
# Add multiple slots with busy slot
assert_error "ERR Slot 3200 is already busy" {R 0 cluster ADDSLOTSRANGE 3001 3020 3200 3250}
# Add multiple slots with assigned multiple times
assert_error "ERR Slot 3001 specified multiple times" {R 0 cluster ADDSLOTSRANGE 3001 3020 3001 3020}
}
test "DELSLOTSRANGE command with several boundary conditions test suite" {
# Delete multiple slots with incorrect argument number
assert_error "ERR wrong number of arguments for 'cluster|delslotsrange' command" {R 0 cluster DELSLOTSRANGE 1000 2000 2100}
assert_match "* 0-3000 3051-3276*" [$master1 CLUSTER NODES]
assert_match "*0 3000*3051 3276*" [$master1 CLUSTER SLOTS]
# Delete multiple slots with invalid input slot
assert_error "ERR Invalid or out of range slot" {R 0 cluster DELSLOTSRANGE 1000 2000 2100 aaa}
assert_error "ERR Invalid or out of range slot" {R 0 cluster DELSLOTSRANGE 1000 2000 2100 70000}
assert_error "ERR Invalid or out of range slot" {R 0 cluster DELSLOTSRANGE 1000 2000 -2100 2200}
assert_match "* 0-3000 3051-3276*" [$master1 CLUSTER NODES]
assert_match "*0 3000*3051 3276*" [$master1 CLUSTER SLOTS]
# Delete multiple slots when start slot number is greater than the end slot
assert_error "ERR start slot number 5800 is greater than end slot number 5750" {R 1 cluster DELSLOTSRANGE 5600 5700 5800 5750}
assert_match "* 3277-5000 5501-6552*" [$master2 CLUSTER NODES]
assert_match "*3277 5000*5501 6552*" [$master2 CLUSTER SLOTS]
# Delete multiple slots with already unassigned
assert_error "ERR Slot 7001 is already unassigned" {R 2 cluster DELSLOTSRANGE 7001 7100 9000 9200}
assert_match "* 6553-7000 7101-8000 8501-9828*" [$master3 CLUSTER NODES]
assert_match "*6553 7000*7101 8000*8501 9828*" [$master3 CLUSTER SLOTS]
# Delete multiple slots with assigned multiple times
assert_error "ERR Slot 12500 specified multiple times" {R 3 cluster DELSLOTSRANGE 12500 12600 12500 12600}
assert_match "* 9829-11000 12001-12100 12201-13104*" [$master4 CLUSTER NODES]
assert_match "*9829 11000*12001 12100*12201 13104*" [$master4 CLUSTER SLOTS]
}
} cluster_allocate_with_continuous_slots_local