Sync production source including routing, billing, Astra detection and public uptime. Update custom build instructions and license packaging.
52 lines
1.8 KiB
Go
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)
|
|
}
|