1+ package BehaviorTests ;
2+
3+
4+ import org .junit .jupiter .api .Test ;
5+
6+ import java .net .URI ;
7+ import java .net .http .HttpClient ;
8+ import java .net .http .HttpRequest ;
9+ import java .net .http .HttpResponse ;
10+ import java .time .Duration ;
11+ import java .util .Queue ;
12+ import java .util .concurrent .CompletableFuture ;
13+ import java .util .concurrent .ConcurrentLinkedQueue ;
14+
15+ import static org .junit .jupiter .api .Assertions .assertTrue ;
16+
17+ public class SSETest extends BddTest {
18+
19+ @ Test
20+ void example () throws Exception {
21+ Queue <String > receivedMessages = new ConcurrentLinkedQueue <>();
22+
23+ HttpRequest request = HttpRequest
24+ .newBuilder ()
25+ .header ("Accept" , "text/event-stream" )
26+ .timeout (Duration .ofSeconds (5 ))
27+ .GET ()
28+ .uri (URI .create (MockServer .SSE ))
29+ .build ();
30+
31+ var process = new Thread (() -> {
32+ var client = HttpClient .newBuilder ().build ();
33+ CompletableFuture <Void > fut = client .sendAsync (request , HttpResponse .BodyHandlers .ofLines ())
34+ .thenAccept (response -> {
35+ response .body ().forEach (line -> {
36+ if (!line .isBlank ()) {
37+ System .out .println ("line = " + line );
38+ receivedMessages .add (line );
39+ }
40+ });
41+ })
42+ .exceptionally (ex -> {
43+ System .err .println ("Error: " + ex .getMessage ());
44+ return null ;
45+ });
46+
47+ while (!fut .isDone ()){}
48+ });
49+
50+ process .start ();
51+ Thread .sleep (1000 );
52+
53+ TestSSEConsumer .sendMessage ("hey1" );
54+ TestSSEConsumer .sendMessage ("hey2" );
55+
56+ // Wait for messages to be received (simple sleep or use Awaitility for better control)
57+ Thread .sleep (1000 );
58+
59+ assertTrue (receivedMessages .stream ().anyMatch (msg -> msg .contains ("hey1" )));
60+ assertTrue (receivedMessages .stream ().anyMatch (msg -> msg .contains ("hey2" )));
61+
62+ }
63+
64+
65+ }
0 commit comments