test: 补齐 Q2 验收与本机 Q3 弱网崩溃压测
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
package chaos_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"git.asio.asia/nixevol/NixMsg/test/accept"
|
||||
"git.asio.asia/nixevol/NixMsg/test/harness"
|
||||
)
|
||||
|
||||
// TestQ3CrashSubmitThenRestart:提交返回成功后杀进程,重启后续传(离线保留消息)。
|
||||
func TestQ3CrashSubmitThenRestart(t *testing.T) {
|
||||
srv, err := accept.StartManaged()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer func() { _ = srv.Cleanup() }()
|
||||
|
||||
hs := &harness.Server{
|
||||
HTTPBase: srv.HTTPBase,
|
||||
AdminHTTPBase: srv.AdminHTTPBase,
|
||||
AdminPassword: srv.AdminPassword,
|
||||
}
|
||||
ac := accept.AdminLogin(t, hs)
|
||||
accept.CreateEndpoint(t, ac, "q3crasha1", epPassword)
|
||||
accept.CreateEndpoint(t, ac, "q3crashb1", epPassword)
|
||||
|
||||
alice := accept.MQTTLogin(t, srv.HTTPBase, "q3crasha1", epPassword)
|
||||
sendOff := alice.Request(t, map[string]any{
|
||||
"v": 1, "type": "send", "rid": "cr1", "id": "q3-crash-1",
|
||||
"to": map[string]any{"kind": "endpoint", "id": "q3crashb1"},
|
||||
"body": map[string]any{"enc": "utf8", "data": "after-crash"},
|
||||
"delay_ms": int64(0),
|
||||
"offline": map[string]any{"keep": true, "ttl_seconds": int64(86400)},
|
||||
})
|
||||
if !sendOff.OK {
|
||||
t.Fatalf("submit before crash: %+v", sendOff)
|
||||
}
|
||||
alice.Close()
|
||||
|
||||
if err := srv.Kill(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
time.Sleep(200 * time.Millisecond)
|
||||
if err := srv.Restart(); err != nil {
|
||||
t.Fatalf("restart: %v", err)
|
||||
}
|
||||
|
||||
bob := accept.MQTTLogin(t, srv.HTTPBase, "q3crashb1", epPassword)
|
||||
defer bob.Close()
|
||||
msg := bob.WaitType(t, "msg", 20*time.Second)
|
||||
if msg["id"] != "q3-crash-1" {
|
||||
t.Fatalf("want q3-crash-1 after restart, got %v", msg)
|
||||
}
|
||||
bob.Request(t, map[string]any{"v": 1, "type": "ack", "rid": "cra1", "from": "q3crasha1", "id": "q3-crash-1"})
|
||||
}
|
||||
Reference in New Issue
Block a user