mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-21 23:22:34 +01:00
fix(channelserver): fix flaky integration tests from 3 isolation issues
- testhelpers_db: retry truncateAllTables up to 3 times on deadlock, which occurs when previous tests' goroutines still hold DB connections - handlers_rengoku_integration_test: restore rengoku_score table after TestRengokuData_SaveOnDBError drops it, preventing cascading failures in all subsequent rengoku tests - client_connection_simulation_test: fix TestClientConnection_PacketDuringLogout to accept both race outcomes (save-wins or logout-wins) since both handlers independently load from DB and last-writer-wins is valid
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
"strings"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"erupe-ce/server/channelserver/compression/nullcomp"
|
||||
"github.com/jmoiron/sqlx"
|
||||
@@ -250,6 +251,8 @@ func findProjectRoot(t *testing.T) string {
|
||||
}
|
||||
|
||||
// truncateAllTables truncates all tables in the public schema for test isolation.
|
||||
// It retries on deadlock, which can occur when a previous test's goroutines still
|
||||
// hold connections with in-flight DB operations.
|
||||
func truncateAllTables(t *testing.T, db *sqlx.DB) {
|
||||
t.Helper()
|
||||
|
||||
@@ -268,11 +271,22 @@ func truncateAllTables(t *testing.T, db *sqlx.DB) {
|
||||
tables = append(tables, name)
|
||||
}
|
||||
|
||||
if len(tables) > 0 {
|
||||
_, err := db.Exec("TRUNCATE " + strings.Join(tables, ", ") + " CASCADE")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to truncate tables: %v", err)
|
||||
if len(tables) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
stmt := "TRUNCATE " + strings.Join(tables, ", ") + " CASCADE"
|
||||
const maxRetries = 3
|
||||
for attempt := 1; attempt <= maxRetries; attempt++ {
|
||||
_, err := db.Exec(stmt)
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
if attempt < maxRetries {
|
||||
time.Sleep(50 * time.Millisecond)
|
||||
continue
|
||||
}
|
||||
t.Fatalf("Failed to truncate tables after %d attempts: %v", maxRetries, err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user