fix(backend): dbErr 503 degradation for connection-class DB errors
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user