Skip to content

Commit 7ad38de

Browse files
committed
test(sse): require bounded event frames
1 parent 379bc10 commit 7ad38de

1 file changed

Lines changed: 46 additions & 0 deletions

File tree

‎src/test/java/io/github/easy4j/hermes/api/sse/SseLifecycleContractTest.java‎

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,52 @@ void unknownEventPreservesServerIdentityAndRawData() throws Exception {
180180
}
181181
}
182182

183+
@Test
184+
void oversizedFrameFailsBeforeBusinessDelivery() throws Exception {
185+
StringBuilder payload = new StringBuilder("{\"delta\":\"");
186+
for (int i = 0; i < 128; i++) {
187+
payload.append('x');
188+
}
189+
payload.append("\"}");
190+
191+
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(chain -> {
192+
String body = "data: " + payload + "\n\n";
193+
return new Response.Builder()
194+
.request(chain.request())
195+
.protocol(Protocol.HTTP_1_1)
196+
.code(200)
197+
.message("OK")
198+
.body(ResponseBody.create(body, MediaType.get("text/event-stream")))
199+
.build();
200+
}).build();
201+
202+
HermesHttpClientConfig config = new HermesHttpClientConfig();
203+
config.markUnsafeBaseUrlOverriddenForTest(true);
204+
config.setStreamMaxEventBytes(32);
205+
206+
ChatRequest request = new ChatRequest();
207+
request.setMessages(Collections.singletonList(new ChatRequest.Message("user", "hello")));
208+
AtomicInteger consumerCalls = new AtomicInteger();
209+
210+
try (HermesSseClient sse = new HermesSseClient(config, null, client)) {
211+
CountDownLatch failed = new CountDownLatch(1);
212+
AtomicReference<Throwable> failure = new AtomicReference<>();
213+
SseSubscription subscription = sse.subscribeChat(request,
214+
ignored -> consumerCalls.incrementAndGet(),
215+
() -> { },
216+
error -> {
217+
failure.set(error);
218+
failed.countDown();
219+
});
220+
221+
assertTrue(failed.await(3, TimeUnit.SECONDS));
222+
assertEquals(0, consumerCalls.get());
223+
assertTrue(failure.get() instanceof SseProtocolException);
224+
assertFalse(subscription.isActive());
225+
assertEquals(0, sse.activeSubscriptionCount());
226+
}
227+
}
228+
183229
@Test
184230
void sessionDisconnectDoesNotReplayOriginalPost() throws Exception {
185231
try (MockWebServer server = new MockWebServer()) {

0 commit comments

Comments
 (0)