feat: implement V2 alert center and scoped alert governance
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user