gitee.com/KyleChenSource/lib-robot@v1.0.2/robottest/common/brutetest/brutetest_task.go (about)

     1  package brutetest
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"gitee.com/KyleChenSource/lib-robot/robottest/log"
     7  )
     8  
     9  const (
    10  	task_split_limit = 15000 // 进行拆分的case数量
    11  	task_split_cnt   = 10000 // 拆分后每个task数量
    12  )
    13  
    14  var (
    15  	BrutetestTaskChan = make(chan *BrutetestTask, 10240)
    16  )
    17  
    18  type BrutetestTask struct {
    19  	Cid   int
    20  	Skip  uint64 // 其实消息数
    21  	Limit uint64 // 当前任务的次数限制
    22  }
    23  
    24  func taskDispatch() {
    25  	for cid, cnfs := range BrutetestCaselistMap {
    26  		gen := cnfs[0].Generator(0, 0)
    27  		if gen.Count() > task_split_limit {
    28  			c := uint64(gen.Count()/task_split_cnt) + 1
    29  			p := gen.Count()/c + 1
    30  			for j := uint64(0); j < c; j++ {
    31  				skip := p * j
    32  				limit := (gen.Count() - skip) % (p + 1)
    33  				if limit == 0 {
    34  					break
    35  				}
    36  				BrutetestTaskChan <- &BrutetestTask{
    37  					Cid:   cid,
    38  					Skip:  skip,
    39  					Limit: limit,
    40  				}
    41  			}
    42  			log.LogDebug("BrutetestTask Generator msg:%s casecnt:%d msgcnt:%d split cnt:%d", cnfs[0].MsgName, len(cnfs), gen.Count(), c)
    43  		} else {
    44  
    45  			BrutetestTaskChan <- &BrutetestTask{
    46  				Cid:   cid,
    47  				Skip:  0,
    48  				Limit: 0,
    49  			}
    50  			log.LogDebug("BrutetestTask Generator msg:%s casecnt:%d msgcnt:%d", cnfs[0].MsgName, len(cnfs), gen.Count())
    51  		}
    52  	}
    53  
    54  	close(BrutetestTaskChan)
    55  	log.LogInfo("BrutetestTask Generator End, Chan Close")
    56  }
    57  
    58  func BrutetestTaskCreate(file string) (taskCnt int, err error) {
    59  	err = BruteTestCreate(file)
    60  	if err != nil {
    61  		return
    62  	}
    63  
    64  	msgCnt := 0
    65  	for _, cnfs := range BrutetestCaselistMap {
    66  		gen := cnfs[0].Generator(0, 0)
    67  		if gen == nil {
    68  			err = fmt.Errorf("BrutetestTask msg:%s casecnt:%d generator nil", cnfs[0].MsgName, len(cnfs))
    69  			return
    70  		}
    71  
    72  		msgCnt += int(gen.Count())
    73  		if gen.Count() > task_split_limit {
    74  			c := (int(gen.Count()/task_split_cnt) + 1)
    75  			taskCnt += c
    76  			log.LogInfo("BrutetestTask msg:%s casecnt:%d msgcnt:%d(%d) split cnt:%d", cnfs[0].MsgName, len(cnfs), gen.Count(), gen.RealCount(), c)
    77  		} else {
    78  			taskCnt++
    79  			log.LogInfo("BrutetestTask msg:%s casecnt:%d msgcnt:%d", cnfs[0].MsgName, len(cnfs), gen.Count())
    80  		}
    81  	}
    82  
    83  	log.LogInfo("BrutetestTask cnt:%d msgcnt:%d taskcnt:%d", len(BrutetestCaselistMap), msgCnt, taskCnt)
    84  
    85  	go taskDispatch()
    86  
    87  	return
    88  }