diff --git a/busi/createUser.go b/busi/createUser.go index a051674..a39b53a 100644 --- a/busi/createUser.go +++ b/busi/createUser.go @@ -31,7 +31,7 @@ func (c *CreateUserScene) Run(robot lib.IRobot) error { rsp := &pb.UserCreateResp{} code := robot.SendMsg("user", "create", req, rsp) - if code != pb.ErrorCode_Success { + if code == pb.ErrorCode_Success { return nil } logrus.Debug(rsp) diff --git a/lib/ai.go b/lib/ai.go index ba66bde..af6aaab 100644 --- a/lib/ai.go +++ b/lib/ai.go @@ -21,8 +21,9 @@ type myAI struct { iscenes []IScene tickets Tickets //票池 Obs Observer - // useCount uint32 //计数(压入的用户数) + // useCount uint32 //计数(压入的用户数) useCountTotal uint32 //总数 + cache sync.Mutex //数据缓存锁 lock sync.Mutex //合并数据锁 config *storage.Config //配置 ReportMap map[int]map[string]*Statistics //测试报告 key1:场景 key2:协议 @@ -81,7 +82,7 @@ func (m *myAI) Start() bool { for { m.tickets.Take(int32(m.config.Global.UserCount), m.config.Global.IntervalS) go func() { - robot := NewRobot(m.config) + robot := NewRobot(m) robot.SetScenes(m.iscenes) m.AppendRobot(robot) robot.Start() diff --git a/lib/robot.go b/lib/robot.go index cf3b418..e5de1a5 100644 --- a/lib/robot.go +++ b/lib/robot.go @@ -32,45 +32,48 @@ type IRobot interface { type Robot struct { IStore + ai *myAI scene IScene //场景 account string sid string conn *websocket.Conn data map[string]interface{} //机器人缓存数据 status uint32 //状态 - lock sync.Mutex //数据缓存锁 - sceneQueue *Queue[IScene] //场景队列 - config *storage.Config //配置 - resultCh chan *CallResult //请求结果通道 + cache sync.Mutex + lock sync.Mutex //结果锁 + sceneQueue *Queue[IScene] //场景队列 + config *storage.Config //配置 + resultCh chan *CallResult //请求结果通道 // sceneResultCh chan *CallResult //场景结果通道 ReportMap map[int]map[string]*Statistics //测试报告 key1:场景序号 key2:协议 elipseTotal time.Duration } -func NewRobot(config *storage.Config) *Robot { +func NewRobot(ai *myAI) *Robot { robot := &Robot{ + ai: ai, data: make(map[string]interface{}), sceneQueue: NewQueue[IScene](), - config: config, + config: ai.config, resultCh: make(chan *CallResult, 1000), // sceneResultCh: make(chan *CallResult, 50), ReportMap: make(map[int]map[string]*Statistics), } - robot.Store("sid", config.Global.SId) + robot.Store("sid", ai.config.Global.SId) return robot } //存数据 func (a *Robot) Store(key string, data interface{}) { - defer a.lock.Unlock() - a.lock.Lock() + defer a.cache.Unlock() + a.cache.Lock() a.data[key] = data } //取数据 func (a *Robot) Get(key string) interface{} { - defer a.lock.Unlock() - a.lock.Lock() + defer a.cache.Unlock() + a.cache.Lock() return a.data[key] } diff --git a/test/robot_test.go b/test/robot_test.go index 3f959bf..64e347f 100644 --- a/test/robot_test.go +++ b/test/robot_test.go @@ -56,7 +56,7 @@ func TestMerge(t *testing.T) { } ma, _ := lib.NewAI(lib.AIParam{Config: config}) - robot1 := lib.NewRobot(config) + robot1 := lib.NewRobot(ma) robot1.ReportMap = make(map[int]map[string]*lib.Statistics) robot1.ReportMap[1] = make(map[string]*lib.Statistics) robot1.ReportMap[1]["user.login"] = &lib.Statistics{ @@ -70,7 +70,7 @@ func TestMerge(t *testing.T) { } ma.AppendRobot(robot1) /////////////// - robot2 := lib.NewRobot(config) + robot2 := lib.NewRobot(ma) robot2.ReportMap = make(map[int]map[string]*lib.Statistics) robot2.ReportMap[1] = make(map[string]*lib.Statistics) robot2.ReportMap[1]["user.login"] = &lib.Statistics{ @@ -84,7 +84,7 @@ func TestMerge(t *testing.T) { } ma.AppendRobot(robot2) ////// - robot3 := lib.NewRobot(config) + robot3 := lib.NewRobot(ma) robot3.ReportMap = make(map[int]map[string]*lib.Statistics) robot3.ReportMap[1] = make(map[string]*lib.Statistics) robot3.ReportMap[1]["user.login"] = &lib.Statistics{ @@ -99,7 +99,7 @@ func TestMerge(t *testing.T) { ma.AppendRobot(robot3) ma.MergeResult() - robot4 := lib.NewRobot(config) + robot4 := lib.NewRobot(ma) robot4.ReportMap = make(map[int]map[string]*lib.Statistics) robot4.ReportMap[1] = make(map[string]*lib.Statistics) robot4.ReportMap[1]["user.login"] = &lib.Statistics{ @@ -123,38 +123,38 @@ func TestMerge(t *testing.T) { } } func divide(a int, b int) int { - if a== math.MinInt32 && b == -1 { - return math.MaxInt32 - } - var sign = 1 - if a>0 && b<0 || a<0 && b>0 { - sign = -1 - } - if a<0 { - a = -a - } - if b<0 { - b = -b - } - var res int64 - for { - if a < b { break } - // a< b ,res = 0 - var cur = 1 - var temp = b - for temp + temp <= a { - temp += temp - cur += cur - } - res += int64(cur ) - a -= temp - } - return int(res*int64(sign)) + if a == math.MinInt32 && b == -1 { + return math.MaxInt32 + } + var sign = 1 + if a > 0 && b < 0 || a < 0 && b > 0 { + sign = -1 + } + if a < 0 { + a = -a + } + if b < 0 { + b = -b + } + var res int64 + for { + if a < b { + break + } + // a< b ,res = 0 + var cur = 1 + var temp = b + for temp+temp <= a { + temp += temp + cur += cur + } + res += int64(cur) + a -= temp + } + return int(res * int64(sign)) } - - func TestDiv(t *testing.T) { res := lib.FormatFloatCommon(float64(3 / 10))