1616import static org .junit .jupiter .api .Assertions .assertDoesNotThrow ;
1717import static org .junit .jupiter .api .Assertions .assertThrows ;
1818import static org .junit .jupiter .api .Assertions .assertTrue ;
19+ import static org .junit .jupiter .api .Assertions .assertFalse ;
1920
2021public class AgentCardValidatorTest {
2122
22- @ Test
23- void testValidationWithSimpleAgentCard () {
24- // Create a simple AgentCard (uses default JSONRPC transport)
25- AgentCard agentCard = new AgentCard .Builder ()
23+ private AgentCard .Builder createTestAgentCardBuilder () {
24+ return new AgentCard .Builder ()
2625 .name ("Test Agent" )
2726 .description ("Test Description" )
2827 .url ("http://localhost:9999" )
2928 .version ("1.0.0" )
3029 .capabilities (new AgentCapabilities .Builder ().build ())
3130 .defaultInputModes (Collections .singletonList ("text" ))
3231 .defaultOutputModes (Collections .singletonList ("text" ))
33- .skills (Collections .emptyList ())
32+ .skills (Collections .emptyList ());
33+ }
34+
35+ @ Test
36+ void testValidationWithSimpleAgentCard () {
37+ // Create a simple AgentCard (uses default JSONRPC transport)
38+ AgentCard agentCard = createTestAgentCardBuilder ()
3439 .build ();
3540
3641 // Define available transports
@@ -43,15 +48,7 @@ void testValidationWithSimpleAgentCard() {
4348 @ Test
4449 void testValidationWithMultipleTransports () {
4550 // Create AgentCard that specifies multiple transports
46- AgentCard agentCard = new AgentCard .Builder ()
47- .name ("Test Agent" )
48- .description ("Test Description" )
49- .url ("http://localhost:9999" )
50- .version ("1.0.0" )
51- .capabilities (new AgentCapabilities .Builder ().build ())
52- .defaultInputModes (Collections .singletonList ("text" ))
53- .defaultOutputModes (Collections .singletonList ("text" ))
54- .skills (Collections .emptyList ())
51+ AgentCard agentCard = createTestAgentCardBuilder ()
5552 .preferredTransport (TransportProtocol .JSONRPC .asString ())
5653 .additionalInterfaces (List .of (
5754 new AgentInterface (TransportProtocol .JSONRPC .asString (), "http://localhost:9999" ),
@@ -70,15 +67,7 @@ void testValidationWithMultipleTransports() {
7067 @ Test
7168 void testLogWarningWhenExtraTransportsFound () {
7269 // Create an AgentCard with only JSONRPC
73- AgentCard agentCard = new AgentCard .Builder ()
74- .name ("Test Agent" )
75- .description ("Test Description" )
76- .url ("http://localhost:9999" )
77- .version ("1.0.0" )
78- .capabilities (new AgentCapabilities .Builder ().build ())
79- .defaultInputModes (Collections .singletonList ("text" ))
80- .defaultOutputModes (Collections .singletonList ("text" ))
81- .skills (Collections .emptyList ())
70+ AgentCard agentCard = createTestAgentCardBuilder ()
8271 .preferredTransport (TransportProtocol .JSONRPC .asString ())
8372 .build ();
8473
@@ -105,15 +94,7 @@ void testLogWarningWhenExtraTransportsFound() {
10594 @ Test
10695 void testValidationWithUnavailableTransport () {
10796 // Create a simple AgentCard (uses default JSONRPC transport)
108- AgentCard agentCard = new AgentCard .Builder ()
109- .name ("Test Agent" )
110- .description ("Test Description" )
111- .url ("http://localhost:9999" )
112- .version ("1.0.0" )
113- .capabilities (new AgentCapabilities .Builder ().build ())
114- .defaultInputModes (Collections .singletonList ("text" ))
115- .defaultOutputModes (Collections .singletonList ("text" ))
116- .skills (Collections .emptyList ())
97+ AgentCard agentCard = createTestAgentCardBuilder ()
11798 .build ();
11899
119100 // Define available transports (empty)
@@ -125,6 +106,129 @@ void testValidationWithUnavailableTransport() {
125106 assertTrue (exception .getMessage ().contains ("unavailable transports: [JSONRPC]" ));
126107 }
127108
109+ @ Test
110+ void testGlobalSkipProperty () {
111+ System .setProperty (AgentCardValidator .SKIP_PROPERTY , "true" );
112+ try {
113+ AgentCard agentCard = createTestAgentCardBuilder ()
114+ .build ();
115+
116+ Set <String > availableTransports = Collections .emptySet ();
117+
118+ assertDoesNotThrow (() -> AgentCardValidator .validateTransportConfiguration (agentCard , availableTransports ));
119+ } finally {
120+ System .clearProperty (AgentCardValidator .SKIP_PROPERTY );
121+ }
122+ }
123+
124+ @ Test
125+ void testSkipJsonrpcProperty () {
126+ System .setProperty (AgentCardValidator .SKIP_JSONRPC_PROPERTY , "true" );
127+ try {
128+ AgentCard agentCard = createTestAgentCardBuilder ()
129+ .preferredTransport (TransportProtocol .JSONRPC .asString ())
130+ .build ();
131+
132+ Set <String > availableTransports = Set .of (TransportProtocol .GRPC .asString ());
133+
134+ assertDoesNotThrow (() -> AgentCardValidator .validateTransportConfiguration (agentCard , availableTransports ));
135+ } finally {
136+ System .clearProperty (AgentCardValidator .SKIP_JSONRPC_PROPERTY );
137+ }
138+ }
139+
140+ @ Test
141+ void testSkipGrpcProperty () {
142+ System .setProperty (AgentCardValidator .SKIP_GRPC_PROPERTY , "true" );
143+ try {
144+ AgentCard agentCard = createTestAgentCardBuilder ()
145+ .preferredTransport (TransportProtocol .GRPC .asString ())
146+ .build ();
147+
148+ Set <String > availableTransports = Set .of (TransportProtocol .JSONRPC .asString ());
149+
150+ assertDoesNotThrow (() -> AgentCardValidator .validateTransportConfiguration (agentCard , availableTransports ));
151+ } finally {
152+ System .clearProperty (AgentCardValidator .SKIP_GRPC_PROPERTY );
153+ }
154+ }
155+
156+ @ Test
157+ void testSkipRestProperty () {
158+ System .setProperty (AgentCardValidator .SKIP_REST_PROPERTY , "true" );
159+ try {
160+ AgentCard agentCard = createTestAgentCardBuilder ()
161+ .additionalInterfaces (List .of (
162+ new AgentInterface (TransportProtocol .HTTP_JSON .asString (), "http://localhost:8080" )
163+ ))
164+ .build ();
165+
166+ Set <String > availableTransports = Set .of (TransportProtocol .JSONRPC .asString ());
167+
168+ assertDoesNotThrow (() -> AgentCardValidator .validateTransportConfiguration (agentCard , availableTransports ));
169+ } finally {
170+ System .clearProperty (AgentCardValidator .SKIP_REST_PROPERTY );
171+ }
172+ }
173+
174+ @ Test
175+ void testMultipleTransportsWithMixedSkipProperties () {
176+ System .setProperty (AgentCardValidator .SKIP_GRPC_PROPERTY , "true" );
177+ try {
178+ AgentCard agentCard = createTestAgentCardBuilder ()
179+ .preferredTransport (TransportProtocol .JSONRPC .asString ())
180+ .additionalInterfaces (List .of (
181+ new AgentInterface (TransportProtocol .GRPC .asString (), "http://localhost:9000" ),
182+ new AgentInterface (TransportProtocol .HTTP_JSON .asString (), "http://localhost:8080" )
183+ ))
184+ .build ();
185+
186+ Set <String > availableTransports = Set .of (TransportProtocol .JSONRPC .asString ());
187+
188+ IllegalStateException exception = assertThrows (IllegalStateException .class ,
189+ () -> AgentCardValidator .validateTransportConfiguration (agentCard , availableTransports ));
190+ assertTrue (exception .getMessage ().contains ("unavailable transports: [HTTP+JSON]" ));
191+ } finally {
192+ System .clearProperty (AgentCardValidator .SKIP_GRPC_PROPERTY );
193+ }
194+ }
195+
196+ @ Test
197+ void testSkipPropertiesFilterWarnings () {
198+ System .setProperty (AgentCardValidator .SKIP_GRPC_PROPERTY , "true" );
199+ try {
200+ AgentCard agentCard = createTestAgentCardBuilder ()
201+ .preferredTransport (TransportProtocol .JSONRPC .asString ())
202+ .build ();
203+
204+ Set <String > availableTransports = Set .of (
205+ TransportProtocol .JSONRPC .asString (),
206+ TransportProtocol .GRPC .asString (),
207+ TransportProtocol .HTTP_JSON .asString ()
208+ );
209+
210+ Logger logger = Logger .getLogger (AgentCardValidator .class .getName ());
211+ TestLogHandler testLogHandler = new TestLogHandler ();
212+ logger .addHandler (testLogHandler );
213+
214+ try {
215+ AgentCardValidator .validateTransportConfiguration (agentCard , availableTransports );
216+ } finally {
217+ logger .removeHandler (testLogHandler );
218+ }
219+
220+ boolean foundWarning = testLogHandler .getLogMessages ().stream ()
221+ .anyMatch (msg -> msg .contains ("Missing: [HTTP+JSON]" ));
222+ assertTrue (foundWarning );
223+
224+ boolean grpcMentioned = testLogHandler .getLogMessages ().stream ()
225+ .anyMatch (msg -> msg .contains ("GRPC" ));
226+ assertFalse (grpcMentioned );
227+ } finally {
228+ System .clearProperty (AgentCardValidator .SKIP_GRPC_PROPERTY );
229+ }
230+ }
231+
128232 // A simple log handler for testing
129233 private static class TestLogHandler extends Handler {
130234 private final List <String > logMessages = new java .util .ArrayList <>();
0 commit comments