fix(backend): dbErr 503 degradation for connection-class DB errors

This commit is contained in:
2026-09-06 19:53:19 +08:00
parent 04095b5438
commit a11bf28155
8 changed files with 61 additions and 18 deletions
+27
View File
@@ -1,11 +1,18 @@
package api
import (
"errors"
"fmt"
"net/http"
"net/http/httptest"
"syscall"
"testing"
"time"
"github.com/gin-gonic/gin"
"github.com/jackc/pgx/v5/pgconn"
"github.com/jackc/puddle/v2"
"booklib/internal/config"
"booklib/internal/redispkg"
)
@@ -23,3 +30,23 @@ func TestHealthz(t *testing.T) {
t.Fatalf("healthz = %d, want 200", w.Code)
}
}
func TestDBErrStatus(t *testing.T) {
for _, tc := range []struct {
e error
want int
}{
{&pgconn.PgError{Code: "57P01"}, http.StatusServiceUnavailable}, // PG 停机:池内连接被服务端断
{&pgconn.PgError{Code: "08006"}, http.StatusServiceUnavailable},
{fmt.Errorf("dial: %w", syscall.ECONNREFUSED), http.StatusServiceUnavailable},
{puddle.ErrClosedPool, http.StatusServiceUnavailable},
{errors.New("boom"), http.StatusInternalServerError},
} {
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
dbErr(c, tc.e)
if w.Code != tc.want {
t.Errorf("dbErr(%v) = %d, want %d", tc.e, w.Code, tc.want)
}
}
}