64 lines
1.9 KiB
Go
64 lines
1.9 KiB
Go
package health
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
|
|
"gl/domain/ledger"
|
|
)
|
|
|
|
type databaseStub struct{ err error }
|
|
|
|
func (s databaseStub) Ping(context.Context) error { return s.err }
|
|
|
|
type settlementStub struct {
|
|
stats ledger.SettlementStats
|
|
err error
|
|
}
|
|
|
|
func (s settlementStub) Stats(context.Context) (ledger.SettlementStats, error) {
|
|
return s.stats, s.err
|
|
}
|
|
|
|
func TestCheckReportsDatabaseReadiness(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
name string
|
|
db Database
|
|
ready bool
|
|
}{
|
|
{name: "not connected", db: nil, ready: false},
|
|
{name: "ready", db: databaseStub{}, ready: true},
|
|
{name: "unavailable", db: databaseStub{err: errors.New("down")}, ready: false},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
got := NewService(tc.db).Check(context.Background())
|
|
if got.Serving != tc.ready || got.DatabaseReady != tc.ready {
|
|
t.Fatalf("unexpected status: %+v", got)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCheckReportsSettlementBacklog(t *testing.T) {
|
|
monitor := settlementStub{stats: ledger.SettlementStats{Pending: 2, Retryable: 3, OldestPendingSeconds: 60}}
|
|
got := NewService(databaseStub{}, monitor).Check(context.Background())
|
|
if !got.Serving || !got.DatabaseReady || !got.SettlementEnabled || !got.SettlementReady || got.SettlementStats != monitor.stats {
|
|
t.Fatalf("unexpected status: %+v", got)
|
|
}
|
|
}
|
|
|
|
func TestCheckExposesManualReviewWithoutStoppingSettlementQueue(t *testing.T) {
|
|
got := NewService(databaseStub{}, settlementStub{stats: ledger.SettlementStats{ManualReview: 1}}).Check(context.Background())
|
|
if !got.Serving || !got.SettlementReady || got.SettlementStats.ManualReview != 1 {
|
|
t.Fatalf("unexpected status: %+v", got)
|
|
}
|
|
}
|
|
|
|
func TestCheckReportsSettlementQueryFailure(t *testing.T) {
|
|
got := NewService(databaseStub{}, settlementStub{err: errors.New("query failed")}).Check(context.Background())
|
|
if !got.Serving || got.SettlementReady {
|
|
t.Fatalf("unexpected status: %+v", got)
|
|
}
|
|
}
|