package load_test import ( "fmt" "testing" "time" "git.asio.asia/nixevol/NixMsg/test/accept" "git.asio.asia/nixevol/NixMsg/test/harness" ) const ( epPassword = "password1234" // 本机短时压测目标:几十连接收发。不做 1000 / 10 分钟(见 DEVIATIONS)。 q3LivePairs = 16 // 32 个端、16 对收发 ) // TestQ3LiveShortBurst 短时几十连接登录并完成单聊收发。 func TestQ3LiveShortBurst(t *testing.T) { srv, err := harness.Start(harness.Options{}) if err != nil { t.Fatal(err) } defer func() { _ = srv.Stop() }() ac := accept.AdminLogin(t, srv) type pair struct { a, b string } pairs := make([]pair, 0, q3LivePairs) for i := 0; i < q3LivePairs; i++ { a := fmt.Sprintf("q3la%04d", i) b := fmt.Sprintf("q3lb%04d", i) accept.CreateEndpoint(t, ac, a, epPassword) accept.CreateEndpoint(t, ac, b, epPassword) pairs = append(pairs, pair{a: a, b: b}) } sessions := make([]*accept.MQTTSession, 0, q3LivePairs*2) defer func() { for _, s := range sessions { s.Close() } }() for _, p := range pairs { sa := accept.MQTTLogin(t, srv.HTTPBase, p.a, epPassword) sb := accept.MQTTLogin(t, srv.HTTPBase, p.b, epPassword) sessions = append(sessions, sa, sb) } for i, p := range pairs { sa := sessions[i*2] sb := sessions[i*2+1] msgID := fmt.Sprintf("q3-load-%d", i) resp := sa.Request(t, map[string]any{ "v": 1, "type": "send", "rid": fmt.Sprintf("ls%d", i), "id": msgID, "to": map[string]any{"kind": "endpoint", "id": p.b}, "body": map[string]any{"enc": "utf8", "data": "burst"}, "delay_ms": int64(0), }) if !resp.OK { t.Fatalf("pair %d send: %+v", i, resp) } msg := sb.WaitType(t, "msg", 15*time.Second) if msg["id"] != msgID { t.Fatalf("pair %d want %s got %v", i, msgID, msg) } ack := sb.Request(t, map[string]any{ "v": 1, "type": "ack", "rid": fmt.Sprintf("la%d", i), "from": p.a, "id": msgID, }) if !ack.OK { t.Fatalf("pair %d ack: %+v", i, ack) } } t.Logf("短时压测通过:%d 连接、%d 对单聊收发成功(未做 1000 连接 / 10 分钟)", q3LivePairs*2, q3LivePairs) }