52 lines
1.5 KiB
Go
52 lines
1.5 KiB
Go
package business
|
|
|
|
import (
|
|
"github.com/glebarez/sqlite"
|
|
"github.com/robfig/cron/v3"
|
|
"gorm.io/gorm"
|
|
datatask "kra/internal/data/task"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestAlertScheduleUpgradePreservesDisabledTaskAndUsesShanghaiMidnight(t *testing.T) {
|
|
db, err := gorm.Open(sqlite.Open(filepath.Join(t.TempDir(), "alert-schedule.db")), &gorm.Config{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
pool, _ := db.DB()
|
|
t.Cleanup(func() { _ = pool.Close() })
|
|
for _, step := range datatask.Migrations() {
|
|
if err := step.Migrate(db); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
if err := db.Exec("INSERT INTO sys_timed_tasks(name,method_name,spec,with_seconds,enabled) VALUES('历史预警任务','alertTriggerTask','*/5 * * * *',0,0)").Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for i := 0; i < 2; i++ {
|
|
if err := migrateAlertSurface(db); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
var rows []struct {
|
|
Spec string
|
|
Enabled bool
|
|
}
|
|
if err := db.Table("sys_timed_tasks").Where("method_name='alertTriggerTask'").Scan(&rows).Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(rows) != 1 || rows[0].Enabled || rows[0].Spec != alertDetectionTask.Spec {
|
|
t.Fatalf("迁移不应重复或启用管理员停用的任务: %+v", rows)
|
|
}
|
|
schedule, err := cron.ParseStandard(rows[0].Spec)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
next := schedule.Next(time.Date(2026, 11, 5, 12, 0, 0, 0, time.UTC))
|
|
if next.UTC() != time.Date(2026, 11, 5, 16, 0, 0, 0, time.UTC) {
|
|
t.Fatalf("没有按上海零点执行: %v", next)
|
|
}
|
|
}
|