11package org .jboss .resteasy .test .providers .sse ;
22
3+ import java .nio .file .Files ;
4+ import java .nio .file .Paths ;
35import java .util .ArrayList ;
46import java .util .Arrays ;
57import java .util .List ;
8+ import java .util .Map ;
69import java .util .SortedSet ;
710import java .util .TreeSet ;
811import java .util .concurrent .CountDownLatch ;
4043import org .junit .Test ;
4144import org .junit .runner .RunWith ;
4245
46+ import com .fasterxml .jackson .databind .ObjectMapper ;
47+
4348@ RunWith (Arquillian .class )
4449@ RunAsClient
4550public class SseTest
@@ -52,14 +57,16 @@ public static Archive<?> deploy()
5257 {
5358 WebArchive war = TestUtil .prepareArchive (SseTest .class .getSimpleName ());
5459 war .addClass (SseTest .class );
60+ war .addAsResource ("org/jboss/resteasy/test/providers/sse/bigmsg.json" , "org/jboss/resteasy/test/providers/sse/bigmsg.json" );
5561 war .addAsWebInfResource ("org/jboss/resteasy/test/providers/sse/web.xml" , "web.xml" );
5662 war .addAsWebResource ("org/jboss/resteasy/test/providers/sse/index.html" , "index.html" );
5763 war .addAsManifestResource (EmptyAsset .INSTANCE , "beans.xml" );
5864 war .addAsManifestResource (PermissionUtil .createPermissionsXmlAsset (
5965 new RuntimePermission ("modifyThread" )
6066 ), "permissions.xml" );
6167 return TestUtil .finishContainerPrepare (war , null , SseApplication .class , GreenHouse .class , SseResource .class ,
62- AnotherSseResource .class , EscapingSseResource .class , ExecutorServletContextListener .class );
68+ AnotherSseResource .class , EscapingSseResource .class , ExecutorServletContextListener .class );
69+
6370 }
6471
6572 private String generateURL (String path )
@@ -559,7 +566,45 @@ public void testNoContent() throws Exception
559566 Assert .assertTrue ("error is not expected" , errors .get () == 0 );
560567 client .close ();
561568 }
562-
569+ //Test for RESTEASY-2689 which is reported in quarkus: https://github.com/quarkusio/quarkus/issues/11824
570+ @ Test
571+ @ InSequence (14 )
572+ public void testBigMessage () throws Exception
573+ {
574+ final CountDownLatch latch = new CountDownLatch (1 );
575+ final AtomicInteger errors = new AtomicInteger (0 );
576+ final List <String > results = new ArrayList <String >();
577+ Client client = ClientBuilder .newBuilder ().build ();
578+ WebTarget target = client .target (generateURL ("/service/server-sent-events/bigmsg" ));
579+ SseEventSource msgEventSource = SseEventSource .target (target ).build ();
580+ try (SseEventSource eventSource = msgEventSource )
581+ {
582+ Assert .assertEquals (SseEventSourceImpl .class , eventSource .getClass ());
583+ eventSource .register (event -> {
584+ results .add (event .readData ());
585+ latch .countDown ();
586+ }, ex -> {
587+ errors .incrementAndGet ();
588+ logger .error (ex .getMessage (), ex );
589+ throw new RuntimeException (ex );
590+ }) ;
591+ eventSource .open ();
592+ boolean waitResult = latch .await (30 , TimeUnit .SECONDS );
593+ Assert .assertEquals (0 , errors .get ());
594+ Assert .assertTrue ("Waiting for event to be delivered has timed out." , waitResult );
595+ }
596+ Assert .assertFalse ("SseEventSource is not closed" , msgEventSource .isOpen ());
597+ Assert .assertTrue ("1 messages are expected, but is : " + results .size (), results .size () == 1 );
598+ java .nio .file .Path filepath = Paths .get (SseTest .class .getResource ("bigmsg.json" ).toURI ());
599+ String bigMsg = new String (Files .readAllBytes (filepath ));
600+ ObjectMapper om = new ObjectMapper ();
601+ @ SuppressWarnings ("unchecked" )
602+ Map <String , Object > m1 = (Map <String , Object >)(om .readValue (bigMsg , Map .class ));
603+ @ SuppressWarnings ("unchecked" )
604+ Map <String , Object > m2 = (Map <String , Object >)(om .readValue (results .get (0 ), Map .class ));
605+ Assert .assertTrue ("Unexpceted big size message" , m1 .equals (m2 ));
606+ client .close ();
607+ }
563608 // @Test
564609 // //This will open a browser and test with html sse client
565610 // public void testHtmlSse() throws Exception
0 commit comments