You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.6 KiB
80 lines
1.6 KiB
4 months ago
|
package redis
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/cache/cachekey"
|
||
|
"github.com/redis/go-redis/v9"
|
||
|
"log"
|
||
|
"strconv"
|
||
|
"sync/atomic"
|
||
|
"testing"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func newTestOnline() *userOnline {
|
||
|
opt := &redis.Options{
|
||
|
Addr: "172.16.8.48:16379",
|
||
|
Password: "openIM123",
|
||
|
DB: 0,
|
||
|
}
|
||
|
rdb := redis.NewClient(opt)
|
||
|
if err := rdb.Ping(context.Background()).Err(); err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
return &userOnline{rdb: rdb, expire: time.Hour, channelName: "user_online"}
|
||
|
}
|
||
|
|
||
|
func TestOnline(t *testing.T) {
|
||
|
ts := newTestOnline()
|
||
|
var count atomic.Int64
|
||
|
for i := 0; i < 64; i++ {
|
||
|
go func(userID string) {
|
||
|
var err error
|
||
|
for i := 0; ; i++ {
|
||
|
if i%2 == 0 {
|
||
|
err = ts.SetUserOnline(context.Background(), userID, []int32{5, 6}, []int32{7, 8, 9})
|
||
|
} else {
|
||
|
err = ts.SetUserOnline(context.Background(), userID, []int32{1, 2, 3}, []int32{4, 5, 6})
|
||
|
}
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
count.Add(1)
|
||
|
}
|
||
|
}(strconv.Itoa(10000 + i))
|
||
|
}
|
||
|
|
||
|
ticker := time.NewTicker(time.Second)
|
||
|
for range ticker.C {
|
||
|
t.Log(count.Swap(0))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestGetOnline(t *testing.T) {
|
||
|
ts := newTestOnline()
|
||
|
ctx := context.Background()
|
||
|
pIDs, err := ts.GetOnline(ctx, "10000")
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
t.Log(pIDs)
|
||
|
}
|
||
|
|
||
|
func TestRecvOnline(t *testing.T) {
|
||
|
ts := newTestOnline()
|
||
|
ctx := context.Background()
|
||
|
pubsub := ts.rdb.Subscribe(ctx, cachekey.OnlineChannel)
|
||
|
|
||
|
_, err := pubsub.Receive(ctx)
|
||
|
if err != nil {
|
||
|
log.Fatalf("Could not subscribe: %v", err)
|
||
|
}
|
||
|
|
||
|
ch := pubsub.Channel()
|
||
|
|
||
|
for msg := range ch {
|
||
|
fmt.Printf("Received message from channel %s: %s\n", msg.Channel, msg.Payload)
|
||
|
}
|
||
|
}
|