修复初始化状态被旧配置误判
Some checks are pending
Security Checks / security (push) Waiting to run

This commit is contained in:
smail 2026-08-30 20:09:11 +08:00
parent ffa7378480
commit 00a87948c2
3 changed files with 39 additions and 0 deletions

View File

@ -252,6 +252,7 @@ func SetDatabaseSettingsWithOptions(ctx *context.Context, settings DatabaseSetti
previousConfig := *configData
candidateConfig := *configData
markSetupInProgress(&candidateConfig)
candidateConfig.DbType = dbType
candidateConfig.DbDSN = dbDSN
if err = config.WriteConfig(&candidateConfig); err != nil {
@ -269,6 +270,16 @@ func SetDatabaseSettingsWithOptions(ctx *context.Context, settings DatabaseSetti
return nil
}
func markSetupInProgress(cfg *config.Config) {
if cfg == nil {
return
}
cfg.IsInit = false
if !cfg.SetupState.Valid() {
cfg.SetupState = config.SetupStateBootstrap
}
}
func closeDatabaseInstance() {
if db.Instance == nil {
return

View File

@ -10,10 +10,37 @@ import (
"testing"
"time"
"git.pcux.cn/xuans/Smail/config"
"github.com/go-sql-driver/mysql"
"github.com/lib/pq"
)
func TestMarkSetupInProgressClearsLegacyInitializationFlag(t *testing.T) {
cfg := &config.Config{IsInit: true}
markSetupInProgress(cfg)
if cfg.IsInit {
t.Fatal("legacy initialization flag must be cleared during setup")
}
if cfg.SetupState != config.SetupStateBootstrap {
t.Fatalf("setup state = %q, want %q", cfg.SetupState, config.SetupStateBootstrap)
}
}
func TestMarkSetupInProgressPreservesExplicitSetupState(t *testing.T) {
cfg := &config.Config{IsInit: true, SetupState: config.SetupStateNew}
markSetupInProgress(cfg)
if cfg.IsInit {
t.Fatal("legacy initialization flag must be cleared during setup")
}
if cfg.SetupState != config.SetupStateNew {
t.Fatalf("setup state = %q, want %q", cfg.SetupState, config.SetupStateNew)
}
}
type fakeSetupDB struct {
pingErrors []error
pingCalls int

View File

@ -21,6 +21,7 @@ func SetDomainSettings(smtpDomain, webDomain, multiDomains string) error {
if err != nil {
return errors.Wrap(err)
}
markSetupInProgress(configData)
smtpDomain, err = validation.NormalizeDomain(smtpDomain)
if err != nil {