Files
chain33-imparse/chat/test/action_test.go
2022-03-17 15:54:23 +08:00

172 lines
3.2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package test
import (
"bytes"
"context"
"math/rand"
"os"
"testing"
"time"
"github.com/golang/protobuf/proto"
comet "gitlab.33.cn/chat/im/api/comet/grpc"
"gitlab.33.cn/chat/imparse"
"gitlab.33.cn/chat/imparse/chat"
biz "gitlab.33.cn/chat/imparse/proto"
)
type msg []byte
var sourceData = []msg{}
func TestMain(t *testing.M) {
sourceData = genTestFrames()
os.Exit(t.Run())
}
func genTestFrames() []msg {
p := comet.Proto{
Ver: 0,
Op: int32(comet.Op_SendMsg),
Seq: 1,
Ack: 0,
Body: nil,
}
pro := biz.Proto{
EventType: biz.Proto_common,
Body: nil,
}
comm := biz.Common{
ChannelType: biz.Channel_ToUser,
Mid: 0,
Seq: "client-msg",
From: "client-from",
Target: "client-target",
MsgType: biz.MsgType_Text,
Msg: nil,
}
data2, err := proto.Marshal(&comm)
if err != nil {
panic(err)
}
pro.Body = data2
data1, err := proto.Marshal(&pro)
if err != nil {
panic(err)
}
p.Body = data1
data, err := proto.Marshal(&p)
if err != nil {
panic(err)
}
return []msg{data}
}
type testDB struct {
}
func (db *testDB) GetMsg(ctx context.Context, from, seq string) (*imparse.MsgIndex, error) {
return nil, nil
}
func (db *testDB) AddMsg(ctx context.Context, uid string, m *imparse.MsgIndex) error {
return nil
}
func (db *testDB) GetMid(ctx context.Context) (id int64, err error) {
//将时间戳设置成种子数
rand.Seed(time.Now().UnixNano())
id = int64(rand.Intn(100))
return
}
type testExec struct {
}
func (e *testExec) Transport(ctx context.Context, id int64, key, from, target string, ch imparse.Channel, frameType imparse.FrameType, data []byte) error {
return nil
}
func (e *testExec) RevAck(ctx context.Context, id int64, keys []string, data []byte) error {
return nil
}
func TestStandard_Filter(t *testing.T) {
//全局初始化
var db testDB
var e testExec
var exec = imparse.NewStandardAnswer(&db, &e, nil, nil)
var parser chat.StandardParse
//局部初始化
//来源模式 1. ws推送2. http推送3. 测试命令行
from := "server-client"
key := "server-key"
for _, m := range sourceData {
ctx := context.Background()
f, err := parser.NewFrame(key, from, bytes.NewReader(m))
if err != nil {
t.Error(err)
return
}
_, err = exec.Filter(ctx, f)
if err != nil {
t.Error(err)
continue
}
err = exec.Transport(ctx, f)
if err != nil {
t.Error(err)
continue
}
_, err = exec.Ack(ctx, f)
if err != nil {
t.Error(err)
continue
}
}
}
func BenchmarkCreateFrame(b *testing.B) {
//全局初始化
var db testDB
var e testExec
var exec = imparse.NewStandardAnswer(&db, &e, nil, nil)
var parser chat.StandardParse
data := sourceData[0]
//局部初始化
//来源模式 1. ws推送2. http推送3. 测试命令行
from := "server-client"
key := "server-key"
for n := 0; n < b.N; n++ {
ctx := context.Background()
f, err := parser.NewFrame(key, from, bytes.NewReader(data))
if err != nil {
b.Error(err)
return
}
_, err = exec.Filter(ctx, f)
if err != nil {
b.Error(err)
continue
}
err = exec.Transport(ctx, f)
if err != nil {
b.Error(err)
continue
}
_, err = exec.Ack(ctx, f)
if err != nil {
b.Error(err)
continue
}
}
}