发布 0.2.0:模型池自愈、探测修正、任务异步触发与删除加固
CI / test (push) Successful in 32s
Release / release (push) Successful in 52s

This commit is contained in:
2026-07-10 20:25:37 +08:00
parent dbba1f4905
commit 7706f59549
19 changed files with 978 additions and 107 deletions
+34
View File
@@ -3,6 +3,7 @@ package service
import (
"context"
"encoding/json"
"errors"
"fmt"
"strings"
"sync"
@@ -801,3 +802,36 @@ func TestNotifyEventsSnatchVarsMerged(t *testing.T) {
}
}
}
func TestTriggerTaskAsyncAndDedup(t *testing.T) {
client := &blockingClient{fakeClient: &fakeClient{}, started: make(chan struct{}, 1), release: make(chan struct{})}
configs, tasks, db := newTenantDeleteEnv(t, client)
target, _ := seedDeleteTenants(t, db)
setTenantPrivateKey(t, configs, target.ID)
task := createHealthTask(t, tasks, target.ID)
ctx := context.Background()
// 触发立即返回,执行在后台开始
if err := tasks.TriggerTask(ctx, task.ID); err != nil {
t.Fatalf("TriggerTask: %v", err)
}
<-client.started
// 在途重复触发被拒;cron 重叠执行静默跳过
if err := tasks.TriggerTask(ctx, task.ID); !errors.Is(err, ErrTaskRunning) {
t.Errorf("在途重复触发应返回 ErrTaskRunning: %v", err)
}
if entry := tasks.execute(task.ID); entry != nil {
t.Error("在途时 cron 重叠执行应静默跳过")
}
close(client.release)
tasks.Stop() // 等待后台执行收尾
assertCount(t, db, &model.TaskLog{}, "task_id = ?", []any{task.ID}, 1)
// 执行权已释放,可再次触发;不存在的任务报错
if !tasks.beginRun(task.ID) {
t.Error("执行结束后应可重新获得执行权")
}
tasks.endRun(task.ID)
if err := tasks.TriggerTask(ctx, 9999); err == nil {
t.Error("不存在的任务应报错")
}
}