@@ -44,6 +44,7 @@ public class AgentEmitterTest {
4444 private static final List <Part <?>> SAMPLE_PARTS = List .of (new TextPart ("Test message" ));
4545
4646 private static final PushNotificationSender NOOP_PUSHNOTIFICATION_SENDER = (event , snapshot ) -> {};
47+ public static final int WAIT_MILLI_SECONDS = 5000 ;
4748
4849 EventQueue eventQueue ;
4950 private MainEventBus mainEventBus ;
@@ -82,7 +83,7 @@ public void cleanup() {
8283 @ Test
8384 public void testAddArtifactWithCustomIdAndName () throws Exception {
8485 agentEmitter .addArtifact (SAMPLE_PARTS , "custom-artifact-id" , "Custom Artifact" , null );
85- EventQueueItem item = eventQueue .dequeueEventItem (5000 );
86+ EventQueueItem item = eventQueue .dequeueEventItem (WAIT_MILLI_SECONDS );
8687 assertNotNull (item );
8788 Event event = item .getEvent ();
8889 assertNotNull (event );
@@ -267,7 +268,7 @@ public void testNewAgentMessageWithMetadata() throws Exception {
267268 @ Test
268269 public void testAddArtifactWithAppendTrue () throws Exception {
269270 agentEmitter .addArtifact (SAMPLE_PARTS , "artifact-id" , "Test Artifact" , null , true , null );
270- EventQueueItem item = eventQueue .dequeueEventItem (5000 );
271+ EventQueueItem item = eventQueue .dequeueEventItem (WAIT_MILLI_SECONDS );
271272 assertNotNull (item );
272273 Event event = item .getEvent ();
273274 assertNotNull (event );
@@ -288,7 +289,7 @@ public void testAddArtifactWithAppendTrue() throws Exception {
288289 @ Test
289290 public void testAddArtifactWithLastChunkTrue () throws Exception {
290291 agentEmitter .addArtifact (SAMPLE_PARTS , "artifact-id" , "Test Artifact" , null , null , true );
291- EventQueueItem item = eventQueue .dequeueEventItem (5000 );
292+ EventQueueItem item = eventQueue .dequeueEventItem (WAIT_MILLI_SECONDS );
292293 assertNotNull (item );
293294 Event event = item .getEvent ();
294295 assertNotNull (event );
@@ -305,7 +306,7 @@ public void testAddArtifactWithLastChunkTrue() throws Exception {
305306 @ Test
306307 public void testAddArtifactWithAppendAndLastChunk () throws Exception {
307308 agentEmitter .addArtifact (SAMPLE_PARTS , "artifact-id" , "Test Artifact" , null , true , false );
308- EventQueueItem item = eventQueue .dequeueEventItem (5000 );
309+ EventQueueItem item = eventQueue .dequeueEventItem (WAIT_MILLI_SECONDS );
309310 assertNotNull (item );
310311 Event event = item .getEvent ();
311312 assertNotNull (event );
@@ -321,7 +322,7 @@ public void testAddArtifactWithAppendAndLastChunk() throws Exception {
321322 @ Test
322323 public void testAddArtifactGeneratesIdWhenNull () throws Exception {
323324 agentEmitter .addArtifact (SAMPLE_PARTS , null , "Test Artifact" , null );
324- EventQueueItem item = eventQueue .dequeueEventItem (5000 );
325+ EventQueueItem item = eventQueue .dequeueEventItem (WAIT_MILLI_SECONDS );
325326 assertNotNull (item );
326327 Event event = item .getEvent ();
327328 assertNotNull (event );
@@ -419,7 +420,7 @@ public void testConcurrentCompletionAttempts() throws Exception {
419420 thread2 .join ();
420421
421422 // Exactly one event should have been queued
422- EventQueueItem item = eventQueue .dequeueEventItem (5000 );
423+ EventQueueItem item = eventQueue .dequeueEventItem (WAIT_MILLI_SECONDS );
423424 assertNotNull (item );
424425 Event event = item .getEvent ();
425426 assertNotNull (event );
@@ -433,9 +434,60 @@ public void testConcurrentCompletionAttempts() throws Exception {
433434 assertNull (eventQueue .dequeueEventItem (0 ));
434435 }
435436
437+ @ Test
438+ public void sendMessageWithMatchingIdsSucceeds () throws Exception {
439+ agentEmitter .sendMessage (SAMPLE_MESSAGE );
440+
441+ EventQueueItem item = eventQueue .dequeueEventItem (WAIT_MILLI_SECONDS );
442+ assertNotNull (item );
443+ assertInstanceOf (Message .class , item .getEvent ());
444+ Message message = (Message ) item .getEvent ();
445+ assertEquals (TEST_TASK_ID , message .taskId ());
446+ assertEquals (TEST_TASK_CONTEXT_ID , message .contextId ());
447+ }
448+
449+ @ Test
450+ public void sendMessageWithNullIdsSucceeds () throws Exception {
451+ Message message = Message .builder ()
452+ .role (ROLE_AGENT )
453+ .parts (new TextPart ("no ids" ))
454+ .build ();
455+ agentEmitter .sendMessage (message );
456+
457+ EventQueueItem item = eventQueue .dequeueEventItem (WAIT_MILLI_SECONDS );
458+ assertNotNull (item );
459+ assertInstanceOf (Message .class , item .getEvent ());
460+ }
461+
462+ @ Test
463+ public void sendMessageWithMismatchedTaskIdThrows () {
464+ Message mismatchedMessage = Message .builder ()
465+ .taskId ("wrong-task-id" )
466+ .contextId (TEST_TASK_CONTEXT_ID )
467+ .role (ROLE_AGENT )
468+ .parts (new TextPart ("mismatched" ))
469+ .build ();
470+ IllegalArgumentException ex = assertThrows (IllegalArgumentException .class ,
471+ () -> agentEmitter .sendMessage (mismatchedMessage ));
472+ assertTrue (ex .getMessage ().contains ("Message taskId does not match" ));
473+ }
474+
475+ @ Test
476+ public void sendMessageWithMismatchedContextIdThrows () {
477+ Message mismatchedMessage = Message .builder ()
478+ .taskId (TEST_TASK_ID )
479+ .contextId ("wrong-context-id" )
480+ .role (ROLE_AGENT )
481+ .parts (new TextPart ("mismatched" ))
482+ .build ();
483+ IllegalArgumentException ex = assertThrows (IllegalArgumentException .class ,
484+ () -> agentEmitter .sendMessage (mismatchedMessage ));
485+ assertTrue (ex .getMessage ().contains ("Message contextId does not match" ));
486+ }
487+
436488 private TaskStatusUpdateEvent checkTaskStatusUpdateEventOnQueue (boolean isFinal , TaskState state , Message statusMessage ) throws Exception {
437489 // Wait up to 5 seconds for event (async MainEventBusProcessor needs time to distribute)
438- EventQueueItem item = eventQueue .dequeueEventItem (5000 );
490+ EventQueueItem item = eventQueue .dequeueEventItem (WAIT_MILLI_SECONDS );
439491 assertNotNull (item );
440492 Event event = item .getEvent ();
441493
0 commit comments