fix: harden single-machine load handling
This commit is contained in:
@@ -2,7 +2,9 @@ package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestHistoryQueriesForMessagesGroupsRangesByTopic(t *testing.T) {
|
||||
@@ -51,6 +53,40 @@ func TestClassifyPublishErrorTreatsClosedConnectionAsUnknownSocketError(t *testi
|
||||
}
|
||||
}
|
||||
|
||||
func TestScenarioUsersScaleWithConfiguredCapacity(t *testing.T) {
|
||||
tests := []struct {
|
||||
users int
|
||||
group int
|
||||
mixedP2P int
|
||||
mixedGroup int
|
||||
}{
|
||||
{users: 1000, group: 500, mixedP2P: 300, mixedGroup: 250},
|
||||
{users: 600, group: 300, mixedP2P: 180, mixedGroup: 150},
|
||||
}
|
||||
for _, tc := range tests {
|
||||
if got := scaledUsers(tc.users, 1, 2); got != tc.group {
|
||||
t.Fatalf("users=%d group=%d want=%d", tc.users, got, tc.group)
|
||||
}
|
||||
if got := scaledUsers(tc.users, 3, 10); got != tc.mixedP2P {
|
||||
t.Fatalf("users=%d mixed p2p=%d want=%d", tc.users, got, tc.mixedP2P)
|
||||
}
|
||||
if got := scaledUsers(tc.users, 1, 4); got != tc.mixedGroup {
|
||||
t.Fatalf("users=%d mixed group=%d want=%d", tc.users, got, tc.mixedGroup)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewHistoryQueryIncludesInterleavedSequenceRange(t *testing.T) {
|
||||
messages := make([]AcceptedMessage, 10)
|
||||
for i := range messages {
|
||||
messages[i] = AcceptedMessage{ClientMid: fmt.Sprintf("mid-%d", i), Seq: int64(100 + i*2)}
|
||||
}
|
||||
query := newHistoryQuery(nil, "p2p-one", messages, 10)
|
||||
if query.since != 100 || query.before != 119 || query.limit != 19 {
|
||||
t.Fatalf("history query range=%d-%d limit=%d want=100-119/19", query.since, query.before, query.limit)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMergeMessageLedgersPrefersPeerObservationAndAck(t *testing.T) {
|
||||
senderEcho := AcceptedMessage{ClientMid: "mid-1", SenderMachine: "a", PeerMachine: "a", Seq: 10}
|
||||
peerDelivery := AcceptedMessage{ClientMid: "mid-1", SenderMachine: "a", PeerMachine: "b", PeerIndex: 7, Seq: 10}
|
||||
@@ -65,3 +101,15 @@ func TestMergeMessageLedgersPrefersPeerObservationAndAck(t *testing.T) {
|
||||
t.Fatalf("ACK ledger was not authoritative: %+v", merged)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCloseScheduleInterleavesLogicalAgents(t *testing.T) {
|
||||
cfg := &Config{CloseRamp: "60s"}
|
||||
intervalA, delayA := closeSchedule(cfg, "a", 601)
|
||||
intervalB, delayB := closeSchedule(cfg, "b", 601)
|
||||
if intervalA != 200*time.Millisecond || intervalB != intervalA {
|
||||
t.Fatalf("intervals: a=%s b=%s, want 200ms", intervalA, intervalB)
|
||||
}
|
||||
if delayA != 0 || delayB != 100*time.Millisecond {
|
||||
t.Fatalf("delays: a=%s b=%s, want 0/100ms", delayA, delayB)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user