1+ import { join } from "node:path" ;
12import { describe , expect , test } from "vite-plus/test" ;
2- import { parseStdoutJson , runCommandE2e } from "./helpers.ts" ;
3+ import { e2eFixturesDir , parseStdoutJson , runCommandE2e } from "./helpers.ts" ;
34import { MANAGED_AGENT_ROUTES } from "./topic-routes.ts" ;
45
6+ const AGENTS_DEPLOYMENT_YAML = join ( e2eFixturesDir , "managed-agent" , "agents-deployment.yaml" ) ;
7+ const AGENTS_DEPLOYMENT_INVALID_YAML = join (
8+ e2eFixturesDir ,
9+ "managed-agent" ,
10+ "agents-deployment-invalid.yaml" ,
11+ ) ;
12+
13+ const DEPLOYMENT_SAFETY_DIAGNOSTIC_CODES = [
14+ "bailian.deployment.initial_events.message_required" ,
15+ "bailian.deployment.file.mount_path.required" ,
16+ "bailian.deployment.file.mount_path.duplicate" ,
17+ ] ;
18+
519/**
620 * managed-agent:help / 缺参不依赖密钥;所有 mutation 命令的 --dry-run
721 * 必须在构建 SDK runtime(凭证注入 / 联网 / 写盘)之前短路,因此同样不需要密钥。
@@ -12,6 +26,102 @@ import { MANAGED_AGENT_ROUTES } from "./topic-routes.ts";
1226 */
1327
1428describe ( "e2e: managed-agent" , ( ) => {
29+ test ( "validate 接受原生 Bailian Deployment 配置" , async ( ) => {
30+ const { stdout, stderr, exitCode } = await runCommandE2e ( MANAGED_AGENT_ROUTES , [
31+ "managed-agent" ,
32+ "validate" ,
33+ "--file" ,
34+ AGENTS_DEPLOYMENT_YAML ,
35+ "--output" ,
36+ "json" ,
37+ ] ) ;
38+ expect ( exitCode , stderr ) . toBe ( 0 ) ;
39+ const data = parseStdoutJson < {
40+ valid ?: boolean ;
41+ diagnostics ?: Array < { code ?: string ; severity ?: string } > ;
42+ } > ( stdout ) ;
43+ expect ( data . valid ) . toBe ( true ) ;
44+ expect ( data . diagnostics ) . not . toContainEqual (
45+ expect . objectContaining ( { code : "bailian.deployment.schedule_unsupported" } ) ,
46+ ) ;
47+ } ) ;
48+
49+ test ( "plan --dry-run 通过 SDK planner 规划原生 Bailian Deployment" , async ( ) => {
50+ const { stdout, stderr, exitCode } = await runCommandE2e ( MANAGED_AGENT_ROUTES , [
51+ "managed-agent" ,
52+ "plan" ,
53+ "--dry-run" ,
54+ "--file" ,
55+ AGENTS_DEPLOYMENT_YAML ,
56+ "--output" ,
57+ "json" ,
58+ ] ) ;
59+ expect ( exitCode , stderr ) . toBe ( 0 ) ;
60+ const data = parseStdoutJson < {
61+ actions ?: Array < {
62+ action ?: string ;
63+ address ?: { provider ?: string ; type ?: string ; name ?: string } ;
64+ } > ;
65+ diagnostics ?: Array < { code ?: string ; severity ?: string } > ;
66+ } > ( stdout ) ;
67+ expect ( data . actions ) . toContainEqual (
68+ expect . objectContaining ( {
69+ action : "create" ,
70+ address : {
71+ provider : "bailian" ,
72+ type : "deployment" ,
73+ name : "daily-report" ,
74+ } ,
75+ } ) ,
76+ ) ;
77+ expect ( data . diagnostics ) . not . toContainEqual (
78+ expect . objectContaining ( { code : "bailian.deployment.schedule_unsupported" } ) ,
79+ ) ;
80+ } ) ;
81+
82+ test ( "validate 拒绝会产生空消息或无效挂载路径的 Bailian Deployment" , async ( ) => {
83+ const { stdout, exitCode } = await runCommandE2e ( MANAGED_AGENT_ROUTES , [
84+ "managed-agent" ,
85+ "validate" ,
86+ "--file" ,
87+ AGENTS_DEPLOYMENT_INVALID_YAML ,
88+ "--output" ,
89+ "json" ,
90+ ] ) ;
91+ expect ( exitCode ) . toBe ( 1 ) ;
92+ const data = parseStdoutJson < {
93+ valid ?: boolean ;
94+ diagnostics ?: Array < { code ?: string ; severity ?: string } > ;
95+ } > ( stdout ) ;
96+ expect ( data . valid ) . toBe ( false ) ;
97+ for ( const diagnosticCode of DEPLOYMENT_SAFETY_DIAGNOSTIC_CODES ) {
98+ expect ( data . diagnostics ) . toContainEqual (
99+ expect . objectContaining ( { code : diagnosticCode , severity : "error" } ) ,
100+ ) ;
101+ }
102+ } ) ;
103+
104+ test ( "plan --dry-run 在 Deployment 安全诊断失败时阻断计划" , async ( ) => {
105+ const { stdout, exitCode } = await runCommandE2e ( MANAGED_AGENT_ROUTES , [
106+ "managed-agent" ,
107+ "plan" ,
108+ "--dry-run" ,
109+ "--file" ,
110+ AGENTS_DEPLOYMENT_INVALID_YAML ,
111+ "--output" ,
112+ "json" ,
113+ ] ) ;
114+ expect ( exitCode ) . toBe ( 1 ) ;
115+ const data = parseStdoutJson < {
116+ diagnostics ?: Array < { code ?: string ; severity ?: string } > ;
117+ } > ( stdout ) ;
118+ for ( const diagnosticCode of DEPLOYMENT_SAFETY_DIAGNOSTIC_CODES ) {
119+ expect ( data . diagnostics ) . toContainEqual (
120+ expect . objectContaining ( { code : diagnosticCode , severity : "error" } ) ,
121+ ) ;
122+ }
123+ } ) ;
124+
15125 test ( "managed-agent apply --help 正常退出" , async ( ) => {
16126 const { stderr, exitCode } = await runCommandE2e ( MANAGED_AGENT_ROUTES , [
17127 "managed-agent" ,
0 commit comments