Skip to content

Commit

Permalink
Fix test (#623)
Browse files Browse the repository at this point in the history
* test: fix gen user ids

* test: fix import friends

* test: change log path

* test: fix log init

* test: fix log init

* test: init sdk slice

* test: output logs

* test: add map lock

* feat: split user manager login and init

* test: fix post context

* test: fix post context

* test: context init

* test: context init

* test: check log output and login rate

* test: login rate default value

* test: ctx with operationID

* test: ctx with operationID

* test: fix import friends ctx

* test: move config

* test: with admin token

* test: fix userIDs slice change

* test: fix goroutine ctx

* test: fix ctx and flag
  • Loading branch information
icey-yu committed Jul 29, 2024
1 parent 53d66c7 commit 8c141a5
Show file tree
Hide file tree
Showing 20 changed files with 178 additions and 76 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ require golang.org/x/net v0.22.0
require (
github.com/google/go-cmp v0.6.0
github.com/openimsdk/protocol v0.0.69-alpha.37
github.com/openimsdk/tools v0.0.49-alpha.56
github.com/openimsdk/tools v0.0.49-alpha.57
github.com/patrickmn/go-cache v2.1.0+incompatible
golang.org/x/image v0.15.0
golang.org/x/sync v0.6.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/openimsdk/protocol v0.0.69-alpha.37 h1:2gtDkippSBfbXIP++BEQsz4e+qjk86ddnh4b7p40/HY=
github.com/openimsdk/protocol v0.0.69-alpha.37/go.mod h1:OZQA9FR55lseYoN2Ql1XAHYKHJGu7OMNkUbuekrKCM8=
github.com/openimsdk/tools v0.0.49-alpha.56 h1:dPUgJEFBV7roleqDmOEezoDooFF222ZQG0qf7mYrFkw=
github.com/openimsdk/tools v0.0.49-alpha.56/go.mod h1:oiSQU5Z6fzjxKFjbqDHImD8EmCIwClU1Rkur1sK12Po=
github.com/openimsdk/tools v0.0.49-alpha.57 h1:j+FIX69Ol2sgAivI636rsXUYqOpUwy/oJBntv3zUppY=
github.com/openimsdk/tools v0.0.49-alpha.57/go.mod h1:oiSQU5Z6fzjxKFjbqDHImD8EmCIwClU1Rkur1sK12Po=
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
Expand Down
7 changes: 4 additions & 3 deletions integration_test/internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ const (
WsAddr = "ws://" + TestIP + ":10001"
Secret = "openIM123"
PlatformID = constant.WindowsPlatformID
LogLevel = uint32(5)
DataDir = "../"
LogFilePath = "../"
LogLevel = 6
DataDir = "./data/"
LogFilePath = "./logs/"
AdminUserID = "imAdmin"
)

func GetConf() sdk_struct.IMConfig {
Expand Down
9 changes: 9 additions & 0 deletions integration_test/internal/config/limit.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package config

const (
MaxUserNum = 1e+5 // max users
)

const (
ErrGroupCommonLimit = 200 // max goroutine of an error group
)
5 changes: 4 additions & 1 deletion integration_test/internal/manager/group_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package manager

import (
"context"
"github.com/openimsdk/openim-sdk-core/v3/integration_test/internal/config"
"github.com/openimsdk/openim-sdk-core/v3/integration_test/internal/pkg/utils"
"github.com/openimsdk/openim-sdk-core/v3/integration_test/internal/sdk"
"github.com/openimsdk/openim-sdk-core/v3/integration_test/internal/vars"
Expand Down Expand Up @@ -29,7 +30,7 @@ func (m *TestGroupManager) CreateGroups(ctx context.Context) error {
}()

gr, _ := errgroup.WithContext(ctx)
gr.SetLimit(vars.ErrGroupCommonLimit)
gr.SetLimit(config.ErrGroupCommonLimit)
m.createLargeGroups(ctx, gr)
m.createCommonGroups(ctx, gr)
return gr.Wait()
Expand All @@ -39,6 +40,7 @@ func (m *TestGroupManager) CreateGroups(ctx context.Context) error {
func (m *TestGroupManager) createLargeGroups(ctx context.Context, gr *errgroup.Group) {
userNum := 0
for i := 0; i < vars.LargeGroupNum; i++ {
ctx := vars.Contexts[userNum]
testSDK := sdk.TestSDKs[userNum]
gr.Go(func() error {
_, err := testSDK.CreateLargeGroup(ctx)
Expand All @@ -55,6 +57,7 @@ func (m *TestGroupManager) createLargeGroups(ctx context.Context, gr *errgroup.G
// createLargeGroups see CreateGroups
func (m *TestGroupManager) createCommonGroups(ctx context.Context, gr *errgroup.Group) {
for userNum := 0; userNum < vars.UserNum; userNum++ {
ctx := vars.Contexts[userNum]
testSDK := sdk.TestSDKs[userNum]
gr.Go(func() error {
for i := 0; i < vars.CommonGroupNum; i++ {
Expand Down
17 changes: 13 additions & 4 deletions integration_test/internal/manager/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@ import (
authPB "github.com/openimsdk/protocol/auth"
)

const (
ManagerUserID = "openIMAdmin"
)

type MetaManager struct {
sdk_struct.IMConfig
secret string
Expand All @@ -33,10 +29,14 @@ func (m *MetaManager) ApiPost(ctx context.Context, route string, req, resp any)
return util.ApiPost(ctx, route, req, resp)
}

// PostWithCtx should only be used for scenarios such as registration and login that do not require a token or
// require an admin token.
// For scenarios that require a specific user token, please obtain the context from vars.Contexts for the request.
func (m *MetaManager) PostWithCtx(route string, req, resp any) error {
return m.ApiPost(m.BuildCtx(nil), route, req, resp)
}

// BuildCtx build an admin token
func (m *MetaManager) BuildCtx(ctx context.Context) context.Context {
if ctx == nil {
ctx = context.Background()
Expand All @@ -62,3 +62,12 @@ func (m *MetaManager) GetToken(userID string, platformID int32) (string, error)
}
return resp.Token, nil
}

func (m *MetaManager) WithAdminToken() (err error) {
token, err := m.GetToken(config.AdminUserID, config.PlatformID)
if err != nil {
return err
}
m.token = token
return nil
}
10 changes: 6 additions & 4 deletions integration_test/internal/manager/relation_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@ package manager

import (
"context"
"github.com/openimsdk/openim-sdk-core/v3/integration_test/internal/config"
"github.com/openimsdk/openim-sdk-core/v3/integration_test/internal/vars"
"github.com/openimsdk/openim-sdk-core/v3/internal/util"
"github.com/openimsdk/openim-sdk-core/v3/pkg/constant"
"github.com/openimsdk/protocol/relation"
"github.com/openimsdk/tools/log"
"github.com/openimsdk/tools/utils/datautil"
"golang.org/x/sync/errgroup"
"time"
)
Expand All @@ -31,18 +34,17 @@ func (m *TestRelationManager) ImportFriends(ctx context.Context) error {
}()

gr, _ := errgroup.WithContext(ctx)
gr.SetLimit(vars.ErrGroupCommonLimit)
gr.SetLimit(config.ErrGroupCommonLimit)
for i, userID := range vars.SuperUserIDs {
i := i
userID := userID
gr.Go(func() error {
friendIDs := append(vars.UserIDs[:i], vars.UserIDs[i+1:]...) // excluding oneself
friendIDs := datautil.Delete(datautil.CopySlice(vars.UserIDs), i) // excluding oneself
req := &relation.ImportFriendReq{
OwnerUserID: userID,
FriendUserIDs: friendIDs,
}
resp := &relation.ImportFriendResp{}
err := m.PostWithCtx(constant.ImportFriendListRouter, req, resp)
_, err := util.CallApi[relation.ImportFriendResp](m.BuildCtx(ctx), constant.ImportFriendListRouter, req)
if err != nil {
return err
}
Expand Down
19 changes: 10 additions & 9 deletions integration_test/internal/manager/user_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,26 +56,27 @@ func (t *TestUserManager) RegisterUsers(ctx context.Context, userIDs ...string)

func (t *TestUserManager) InitSDK(ctx context.Context, userIDs ...string) error {
tm := time.Now()
log.ZDebug(ctx, "initSDKAndLogin begin", "len userIDs", len(userIDs))
log.ZDebug(ctx, "InitSDK begin", "len userIDs", len(userIDs))
defer func() {
log.ZDebug(ctx, "initSDKAndLogin end", "time consuming", time.Since(tm))
log.ZDebug(ctx, "InitSDK end", "time consuming", time.Since(tm))
}()

gr, ctx := errgroup.WithContext(ctx)
gr.SetLimit(vars.ErrGroupCommonLimit)
gr, _ := errgroup.WithContext(ctx)
gr.SetLimit(config.ErrGroupCommonLimit)
for _, userID := range userIDs {
userID := userID
gr.Go(func() error {
userNum := utils.MustGetUserNum(userID)
token, err := t.GetToken(userID, config.PlatformID)
if err != nil {
return err
}
mgr, err := sdk_user_simulator.InitSDK(userID, token, t.IMConfig)
ctx, mgr, err := sdk_user_simulator.InitSDK(ctx, userID, token, t.IMConfig)
if err != nil {
return err
}
userNum := utils.MustGetUserNum(userID)
sdk.TestSDKs[userNum] = sdk.NewTestSDK(userID, userNum, mgr) // init sdk
vars.Contexts[userNum] = ctx // init ctx
return nil
})
}
Expand All @@ -98,14 +99,14 @@ func (t *TestUserManager) Login(ctx context.Context, userIDs ...string) error {
log.ZDebug(ctx, "login end", "time consuming", time.Since(tm))
}()

gr, ctx := errgroup.WithContext(ctx)
gr.SetLimit(vars.ErrGroupCommonLimit)
gr, _ := errgroup.WithContext(ctx)
gr.SetLimit(config.ErrGroupCommonLimit)
for _, userID := range userIDs {
userID := userID
gr.Go(func() error {
token, err := t.GetToken(userID, config.PlatformID)
userNum := utils.MustGetUserNum(userID)
err = sdk.TestSDKs[userNum].SDK.Login(ctx, userID, token)
err = sdk.TestSDKs[userNum].SDK.LoginWithOutInit(vars.Contexts[userNum], userID, token)
if err != nil {
return err
}
Expand Down
12 changes: 7 additions & 5 deletions integration_test/internal/pkg/initialization/flag.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,32 @@ package initialization

import (
"flag"
"github.com/openimsdk/openim-sdk-core/v3/integration_test/internal/config"
"github.com/openimsdk/openim-sdk-core/v3/integration_test/internal/vars"
)

func InitFlag() {
flag.IntVar(&vars.UserNum, "u", 1000, "user num")
flag.IntVar(&vars.SuperUserNum, "su", 50, "number of users with all friends")
flag.IntVar(&vars.LargeGroupNum, "gl", 50, "number of big group")
flag.IntVar(&vars.CommonGroupNum, "gs", 500, "number of small group")
flag.IntVar(&vars.CommonGroupNum, "gs", 10, "number of small group")
flag.IntVar(&vars.CommonGroupMemberNum, "gsm", 10, "number of small group member num")
flag.IntVar(&vars.SingleMessageNum, "sm", 5, "number of single message each user send")
flag.IntVar(&vars.GroupMessageNum, "gm", 1, "number of group message each user send")

flag.BoolVar(&vars.ShouldRegister, "reg", false, "determine whether register")
flag.BoolVar(&vars.ShouldImportFriends, "imf", false, "determine whether import friends")
flag.BoolVar(&vars.ShouldCreateGroup, "crg", false, "determine whether create group")

flag.BoolVar(&vars.ShouldCheckGroupNum, "ckgn", false, "determine whether check group num")

flag.Float64Var(&vars.LoginRate, "lgr", 100, "number of login user rate")
flag.Float64Var(&vars.LoginRate, "lgr", 1, "number of login user rate")
}

// SetFlagLimit prevent parameters from exceeding the limit
func SetFlagLimit() {
vars.UserNum = min(vars.UserNum, vars.MaxUserNum)
vars.CommonGroupNum = min(vars.CommonGroupMemberNum, vars.UserNum)
vars.UserNum = min(vars.UserNum, config.MaxUserNum)
vars.CommonGroupMemberNum = min(vars.CommonGroupMemberNum, vars.UserNum)

vars.LoginRate = min(vars.LoginRate, 100)
vars.LoginRate = min(vars.LoginRate, 1)
}
21 changes: 21 additions & 0 deletions integration_test/internal/pkg/initialization/log.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package initialization

import (
"fmt"
"github.com/openimsdk/openim-sdk-core/v3/sdk_struct"
"github.com/openimsdk/openim-sdk-core/v3/version"
"github.com/openimsdk/tools/log"
)

const (
rotateCount uint = 0
rotationTime uint = 24
)

func InitLog(cf sdk_struct.IMConfig) error {
if err := log.InitFromConfig("open-im-sdk-core", "", int(cf.LogLevel), cf.IsLogStandardOutput, false, cf.LogFilePath, rotateCount, rotationTime, version.Version, true); err != nil {
fmt.Println("log init failed ", err.Error())
return err
}
return nil
}
8 changes: 6 additions & 2 deletions integration_test/internal/pkg/initialization/sdk.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@ package initialization
import (
"context"
"github.com/openimsdk/openim-sdk-core/v3/integration_test/internal/manager"
"github.com/openimsdk/openim-sdk-core/v3/integration_test/internal/vars"
)

func GenUserIDs() {
manager.NewUserManager(manager.NewMetaManager()).GenAllUserIDs()
}

func InitSDK(ctx context.Context) error {
userMng := manager.NewUserManager(manager.NewMetaManager())
userIDs := userMng.GenAllUserIDs()
err := userMng.InitSDK(ctx, userIDs...)
err := userMng.InitSDK(ctx, vars.UserIDs...)
if err != nil {
return err
}
Expand Down
32 changes: 21 additions & 11 deletions integration_test/internal/pkg/sdk_user_simulator/user.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
package sdk_user_simulator

import (
"github.com/openimsdk/openim-sdk-core/v3/integration_test/internal/config"
"github.com/openimsdk/openim-sdk-core/v3/sdk_struct"

"context"
"github.com/openimsdk/openim-sdk-core/v3/open_im_sdk"
"github.com/openimsdk/openim-sdk-core/v3/pkg/ccontext"
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
"github.com/openimsdk/openim-sdk-core/v3/version"
"github.com/openimsdk/tools/log"
"github.com/openimsdk/openim-sdk-core/v3/sdk_struct"
"github.com/openimsdk/tools/errs"
"sync"
)

var (
MapLock sync.Mutex
UserMessageMap = make(map[string]*MsgListenerCallBak)
timeOffset int64
)
Expand All @@ -19,16 +20,23 @@ func GetRelativeServerTime() int64 {
return utils.GetCurrentTimestampByMill() + timeOffset
}

func InitSDK(userID, token string, cf sdk_struct.IMConfig) (*open_im_sdk.LoginMgr, error) {
func InitSDK(ctx context.Context, userID, token string, cf sdk_struct.IMConfig) (context.Context, *open_im_sdk.LoginMgr, error) {
userForSDK := open_im_sdk.NewLoginMgr()
var testConnListener testConnListener
userForSDK.InitSDK(cf, &testConnListener)
if err := log.InitFromConfig(userID+"_open-im-sdk-core", "", int(config.LogLevel), true, false, cf.DataDir, 0, 24, version.Version, true); err != nil {
return nil, err
isInit := userForSDK.InitSDK(cf, &testConnListener)
if !isInit {
return nil, nil, errs.New("sdk init failed").Wrap()
}

SetListener(userForSDK, userID)
userForSDK.SetToken(userID, token)
return userForSDK, nil

ctx = userForSDK.Context()
ctx = ccontext.WithOperationID(ctx, utils.OperationIDGenerator())
if err := userForSDK.InitMgr(ctx, userID, token); err != nil {
return nil, nil, err
}

return ctx, userForSDK, nil
}

func SetListener(userForSDK *open_im_sdk.LoginMgr, userID string) {
Expand All @@ -38,7 +46,9 @@ func SetListener(userForSDK *open_im_sdk.LoginMgr, userID string) {
userForSDK.SetUserListener(testUser)

msgCallBack := NewMsgListenerCallBak(userID)
MapLock.Lock()
UserMessageMap[userID] = msgCallBack
MapLock.Unlock()
userForSDK.SetAdvancedMsgListener(msgCallBack)

var friendListener testFriendListener
Expand Down
6 changes: 4 additions & 2 deletions integration_test/internal/process/checker/group.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package checker

import (
"context"
"github.com/openimsdk/openim-sdk-core/v3/integration_test/internal/config"
"github.com/openimsdk/openim-sdk-core/v3/integration_test/internal/sdk"
"github.com/openimsdk/openim-sdk-core/v3/integration_test/internal/vars"
"github.com/openimsdk/tools/errs"
Expand All @@ -24,7 +25,7 @@ func CheckGroupNum(ctx context.Context) error {
mapLock = sync.RWMutex{}
)

gr.SetLimit(vars.ErrGroupCommonLimit)
gr.SetLimit(config.ErrGroupCommonLimit)
correctGroupNum := calCorrectGroupNum()
for _, core := range sdk.TestSDKs {
core := core
Expand Down Expand Up @@ -52,8 +53,9 @@ func CheckGroupNum(ctx context.Context) error {
}
err := errs.New("check group number un correct!").Wrap()
InsertToErrChan(ctx, err)
} else {
log.ZInfo(ctx, "group num check success")
}

return nil
}

Expand Down
Loading

0 comments on commit 8c141a5

Please sign in to comment.