mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-11 00:14:00 +00:00
fix(multiplayer): make match promotion replay lifecycle-safe
This commit is contained in:
@@ -12,6 +12,7 @@ func TestAcceptedMatchSQLPreservesAtomicProposalToMatchBoundary(t *testing.T) {
|
||||
AcceptedProposalLockSQL: {"FOR UPDATE", "proposal_id = $1"},
|
||||
AcceptedProposalParticipantsSQL: {"response", "ORDER BY player_id", "FOR UPDATE"},
|
||||
AcceptedMatchInsertSQL: {"'ALLOCATING'", "ON CONFLICT (match_id) DO NOTHING"},
|
||||
AcceptedMatchSelectSQL: {"playlist", "region", "protocol_version", "arena_path", "FOR UPDATE"},
|
||||
AcceptedTicketSQL: {"state = 'ACCEPTED'", "state = 'PROPOSED'", "revision = revision + 1"},
|
||||
AcceptedMatchParticipantInsertSQL: {"match_participants", "slot", "team"},
|
||||
}
|
||||
@@ -24,6 +25,12 @@ func TestAcceptedMatchSQLPreservesAtomicProposalToMatchBoundary(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestAcceptedMatchReplayDoesNotDependOnMutableLifecycleFields(t *testing.T) {
|
||||
if contains(AcceptedMatchSelectSQL, "state") || contains(AcceptedMatchSelectSQL, "server_id") {
|
||||
t.Fatalf("accepted promotion replay is coupled to mutable lifecycle fields: %s", AcceptedMatchSelectSQL)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAcceptedMatchPlanRejectsInvalidPlansBeforeDatabaseUse(t *testing.T) {
|
||||
valid := AcceptedMatchPlan{
|
||||
MatchID: "match-1", ProposalID: "proposal-1", Region: "EU", Protocol: 1,
|
||||
|
||||
Reference in New Issue
Block a user