Skip to content

Commit f26d932

Browse files
committed
Mitigate some timing and memory concerns in TCP/IP tests
1 parent 8df5c43 commit f26d932

File tree

3 files changed

+33
-54
lines changed

3 files changed

+33
-54
lines changed

spring-integration-ip/src/test/java/org/springframework/integration/ip/tcp/connection/TcpNioConnectionReadTests.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ public void removeDeadConnection(TcpConnection connection) {
241241
@Test
242242
public void testReadStxEtxOverflow() throws Exception {
243243
ByteArrayStxEtxSerializer serializer = new ByteArrayStxEtxSerializer();
244-
serializer.setMaxMessageSize(1024);
244+
serializer.setMaxMessageSize(8);
245245
final Semaphore semaphore = new Semaphore(0);
246246
final List<TcpConnection> added = new ArrayList<>();
247247
final List<TcpConnection> removed = new ArrayList<>();
@@ -284,7 +284,7 @@ public void removeDeadConnection(TcpConnection connection) {
284284

285285
assertThat(errorMessageRef.get().getMessage())
286286
.satisfiesAnyOf(
287-
s -> assertThat(s).contains("ETX not found before max message length: 1024"),
287+
s -> assertThat(s).contains("ETX not found before max message length: 8"),
288288
s -> assertThat(s).contains("Connection is closed"));
289289

290290
assertThat(semaphore.tryAcquire(10000, TimeUnit.MILLISECONDS)).isTrue();
@@ -347,7 +347,6 @@ public void removeDeadConnection(TcpConnection connection) {
347347

348348
/**
349349
* Tests socket closure when no data received.
350-
* @throws Exception
351350
*/
352351
@Test
353352
public void testCloseCleanupNoData() throws Exception {
@@ -400,7 +399,6 @@ public void removeDeadConnection(TcpConnection connection) {
400399

401400
/**
402401
* Tests socket closure when no data received.
403-
* @throws Exception
404402
*/
405403
@Test
406404
public void testCloseCleanupPartialData() throws Exception {
@@ -454,7 +452,6 @@ public void removeDeadConnection(TcpConnection connection) {
454452

455453
/**
456454
* Tests socket closure when mid-message
457-
* @throws Exception
458455
*/
459456
@Test
460457
public void testCloseCleanupCrLf() throws Exception {
@@ -464,7 +461,6 @@ public void testCloseCleanupCrLf() throws Exception {
464461

465462
/**
466463
* Tests socket closure when mid-message
467-
* @throws Exception
468464
*/
469465
@Test
470466
public void testCloseCleanupStxEtx() throws Exception {
@@ -474,7 +470,6 @@ public void testCloseCleanupStxEtx() throws Exception {
474470

475471
/**
476472
* Tests socket closure when mid-message
477-
* @throws Exception
478473
*/
479474
@Test
480475
public void testCloseCleanupLengthHeader() throws Exception {

spring-integration-ip/src/test/java/org/springframework/integration/ip/tcp/serializer/DeserializationTests.java

Lines changed: 30 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@
4646
import org.springframework.messaging.support.GenericMessage;
4747

4848
import static org.assertj.core.api.Assertions.assertThat;
49+
import static org.assertj.core.api.Assertions.assertThatException;
50+
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
4951
import static org.assertj.core.api.Assertions.assertThatIOException;
50-
import static org.assertj.core.api.Assertions.fail;
5152
import static org.mockito.Mockito.mock;
5253

5354
/**
@@ -135,13 +136,8 @@ public void testReadRawElastic() throws Exception {
135136
ByteArrayElasticRawDeserializer serializer = new ByteArrayElasticRawDeserializer();
136137
byte[] out = serializer.deserialize(socket.getInputStream());
137138
assertThat(new String(out)).as("Data").isEqualTo(SocketTestUtils.TEST_STRING + SocketTestUtils.TEST_STRING);
138-
try {
139-
serializer.deserialize(socket.getInputStream());
140-
fail("Expected end of Stream");
141-
}
142-
catch (SoftEndOfStreamException e) {
143-
// NOSONAR
144-
}
139+
assertThatExceptionOfType(SoftEndOfStreamException.class)
140+
.isThrownBy(() -> serializer.deserialize(socket.getInputStream()));
145141
server.close();
146142
}
147143

@@ -171,15 +167,9 @@ public void testReadLengthOverflow() throws Exception {
171167
Socket socket = server.accept();
172168
socket.setSoTimeout(5000);
173169
ByteArrayLengthHeaderSerializer serializer = new ByteArrayLengthHeaderSerializer();
174-
try {
175-
serializer.deserialize(socket.getInputStream());
176-
fail("Expected message length exceeded exception");
177-
}
178-
catch (IOException e) {
179-
if (!e.getMessage().startsWith("Message length")) {
180-
fail("Unexpected IO Error:" + e.getMessage());
181-
}
182-
}
170+
assertThatIOException()
171+
.isThrownBy(() -> serializer.deserialize(socket.getInputStream()))
172+
.withMessageStartingWith("Message length");
183173
server.close();
184174
done.countDown();
185175
}
@@ -193,15 +183,9 @@ public void testReadStxEtxTimeout() throws Exception {
193183
Socket socket = server.accept();
194184
socket.setSoTimeout(500);
195185
ByteArrayStxEtxSerializer serializer = new ByteArrayStxEtxSerializer();
196-
try {
197-
serializer.deserialize(socket.getInputStream());
198-
fail("Expected timeout exception");
199-
}
200-
catch (IOException e) {
201-
if (!e.getMessage().startsWith("Read timed out")) {
202-
fail("Unexpected IO Error:" + e.getMessage());
203-
}
204-
}
186+
assertThatIOException()
187+
.isThrownBy(() -> serializer.deserialize(socket.getInputStream()))
188+
.withMessageStartingWith("Read timed out");
205189
server.close();
206190
done.countDown();
207191
}
@@ -215,16 +199,10 @@ public void testReadStxEtxOverflow() throws Exception {
215199
Socket socket = server.accept();
216200
socket.setSoTimeout(5000);
217201
ByteArrayStxEtxSerializer serializer = new ByteArrayStxEtxSerializer();
218-
serializer.setMaxMessageSize(1024);
219-
try {
220-
serializer.deserialize(socket.getInputStream());
221-
fail("Expected message length exceeded exception");
222-
}
223-
catch (IOException e) {
224-
if (!e.getMessage().startsWith("ETX not found")) {
225-
fail("Unexpected IO Error:" + e.getMessage());
226-
}
227-
}
202+
serializer.setMaxMessageSize(8);
203+
assertThatIOException()
204+
.isThrownBy(() -> serializer.deserialize(socket.getInputStream()))
205+
.withMessageStartingWith("ETX not found");
228206
server.close();
229207
done.countDown();
230208
}
@@ -310,15 +288,13 @@ private TcpDeserializationExceptionEvent doDeserialize(AbstractByteArraySerializ
310288
ByteArrayInputStream bais = new ByteArrayInputStream(data);
311289
deser.setApplicationEventPublisher(anEvent -> event.set((TcpDeserializationExceptionEvent) anEvent));
312290
deser.setMaxMessageSize(mms);
313-
try {
314-
deser.deserialize(bais);
315-
fail("expected exception");
316-
}
317-
catch (Exception e) {
318-
assertThat(event.get()).isNotNull();
319-
assertThat(event.get().getCause()).isSameAs(e);
320-
assertThat(e.getMessage()).contains(expectedMessage);
321-
}
291+
assertThatException()
292+
.isThrownBy(() -> deser.deserialize(bais))
293+
.withMessageContaining(expectedMessage)
294+
.satisfies((ex) -> {
295+
assertThat(event.get()).isNotNull();
296+
assertThat(event.get().getCause()).isSameAs(ex);
297+
});
322298
return event.get();
323299
}
324300

@@ -335,6 +311,8 @@ public void testTimeoutWithRawDeserializer() {
335311
private void testTimeoutWhileDecoding(AbstractByteArraySerializer deserializer, String reply) {
336312
ByteArrayRawSerializer serializer = new ByteArrayRawSerializer();
337313
TcpNioServerConnectionFactory serverNio = new TcpNioServerConnectionFactory(0);
314+
serverNio.setApplicationEventPublisher(event -> {
315+
});
338316
ByteArrayLengthHeaderSerializer lengthHeaderSerializer = new ByteArrayLengthHeaderSerializer(1);
339317
serverNio.setDeserializer(lengthHeaderSerializer);
340318
serverNio.setSerializer(serializer);
@@ -348,6 +326,8 @@ private void testTimeoutWhileDecoding(AbstractByteArraySerializer deserializer,
348326
in.start();
349327
TestingUtilities.waitListening(serverNio, null);
350328
TcpNioClientConnectionFactory clientNio = new TcpNioClientConnectionFactory("localhost", serverNio.getPort());
329+
clientNio.setApplicationEventPublisher(event -> {
330+
});
351331
clientNio.setSerializer(serializer);
352332
clientNio.setDeserializer(deserializer);
353333
clientNio.setSoTimeout(500);
@@ -377,7 +357,7 @@ private void testTimeoutWhileDecoding(AbstractByteArraySerializer deserializer,
377357
assertThat(new String((byte[]) message.getPayload())).isEqualTo("Test");
378358
String shortReply = reply.substring(0, reply.length() - 1);
379359
((MessageChannel) message.getHeaders().getReplyChannel()).send(new GenericMessage<>(shortReply));
380-
message = outputChannel.receive(1000);
360+
message = outputChannel.receive(100);
381361
assertThat(message).isNull();
382362
}
383363

@@ -388,6 +368,8 @@ public void testTimeoutWithRawDeserializerEofIsTerminator() {
388368
ByteArrayLengthHeaderSerializer lengthHeaderSerializer = new ByteArrayLengthHeaderSerializer(1);
389369
serverNio.setDeserializer(lengthHeaderSerializer);
390370
serverNio.setSerializer(serializer);
371+
serverNio.setApplicationEventPublisher(event -> {
372+
});
391373
serverNio.afterPropertiesSet();
392374
TcpInboundGateway in = new TcpInboundGateway();
393375
in.setConnectionFactory(serverNio);
@@ -401,6 +383,8 @@ public void testTimeoutWithRawDeserializerEofIsTerminator() {
401383
clientNio.setSerializer(serializer);
402384
clientNio.setDeserializer(new ByteArrayRawSerializer(true));
403385
clientNio.setSoTimeout(1000);
386+
clientNio.setApplicationEventPublisher(event -> {
387+
});
404388
clientNio.afterPropertiesSet();
405389
final TcpOutboundGateway out = new TcpOutboundGateway();
406390
out.setConnectionFactory(clientNio);

spring-integration-ip/src/test/java/org/springframework/integration/ip/util/SocketTestUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ public static CountDownLatch testSendStxEtxOverflow(final int port) {
202202
try (Socket socket = new Socket(InetAddress.getLocalHost(), port)) {
203203
OutputStream outputStream = socket.getOutputStream();
204204
writeByte(outputStream, 0x02, true);
205-
for (int i = 0; i < 1500; i++) {
205+
for (int i = 0; i < 9; i++) {
206206
writeByte(outputStream, 'x', true);
207207
}
208208
testCompleteLatch.await(10, TimeUnit.SECONDS);

0 commit comments

Comments
 (0)