package model import ( "os" "strings" "testing" "github.com/QuantumNous/new-api/common" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gorm.io/driver/postgres" "gorm.io/gorm" ) // Opt-in only: the deployment harness restores a snapshot into an isolated // disposable database. No workers, relay calls or background jobs are started. func TestAdaptiveDeploymentUpgradeFromSnapshot(t *testing.T) { dsn := os.Getenv("ADAPTIVE_UPGRADE_DSN") if dsn == "" { t.Skip("isolated upgrade snapshot unset") } require.True(t, strings.HasSuffix(dsn, "/adaptive_upgrade34?sslmode=disable")) db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) require.NoError(t, err) var before, after struct { Users int64 Quota int64 Used int64 Channels int64 Runs int64 } query := "SELECT (SELECT count(*) FROM users) AS users, (SELECT sum(quota) FROM users) AS quota, (SELECT sum(used_quota) FROM users) AS used, (SELECT count(*) FROM channels) AS channels, (SELECT count(*) FROM detection_runs) AS runs" require.NoError(t, db.Raw(query).Scan(&before).Error) conn, err := db.DB() require.NoError(t, err) require.NoError(t, conn.Close()) oldDB, oldMaster, oldMain, oldLog := DB, common.IsMasterNode, common.MainDatabaseType(), common.LogDatabaseType() t.Cleanup(func() { DB = oldDB; common.IsMasterNode = oldMaster; common.SetDatabaseTypes(oldMain, oldLog) }) common.IsMasterNode = true t.Setenv("SQL_DSN", dsn) for range 2 { require.NoError(t, InitDB()) require.True(t, DB.Migrator().HasTable(&DetectionSchedule{})) require.NoError(t, DB.Raw(query).Scan(&after).Error) assert.Equal(t, before, after) conn, err = DB.DB() require.NoError(t, err) require.NoError(t, conn.Close()) } t.Logf("snapshot preserved: users=%d channels=%d runs=%d; wallet totals unchanged", before.Users, before.Channels, before.Runs) }