使用 PostgreSQL 统一同步与异步非文本任务的并发准入、持久化等待和 Worker 容量分配,并将生产 API 与独立 Worker 角色拆分。 补充策略管理、共享契约、OpenAPI、Kubernetes 双节点 Worker 清单及跨节点验收脚本;未默认启用任何生产 queue_size 策略。 已在原基线完成 Go、前端、迁移、Shell、Kustomize 与长任务容量验收;合入最新主干后将重新执行发布门禁。
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package runner
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestRequestExecutionContextCancelsBeforeSubmission(t *testing.T) {
|
|
requestCtx, cancelRequest := context.WithCancel(context.Background())
|
|
serverCtx, cancelServer := context.WithCancel(context.Background())
|
|
defer cancelServer()
|
|
ctx, cancel := NewRequestExecutionContext(requestCtx, serverCtx)
|
|
defer cancel()
|
|
|
|
cancelRequest()
|
|
select {
|
|
case <-ctx.Done():
|
|
case <-time.After(time.Second):
|
|
t.Fatal("request context did not cancel before upstream submission")
|
|
}
|
|
}
|
|
|
|
func TestRequestExecutionContextSurvivesDisconnectAfterSubmission(t *testing.T) {
|
|
requestCtx, cancelRequest := context.WithCancel(context.Background())
|
|
serverCtx, cancelServer := context.WithCancel(context.Background())
|
|
ctx, cancel := NewRequestExecutionContext(requestCtx, serverCtx)
|
|
defer cancel()
|
|
|
|
markUpstreamSubmissionStarted(ctx)
|
|
cancelRequest()
|
|
select {
|
|
case <-ctx.Done():
|
|
t.Fatal("client disconnect propagated after upstream submission")
|
|
case <-time.After(50 * time.Millisecond):
|
|
}
|
|
|
|
cancelServer()
|
|
select {
|
|
case <-ctx.Done():
|
|
case <-time.After(time.Second):
|
|
t.Fatal("server shutdown did not cancel detached execution")
|
|
}
|
|
}
|
|
|
|
func TestRequestExecutionContextPreservesRequestValues(t *testing.T) {
|
|
type contextKey struct{}
|
|
requestCtx := context.WithValue(context.Background(), contextKey{}, "trace-value")
|
|
ctx, cancel := NewRequestExecutionContext(requestCtx, context.Background())
|
|
defer cancel()
|
|
|
|
if got := ctx.Value(contextKey{}); got != "trace-value" {
|
|
t.Fatalf("request context value = %v, want trace-value", got)
|
|
}
|
|
}
|