Skip to content

Commit a825ff7

Browse files
author
xiaobiao
committed
test: add SPublish test cases
1 parent 482b601 commit a825ff7

1 file changed

Lines changed: 82 additions & 0 deletions

File tree

tests/gocase/unit/pubsub/pubsubshard_test.go

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,3 +162,85 @@ func TestPubSubShard(t *testing.T) {
162162
}
163163
})
164164
}
165+
166+
func TestSPublish(t *testing.T) {
167+
ctx := context.Background()
168+
169+
srv := util.StartServer(t, map[string]string{})
170+
defer srv.Close()
171+
rdb := srv.NewClient()
172+
defer func() { require.NoError(t, rdb.Close()) }()
173+
174+
t.Run("SPUBLISH to no subscribers", func(t *testing.T) {
175+
// Should return 0 when no subscribers
176+
n, err := rdb.Do(ctx, "SPUBLISH", "mychannel", "hello").Int()
177+
require.NoError(t, err)
178+
require.EqualValues(t, 0, n)
179+
})
180+
181+
t.Run("SPUBLISH to one subscriber", func(t *testing.T) {
182+
pubsub := rdb.SSubscribe(ctx, "mychannel")
183+
defer pubsub.Close()
184+
185+
// Receive the subscription message
186+
receiveType(t, pubsub, &redis.Subscription{})
187+
require.EqualValues(t, 1, receiveType(t, pubsub, &redis.Subscription{}).Count)
188+
189+
// Publish message
190+
n, err := rdb.Do(ctx, "SPUBLISH", "mychannel", "hello world").Int()
191+
require.NoError(t, err)
192+
require.EqualValues(t, 1, n)
193+
194+
// Receive the message
195+
msg := receiveType(t, pubsub, &redis.Message{})
196+
require.EqualValues(t, "mychannel", msg.Channel)
197+
require.EqualValues(t, "hello world", msg.Payload)
198+
})
199+
200+
t.Run("SPUBLISH to multiple subscribers", func(t *testing.T) {
201+
channel := "testchannel{tag}"
202+
203+
pubsub1 := rdb.SSubscribe(ctx, channel)
204+
defer pubsub1.Close()
205+
receiveType(t, pubsub1, &redis.Subscription{})
206+
207+
pubsub2 := rdb.SSubscribe(ctx, channel)
208+
defer pubsub2.Close()
209+
receiveType(t, pubsub2, &redis.Subscription{})
210+
211+
// Publish message
212+
n, err := rdb.Do(ctx, "SPUBLISH", channel, "message from spublish").Int()
213+
require.NoError(t, err)
214+
require.EqualValues(t, 2, n)
215+
216+
// Both subscribers should receive the message
217+
msg1 := receiveType(t, pubsub1, &redis.Message{})
218+
require.EqualValues(t, "message from spublish", msg1.Payload)
219+
220+
msg2 := receiveType(t, pubsub2, &redis.Message{})
221+
require.EqualValues(t, "message from spublish", msg2.Payload)
222+
})
223+
224+
t.Run("SPUBLISH with cluster enabled", func(t *testing.T) {
225+
csrv := util.StartServer(t, map[string]string{"cluster-enabled": "yes"})
226+
defer csrv.Close()
227+
crdb := csrv.NewClient()
228+
defer func() { require.NoError(t, crdb.Close()) }()
229+
230+
nodeID := "test_node_id_12345678901234567890123456789012"
231+
require.NoError(t, crdb.Do(ctx, "clusterx", "SETNODEID", nodeID).Err())
232+
clusterNodes := fmt.Sprintf("%s %s %d master - 0-16383", nodeID, csrv.Host(), csrv.Port())
233+
require.NoError(t, crdb.Do(ctx, "clusterx", "SETNODES", clusterNodes, "1").Err())
234+
235+
pubsub := crdb.SSubscribe(ctx, "mychannel{tag}")
236+
defer pubsub.Close()
237+
receiveType(t, pubsub, &redis.Subscription{})
238+
239+
n, err := crdb.Do(ctx, "SPUBLISH", "mychannel{tag}", "cluster message").Int()
240+
require.NoError(t, err)
241+
require.EqualValues(t, 1, n)
242+
243+
msg := receiveType(t, pubsub, &redis.Message{})
244+
require.EqualValues(t, "cluster message", msg.Payload)
245+
})
246+
}

0 commit comments

Comments
 (0)