blob: 2619eda0a1f7172a6b3c7c0e2809aa0e8eb27911 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
# Test PUBSUB shard propagation in a cluster slot.
source "../tests/includes/init-tests.tcl"
test "Create a 3 nodes cluster" {
cluster_create_with_continuous_slots 3 3
}
set cluster [redis_cluster 127.0.0.1:[get_instance_attrib redis 0 port]]
test "Pub/Sub shard basics" {
set slot [$cluster cluster keyslot "channel.0"]
array set publishnode [$cluster masternode_for_slot $slot]
array set notshardnode [$cluster masternode_notfor_slot $slot]
set publishclient [redis_client_by_addr $publishnode(host) $publishnode(port)]
set subscribeclient [redis_deferring_client_by_addr $publishnode(host) $publishnode(port)]
set subscribeclient2 [redis_deferring_client_by_addr $publishnode(host) $publishnode(port)]
set anotherclient [redis_deferring_client_by_addr $notshardnode(host) $notshardnode(port)]
$subscribeclient ssubscribe channel.0
$subscribeclient read
$subscribeclient2 ssubscribe channel.0
$subscribeclient2 read
$anotherclient ssubscribe channel.0
catch {$anotherclient read} err
assert_match {MOVED *} $err
set data [randomValue]
$publishclient spublish channel.0 $data
set msg [$subscribeclient read]
assert_equal $data [lindex $msg 2]
set msg [$subscribeclient2 read]
assert_equal $data [lindex $msg 2]
$publishclient close
$subscribeclient close
$subscribeclient2 close
$anotherclient close
}
test "client can't subscribe to multiple shard channels across different slots in same call" {
catch {$cluster ssubscribe channel.0 channel.1} err
assert_match {CROSSSLOT Keys*} $err
}
test "client can subscribe to multiple shard channels across different slots in separate call" {
$cluster ssubscribe ch3
$cluster ssubscribe ch7
$cluster sunsubscribe ch3
$cluster sunsubscribe ch7
}
test "Verify Pub/Sub and Pub/Sub shard no overlap" {
set slot [$cluster cluster keyslot "channel.0"]
array set publishnode [$cluster masternode_for_slot $slot]
array set notshardnode [$cluster masternode_notfor_slot $slot]
set publishshardclient [redis_client_by_addr $publishnode(host) $publishnode(port)]
set publishclient [redis_deferring_client_by_addr $publishnode(host) $publishnode(port)]
set subscribeshardclient [redis_deferring_client_by_addr $publishnode(host) $publishnode(port)]
set subscribeclient [redis_deferring_client_by_addr $publishnode(host) $publishnode(port)]
$subscribeshardclient deferred 1
$subscribeshardclient ssubscribe channel.0
$subscribeshardclient read
$subscribeclient deferred 1
$subscribeclient subscribe channel.0
$subscribeclient read
set sharddata "testingpubsubdata"
$publishshardclient spublish channel.0 $sharddata
set data "somemoredata"
$publishclient publish channel.0 $data
set msg [$subscribeshardclient read]
assert_equal $sharddata [lindex $msg 2]
set msg [$subscribeclient read]
assert_equal $data [lindex $msg 2]
$cluster close
$publishclient close
$subscribeclient close
$subscribeshardclient close
}
|