将 Worker 发现、路由画像、容量与执行传输抽象为平台无关接口,新增 Kubernetes 和静态容量适配器,并以 shadow 模式接入生产配置。 实现网络与容量评分、路由防抖、池队列、同步 Worker 租约、一次性执行令牌,以及提交状态不明时禁止重复分配的安全语义。 新增 0105 兼容迁移、管理接口、指标、OpenAPI 和回归测试。已执行全量 Go 测试、go vet、OpenAPI、迁移安全、Compose 与 Kustomize 验证。
45 lines
1.4 KiB
Go
45 lines
1.4 KiB
Go
package executionpool
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestQueueNameDoesNotExposePoolID(t *testing.T) {
|
|
name := QueueName("region-sensitive-name")
|
|
if strings.Contains(name, "sensitive") || name == QueueName("other") {
|
|
t.Fatalf("unexpected queue name %q", name)
|
|
}
|
|
}
|
|
|
|
func TestTokenSigner(t *testing.T) {
|
|
now := time.Unix(1000, 0)
|
|
signer := TokenSigner{Secret: []byte("01234567890123456789012345678901"), Now: func() time.Time { return now }}
|
|
token, err := signer.Sign(ExecutionClaims{
|
|
Audience: "worker", TaskID: "task", PoolID: "pool", WorkerID: "worker", Nonce: "nonce", ExpiresAt: now.Add(30 * time.Second).Unix(),
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
claims, err := signer.Verify(token, "worker")
|
|
if err != nil || claims.TaskID != "task" {
|
|
t.Fatalf("claims=%+v err=%v", claims, err)
|
|
}
|
|
if _, err := signer.Verify(token, "other"); err == nil {
|
|
t.Fatal("expected audience mismatch")
|
|
}
|
|
}
|
|
|
|
func TestValidateAdvertisedEndpoint(t *testing.T) {
|
|
if err := ValidateAdvertisedEndpoint("http://10.0.0.2:8088", nil, true); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := ValidateAdvertisedEndpoint("https://worker.internal.example", []string{"internal.example"}, false); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := ValidateAdvertisedEndpoint("https://public.example", []string{"internal.example"}, false); err == nil {
|
|
t.Fatal("expected untrusted endpoint rejection")
|
|
}
|
|
}
|