Files
ttstd-infinite-canvas/backend/internal/app/cloud_agent_pi_contract_test.go
T

67 lines
2.2 KiB
Go

package app
import (
"os"
"path/filepath"
"strings"
"testing"
)
func TestCloudAgentProductionSchedulingDoesNotCallLegacyGoLoop(t *testing.T) {
root := filepath.Join("..", "..")
// 生产调度入口:Agent 创建、运行时(含拆分出的调度/工具/媒体文件)与任务 worker。
// 调度循环本身(cloud_agent_runtime_scheduler.go)定义了旧入口,只检查调用方。
files := []string{
filepath.Join(root, "internal", "app", "cloud_agent.go"),
filepath.Join(root, "internal", "app", "cloud_agent_runtime.go"),
filepath.Join(root, "internal", "app", "cloud_agent_runtime_media.go"),
filepath.Join(root, "internal", "app", "cloud_agent_runtime_tools.go"),
filepath.Join(root, "internal", "app", "task_worker.go"),
}
for _, file := range files {
body, err := os.ReadFile(file)
if err != nil {
t.Fatal(err)
}
text := string(body)
for _, forbidden := range []string{
"s.advanceCloudAgentByID(",
"s.advanceCloudAgents()",
} {
if strings.Contains(text, forbidden) {
t.Fatalf("production scheduling still calls legacy Go loop: %s in %s", forbidden, file)
}
}
}
}
func TestCloudAgentPiRuntimeContractUsesGovernedStepBridge(t *testing.T) {
root := filepath.Join("..", "..")
// 协调器拆分为协调、请求组装、模型桥与消息/工具桥四个文件,合同覆盖整组。
var coordinator strings.Builder
for _, name := range []string{"cloud_agent_pi_coordinator.go", "cloud_agent_pi_request.go", "cloud_agent_pi_model.go", "cloud_agent_pi_bridge.go"} {
body, err := os.ReadFile(filepath.Join(root, "internal", "app", name))
if err != nil {
t.Fatal(err)
}
coordinator.Write(body)
}
text := coordinator.String()
for _, required := range []string{
"Operation: cloudAgentStepOperation",
"s.enqueueCloudAgentTask(run, &state, req, nil)",
"s.waitCloudAgentTask(ctx, taskID)",
} {
if !strings.Contains(text, required) {
t.Fatalf("Pi governed model bridge contract missing %q", required)
}
}
runtime, err := os.ReadFile(filepath.Join(root, "internal", "agent", "runtime", "runtime.go"))
if err != nil {
t.Fatal(err)
}
if !strings.Contains(string(runtime), "mux.HandleFunc(\"POST /model\"") {
t.Fatal("Pi runtime does not expose the governed /model bridge")
}
}