@@ -15,72 +15,41 @@ import {
1515import { describe , expect , it } from 'vitest' ;
1616
1717describe ( 'AgentNameSchema' , ( ) => {
18- it . each ( [ 'Agent1' , 'myAgent' , 'A' , 'agent_with_underscores' , 'a' + '0' . repeat ( 47 ) ] ) (
19- 'accepts valid name "%s"' ,
20- name => {
21- expect ( AgentNameSchema . safeParse ( name ) . success ) . toBe ( true ) ;
22- }
23- ) ;
24-
25- it ( 'rejects empty string' , ( ) => {
26- expect ( AgentNameSchema . safeParse ( '' ) . success ) . toBe ( false ) ;
18+ it ( 'accepts valid names' , ( ) => {
19+ expect ( AgentNameSchema . safeParse ( 'Agent1' ) . success ) . toBe ( true ) ;
20+ expect ( AgentNameSchema . safeParse ( 'A' ) . success ) . toBe ( true ) ;
21+ expect ( AgentNameSchema . safeParse ( 'agent_with_underscores' ) . success ) . toBe ( true ) ;
2722 } ) ;
2823
29- it ( 'rejects name starting with digit' , ( ) => {
24+ it ( 'rejects invalid names' , ( ) => {
25+ expect ( AgentNameSchema . safeParse ( '' ) . success ) . toBe ( false ) ;
3026 expect ( AgentNameSchema . safeParse ( '1Agent' ) . success ) . toBe ( false ) ;
31- } ) ;
32-
33- it ( 'rejects name with hyphens' , ( ) => {
3427 expect ( AgentNameSchema . safeParse ( 'my-agent' ) . success ) . toBe ( false ) ;
3528 } ) ;
3629
37- it ( 'rejects name exceeding 48 chars' , ( ) => {
38- const name = 'A' + 'b' . repeat ( 48 ) ;
39- expect ( name ) . toHaveLength ( 49 ) ;
40- expect ( AgentNameSchema . safeParse ( name ) . success ) . toBe ( false ) ;
41- } ) ;
42-
43- it ( 'accepts 48-char name (max)' , ( ) => {
44- const name = 'A' + 'b' . repeat ( 47 ) ;
45- expect ( name ) . toHaveLength ( 48 ) ;
46- expect ( AgentNameSchema . safeParse ( name ) . success ) . toBe ( true ) ;
30+ it ( 'enforces 48-char boundary' , ( ) => {
31+ expect ( AgentNameSchema . safeParse ( 'A' + 'b' . repeat ( 47 ) ) . success ) . toBe ( true ) ;
32+ expect ( AgentNameSchema . safeParse ( 'A' + 'b' . repeat ( 48 ) ) . success ) . toBe ( false ) ;
4733 } ) ;
4834} ) ;
4935
5036describe ( 'EnvVarNameSchema' , ( ) => {
51- it . each ( [ 'MY_VAR' , '_private' , 'UPPER123' , 'a' , '_' ] ) ( 'accepts valid env var name "%s"' , name => {
52- expect ( EnvVarNameSchema . safeParse ( name ) . success ) . toBe ( true ) ;
53- } ) ;
54-
55- it ( 'rejects name starting with digit' , ( ) => {
37+ it ( 'accepts valid env var names and rejects invalid' , ( ) => {
38+ expect ( EnvVarNameSchema . safeParse ( 'MY_VAR' ) . success ) . toBe ( true ) ;
39+ expect ( EnvVarNameSchema . safeParse ( '_private' ) . success ) . toBe ( true ) ;
5640 expect ( EnvVarNameSchema . safeParse ( '1VAR' ) . success ) . toBe ( false ) ;
57- } ) ;
58-
59- it ( 'rejects name with hyphens' , ( ) => {
6041 expect ( EnvVarNameSchema . safeParse ( 'MY-VAR' ) . success ) . toBe ( false ) ;
61- } ) ;
62-
63- it ( 'rejects empty string' , ( ) => {
6442 expect ( EnvVarNameSchema . safeParse ( '' ) . success ) . toBe ( false ) ;
6543 } ) ;
6644} ) ;
6745
6846describe ( 'GatewayNameSchema' , ( ) => {
69- it . each ( [ 'gateway1' , 'my-gateway' , 'MyGateway' , 'a' ] ) ( 'accepts valid gateway name "%s"' , name => {
70- expect ( GatewayNameSchema . safeParse ( name ) . success ) . toBe ( true ) ;
71- } ) ;
72-
73- it ( 'rejects empty string' , ( ) => {
47+ it ( 'accepts valid names and rejects invalid' , ( ) => {
48+ expect ( GatewayNameSchema . safeParse ( 'gateway1' ) . success ) . toBe ( true ) ;
49+ expect ( GatewayNameSchema . safeParse ( 'my-gateway' ) . success ) . toBe ( true ) ;
7450 expect ( GatewayNameSchema . safeParse ( '' ) . success ) . toBe ( false ) ;
75- } ) ;
76-
77- it ( 'rejects name with underscores' , ( ) => {
7851 expect ( GatewayNameSchema . safeParse ( 'my_gateway' ) . success ) . toBe ( false ) ;
79- } ) ;
80-
81- it ( 'rejects name exceeding 100 chars' , ( ) => {
82- const name = 'a' . repeat ( 101 ) ;
83- expect ( GatewayNameSchema . safeParse ( name ) . success ) . toBe ( false ) ;
52+ expect ( GatewayNameSchema . safeParse ( 'a' . repeat ( 101 ) ) . success ) . toBe ( false ) ;
8453 } ) ;
8554} ) ;
8655
@@ -288,9 +257,10 @@ describe('AgentEnvSpecSchema', () => {
288257 } ) ;
289258
290259 describe ( 'protocol' , ( ) => {
291- it . each ( [ 'HTTP' , 'MCP' , 'A2A' , 'AGUI' ] ) ( 'accepts valid protocol "%s"' , mode => {
292- const result = AgentEnvSpecSchema . safeParse ( { ...validPythonAgent , protocol : mode } ) ;
293- expect ( result . success , `Should accept protocol ${ mode } ` ) . toBe ( true ) ;
260+ it ( 'accepts valid protocols' , ( ) => {
261+ expect ( AgentEnvSpecSchema . safeParse ( { ...validPythonAgent , protocol : 'HTTP' } ) . success ) . toBe ( true ) ;
262+ expect ( AgentEnvSpecSchema . safeParse ( { ...validPythonAgent , protocol : 'MCP' } ) . success ) . toBe ( true ) ;
263+ expect ( AgentEnvSpecSchema . safeParse ( { ...validPythonAgent , protocol : 'A2A' } ) . success ) . toBe ( true ) ;
294264 } ) ;
295265
296266 it ( 'accepts agent without protocol (backwards compat)' , ( ) => {
@@ -300,7 +270,6 @@ describe('AgentEnvSpecSchema', () => {
300270
301271 it ( 'rejects invalid protocol' , ( ) => {
302272 expect ( AgentEnvSpecSchema . safeParse ( { ...validPythonAgent , protocol : 'GRPC' } ) . success ) . toBe ( false ) ;
303- expect ( AgentEnvSpecSchema . safeParse ( { ...validPythonAgent , protocol : 'websocket' } ) . success ) . toBe ( false ) ;
304273 } ) ;
305274 } ) ;
306275} ) ;
@@ -439,12 +408,12 @@ describe('AgentEnvSpecSchema - dockerfile', () => {
439408 }
440409 } ) ;
441410
442- it . each ( [ 'Dockerfile' , 'Dockerfile.dev' , 'Dockerfile.gpu-v2' , 'my.Dockerfile' , 'dockerfile_test' ] ) (
443- 'accepts valid dockerfile name "%s"' ,
444- name => {
445- expect ( AgentEnvSpecSchema . safeParse ( { ... validContainerAgent , dockerfile : name } ) . success ) . toBe ( true ) ;
446- }
447- ) ;
411+ it ( 'accepts valid dockerfile names' , ( ) => {
412+ expect ( AgentEnvSpecSchema . safeParse ( { ... validContainerAgent , dockerfile : 'Dockerfile' } ) . success ) . toBe ( true ) ;
413+ expect ( AgentEnvSpecSchema . safeParse ( { ... validContainerAgent , dockerfile : 'Dockerfile.gpu-v2' } ) . success ) . toBe (
414+ true
415+ ) ;
416+ } ) ;
448417
449418 it ( 'rejects dockerfile on CodeZip builds' , ( ) => {
450419 const result = AgentEnvSpecSchema . safeParse ( { ...validCodeZipAgent , dockerfile : 'Dockerfile.custom' } ) ;
@@ -454,12 +423,12 @@ describe('AgentEnvSpecSchema - dockerfile', () => {
454423 }
455424 } ) ;
456425
457- it . each ( [ '../Dockerfile' , '/etc/Dockerfile' , ' path/to/Dockerfile ', '.hidden' ] ) (
458- 'rejects path traversal or path separator in dockerfile "%s"' ,
459- name => {
460- expect ( AgentEnvSpecSchema . safeParse ( { ... validContainerAgent , dockerfile : name } ) . success ) . toBe ( false ) ;
461- }
462- ) ;
426+ it ( 'rejects path traversal or path separator in dockerfile ', ( ) => {
427+ expect ( AgentEnvSpecSchema . safeParse ( { ... validContainerAgent , dockerfile : '../Dockerfile' } ) . success ) . toBe ( false ) ;
428+ expect ( AgentEnvSpecSchema . safeParse ( { ... validContainerAgent , dockerfile : 'path/to/Dockerfile' } ) . success ) . toBe (
429+ false
430+ ) ;
431+ } ) ;
463432
464433 it ( 'rejects empty string dockerfile' , ( ) => {
465434 expect ( AgentEnvSpecSchema . safeParse ( { ...validContainerAgent , dockerfile : '' } ) . success ) . toBe ( false ) ;
@@ -481,12 +450,12 @@ describe('AgentEnvSpecSchema - dockerfile', () => {
481450 expect ( AgentEnvSpecSchema . safeParse ( { ...validContainerAgent , dockerfile : maxName } ) . success ) . toBe ( true ) ;
482451 } ) ;
483452
484- it . each ( [ '\\\\server\\share' , 'Dockerfile\\..\\secret' , '..\\Dockerfile' ] ) (
485- 'rejects backslash path traversal in dockerfile "%s"' ,
486- name => {
487- expect ( AgentEnvSpecSchema . safeParse ( { ... validContainerAgent , dockerfile : name } ) . success ) . toBe ( false ) ;
488- }
489- ) ;
453+ it ( 'rejects backslash path traversal in dockerfile' , ( ) => {
454+ expect ( AgentEnvSpecSchema . safeParse ( { ... validContainerAgent , dockerfile : '\\\\server\\share' } ) . success ) . toBe (
455+ false
456+ ) ;
457+ expect ( AgentEnvSpecSchema . safeParse ( { ... validContainerAgent , dockerfile : '..\\Dockerfile' } ) . success ) . toBe ( false ) ;
458+ } ) ;
490459} ) ;
491460
492461describe ( 'AgentEnvSpecSchema - lifecycleConfiguration' , ( ) => {
@@ -544,34 +513,21 @@ describe('AgentEnvSpecSchema - lifecycleConfiguration', () => {
544513} ) ;
545514
546515describe ( 'RuntimeEndpointNameSchema' , ( ) => {
547- it . each ( [ 'prod' , 'staging' , 'myEndpoint' , 'v1' , 'A' , 'a' + '0' . repeat ( 47 ) ] ) (
548- 'accepts valid endpoint name "%s"' ,
549- name => {
550- expect ( RuntimeEndpointNameSchema . safeParse ( name ) . success ) . toBe ( true ) ;
551- }
552- ) ;
553-
554- it ( 'rejects empty string' , ( ) => {
555- expect ( RuntimeEndpointNameSchema . safeParse ( '' ) . success ) . toBe ( false ) ;
516+ it ( 'accepts valid names' , ( ) => {
517+ expect ( RuntimeEndpointNameSchema . safeParse ( 'prod' ) . success ) . toBe ( true ) ;
518+ expect ( RuntimeEndpointNameSchema . safeParse ( 'myEndpoint' ) . success ) . toBe ( true ) ;
556519 } ) ;
557520
558- it ( 'rejects name starting with digit' , ( ) => {
521+ it ( 'rejects invalid names' , ( ) => {
522+ expect ( RuntimeEndpointNameSchema . safeParse ( '' ) . success ) . toBe ( false ) ;
559523 expect ( RuntimeEndpointNameSchema . safeParse ( '1prod' ) . success ) . toBe ( false ) ;
560- } ) ;
561-
562- it ( 'rejects name with hyphens' , ( ) => {
563524 expect ( RuntimeEndpointNameSchema . safeParse ( 'my-endpoint' ) . success ) . toBe ( false ) ;
564- } ) ;
565-
566- it ( 'rejects name with special characters' , ( ) => {
567525 expect ( RuntimeEndpointNameSchema . safeParse ( 'prod!' ) . success ) . toBe ( false ) ;
568- expect ( RuntimeEndpointNameSchema . safeParse ( 'my@endpoint' ) . success ) . toBe ( false ) ;
569526 } ) ;
570527
571- it ( 'rejects name exceeding 48 chars' , ( ) => {
572- const name = 'A' + 'b' . repeat ( 48 ) ;
573- expect ( name ) . toHaveLength ( 49 ) ;
574- expect ( RuntimeEndpointNameSchema . safeParse ( name ) . success ) . toBe ( false ) ;
528+ it ( 'enforces 48-char boundary' , ( ) => {
529+ expect ( RuntimeEndpointNameSchema . safeParse ( 'A' + 'b' . repeat ( 47 ) ) . success ) . toBe ( true ) ;
530+ expect ( RuntimeEndpointNameSchema . safeParse ( 'A' + 'b' . repeat ( 48 ) ) . success ) . toBe ( false ) ;
575531 } ) ;
576532} ) ;
577533
0 commit comments