Files
new-api-custom/model/detection_upgrade_test.go
cneicy ceddfd3d6b feat: sync deployed v1.0.0-rc.38-custom.42
Sync production source including routing, billing, Astra detection and public uptime. Update custom build instructions and license packaging.
2026-09-26 04:49:11 +08:00

52 lines
1.8 KiB
Go

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)
}