发布 0.2.0:模型池自愈、探测修正、任务异步触发与删除加固
This commit is contained in:
@@ -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("不存在的任务应报错")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user