Skip to content

Commit 2823d8d

Browse files
committed
Fix race condition in the OptionalPayloadTests
The test fails sporadically like: ``` java.lang.AssertionError: Expecting actual: ["bar", null, "baz"] to contain exactly in any order: ["foo", null, "bar", "baz"] but could not find the following elements: ["foo"] ``` That means the `listener.latch` is fulfilled, but `ArrayList` state is not deterministic due to different threads interacting with this collection. * Wrap `listener.deOptionaled` into a `Collections.synchronizedList()` and use `synchronized (listener.deOptionaled) {` around assert command.
1 parent 15a6321 commit 2823d8d

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/OptionalPayloadTests.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.amqp.rabbit.annotation;
1818

1919
import java.util.ArrayList;
20+
import java.util.Collections;
2021
import java.util.List;
2122
import java.util.Optional;
2223
import java.util.concurrent.CountDownLatch;
@@ -83,7 +84,10 @@ void optionals(@Autowired RabbitTemplate template, @Autowired Listener listener)
8384
.build())
8485
.build());
8586
assertThat(listener.latch.await(10, TimeUnit.SECONDS)).isTrue();
86-
assertThat(listener.deOptionaled).containsExactlyInAnyOrder("foo", null, "bar", "baz");
87+
88+
synchronized (listener.deOptionaled) {
89+
assertThat(listener.deOptionaled).containsExactlyInAnyOrder("foo", null, "bar", "baz");
90+
}
8791
}
8892

8993
@Configuration
@@ -126,7 +130,7 @@ static class Listener {
126130

127131
final CountDownLatch latch = new CountDownLatch(4);
128132

129-
List<String> deOptionaled = new ArrayList<>();
133+
final List<String> deOptionaled = Collections.synchronizedList(new ArrayList<>());
130134

131135
@RabbitListener(queues = "op.1")
132136
void listen(@Payload(required = false) String payload) {

0 commit comments

Comments
 (0)