battle_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package battle
  2. import (
  3. "f1-game/internal/code"
  4. "f1-game/internal/pb"
  5. "os"
  6. "testing"
  7. "time"
  8. cherryFile "github.com/cherry-game/cherry/extend/file"
  9. clog "github.com/cherry-game/cherry/logger"
  10. cprofile "github.com/cherry-game/cherry/profile"
  11. "github.com/nats-io/nats.go"
  12. "google.golang.org/protobuf/proto"
  13. )
  14. func initBattleParanReqData() []byte {
  15. path := "../../etc/profile/dhc.json"
  16. cprofile.Init(path, "4")
  17. config := cprofile.GetConfig("battle_record")
  18. if config.LastError() != nil {
  19. clog.Warnf("[TestBattle100Calls] cprofile property not exists.")
  20. return nil
  21. }
  22. fileName, _ := cherryFile.JoinPath(cprofile.Path(), config.GetConfig("file").GetString("succeedPathKey"), "dev_pve_1050471_1011_20251112193523.bin")
  23. reqData, err := os.ReadFile(fileName)
  24. if err != nil {
  25. clog.Debugf("[BattleValidation] readReqData read latest file error (may not exist): %v", err)
  26. return nil
  27. }
  28. return reqData
  29. }
  30. func TestBattle(t *testing.T) {
  31. reqData := initBattleParanReqData()
  32. if reqData == nil {
  33. clog.Debugf("[BattleValidation] readReqData is nil")
  34. return
  35. }
  36. conn := getConnect()
  37. defer conn.Close()
  38. BattleValidation(conn, reqData)
  39. }
  40. func getConnect() *nats.Conn {
  41. conn, err := nats.Connect("nats://192.168.1.232:4222,nats://192.168.1.232:4223,nats://192.168.1.232:4224")
  42. if err != nil {
  43. clog.Warnf("[BattleValidation] nats connect error. err = %v", err)
  44. return nil
  45. }
  46. return conn
  47. }
  48. func BattleValidation(conn *nats.Conn, reqData []byte) bool {
  49. rsp, err := conn.Request(BATTLE_VERIFY_SUBJECT, reqData, 5*time.Second)
  50. if err != nil {
  51. clog.Warnf("[BattleValidation] Request replyData error. err = %v", err)
  52. return false
  53. }
  54. reply := &pb.BattleReplay{}
  55. err = proto.Unmarshal(rsp.Data, reply)
  56. if err != nil {
  57. clog.Warnf("[BattleValidation] Unmarshal replyData error. err = %v", err)
  58. return false
  59. }
  60. if code.IsFail(reply.ErrorCode) {
  61. clog.Warnf("[BattleValidation] battle fail. errorCode = %v, errorText = %v", reply.ErrorCode, reply.ErrorText)
  62. return false
  63. }
  64. // clog.Debugf("[BattleValidation] result = %v", reply)
  65. return true
  66. }
  67. func TestBattle100Calls(t *testing.T) {
  68. reqData := initBattleParanReqData()
  69. if reqData == nil {
  70. clog.Debugf("[TestBattle100Calls] readReqData is nil")
  71. return
  72. }
  73. conn := getConnect()
  74. defer conn.Close()
  75. const iterations = 1000
  76. var total time.Duration
  77. min := time.Duration(1<<63 - 1)
  78. var max time.Duration
  79. var success int
  80. for i := 1; i <= iterations; i++ {
  81. start := time.Now()
  82. result := BattleValidation(conn, reqData)
  83. dur := time.Since(start)
  84. total += dur
  85. if dur < min {
  86. min = dur
  87. }
  88. if dur > max {
  89. max = dur
  90. }
  91. if result {
  92. success++
  93. }
  94. clog.Debugf("[TestBattle100Calls] iter=%d duration=%v success=%v", i, dur, result)
  95. }
  96. avg := time.Duration(int64(total) / int64(iterations))
  97. clog.Debugf("[TestBattle100Calls] total=%v avg=%v min=%v max=%v success=%d/%d", total, avg, min, max, success, iterations)
  98. }