feat: sync multilayer td integration
This commit is contained in:
parent
20a310f6ca
commit
766c5db992
491 changed files with 26235 additions and 35340 deletions
79
internal/store/postgres/updatestate_delivery_test.go
Normal file
79
internal/store/postgres/updatestate_delivery_test.go
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
package postgres
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/jackc/pgx/v5"
|
||||
"github.com/jackc/pgx/v5/pgconn"
|
||||
|
||||
"telesrv/internal/domain"
|
||||
)
|
||||
|
||||
type captureUpdateStateDB struct {
|
||||
sql string
|
||||
args []any
|
||||
}
|
||||
|
||||
func (d *captureUpdateStateDB) Exec(_ context.Context, sql string, args ...any) (pgconn.CommandTag, error) {
|
||||
d.sql = sql
|
||||
d.args = append([]any(nil), args...)
|
||||
return pgconn.NewCommandTag("INSERT 0 1"), nil
|
||||
}
|
||||
|
||||
func (*captureUpdateStateDB) Query(context.Context, string, ...any) (pgx.Rows, error) {
|
||||
panic("unexpected Query")
|
||||
}
|
||||
|
||||
func (*captureUpdateStateDB) QueryRow(context.Context, string, ...any) pgx.Row {
|
||||
panic("unexpected QueryRow")
|
||||
}
|
||||
|
||||
func TestCommitDeliveredStateUsesOneAtomicBaselineUpsert(t *testing.T) {
|
||||
db := &captureUpdateStateDB{}
|
||||
store := NewUpdateStateStore(db)
|
||||
state := domain.UpdateState{Pts: 9, Qts: 2, Date: 90, Seq: 3}
|
||||
if err := store.CommitDeliveredState(context.Background(), [8]byte{4}, 1004, state, domain.UpdateStateCommitDeliveredAndObservedBaseline); err != nil {
|
||||
t.Fatalf("commit baseline: %v", err)
|
||||
}
|
||||
if len(db.args) != 7 || db.args[6] != true {
|
||||
t.Fatalf("baseline args = %#v, want final true mode", db.args)
|
||||
}
|
||||
for _, fragment := range []string{
|
||||
"pts = GREATEST(update_states.pts, EXCLUDED.pts)",
|
||||
"WHEN $7 THEN GREATEST(update_states.observed_pts, EXCLUDED.observed_pts)",
|
||||
} {
|
||||
if !strings.Contains(db.sql, fragment) {
|
||||
t.Fatalf("atomic commit SQL missing %q:\n%s", fragment, db.sql)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCommitDeliveredOnlyLeavesObservedUntouched(t *testing.T) {
|
||||
db := &captureUpdateStateDB{}
|
||||
store := NewUpdateStateStore(db)
|
||||
if err := store.CommitDeliveredState(context.Background(), [8]byte{5}, 1005, domain.UpdateState{Pts: 7}, domain.UpdateStateCommitDeliveredOnly); err != nil {
|
||||
t.Fatalf("commit delivered-only: %v", err)
|
||||
}
|
||||
if len(db.args) != 7 || db.args[6] != false {
|
||||
t.Fatalf("delivered-only args = %#v, want final false mode", db.args)
|
||||
}
|
||||
if !strings.Contains(db.sql, "ELSE update_states.observed_pts") {
|
||||
t.Fatalf("delivered-only SQL can overwrite observed:\n%s", db.sql)
|
||||
}
|
||||
}
|
||||
|
||||
func TestObserveClientStateDoesNotFabricateConfirmedCursor(t *testing.T) {
|
||||
db := &captureUpdateStateDB{}
|
||||
store := NewUpdateStateStore(db)
|
||||
if err := store.ObserveClientState(context.Background(), [8]byte{6}, 1006, domain.UpdateState{Pts: 11, Qts: 4, Date: 110, Seq: 2}); err != nil {
|
||||
t.Fatalf("observe request: %v", err)
|
||||
}
|
||||
if !strings.Contains(db.sql, "VALUES ($1, $2, 0, 0, 0, 0, $3)") {
|
||||
t.Fatalf("observed-only insert fabricated confirmed values:\n%s", db.sql)
|
||||
}
|
||||
if len(db.args) != 3 || db.args[2] != 11 {
|
||||
t.Fatalf("observed-only args = %#v, want auth/user/pts", db.args)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue