Skip to content

Commit 877f5a0

Browse files
authored
Fix simple publisher test. (#3510)
1 parent 979ff9b commit 877f5a0

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

utils/src/test/java/software/amazon/awssdk/utils/async/SimplePublisherTest.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import java.util.Optional;
2626
import java.util.concurrent.CompletableFuture;
2727
import java.util.concurrent.CountDownLatch;
28-
import java.util.concurrent.ExecutionException;
2928
import java.util.concurrent.ExecutorService;
3029
import java.util.concurrent.Executors;
3130
import java.util.concurrent.Future;
@@ -400,13 +399,13 @@ private void addIfFailed(List<Pair<String, Throwable>> failures, String callName
400399
}
401400
}
402401

403-
private void seemsThreadSafeWithProducerCount(int producerCount) throws InterruptedException, ExecutionException {
402+
private void seemsThreadSafeWithProducerCount(int producerCount) {
404403
assertTimeoutPreemptively(STOCHASTIC_TEST_DURATION.plusSeconds(5), () -> {
405404
AtomicBoolean runProducers = new AtomicBoolean(true);
406405
AtomicBoolean runConsumers = new AtomicBoolean(true);
407406
AtomicInteger completesReceived = new AtomicInteger(0);
408407

409-
AtomicLong messageCount = new AtomicLong(0);
408+
AtomicLong messageSendCount = new AtomicLong(0);
410409
AtomicLong messageReceiveCount = new AtomicLong(0);
411410

412411
Semaphore productionLimiter = new Semaphore(101);
@@ -418,14 +417,15 @@ private void seemsThreadSafeWithProducerCount(int producerCount) throws Interrup
418417
publisher.subscribe(subscriber);
419418

420419
// Producer tasks
420+
CompletableFuture<?> completed = new CompletableFuture<>();
421421
List<Future<?>> producers = new ArrayList<>();
422422
for (int i = 0; i < producerCount; i++) {
423423
producers.add(executor.submit(() -> {
424424
while (runProducers.get()) {
425425
productionLimiter.acquire();
426-
publisher.send(messageCount.getAndIncrement());
426+
publisher.send(messageSendCount.getAndIncrement());
427427
}
428-
publisher.complete(); // All but one producer sending this will fail.
428+
publisher.complete().thenRun(() -> completed.complete(null)); // All but one producer sending this will fail.
429429
return null;
430430
}));
431431
}
@@ -476,17 +476,21 @@ private void seemsThreadSafeWithProducerCount(int producerCount) throws Interrup
476476
producer.get();
477477
}
478478

479+
// Make sure to flush out everything left in the queue.
480+
completed.get();
481+
subscriber.subscription.request(Long.MAX_VALUE);
482+
479483
// Shut down consumers
480484
runConsumers.set(false);
481485
requestLimiter.release();
482486
requester.get();
483487
consumer.get();
484488

489+
assertThat(messageReceiveCount.get()).isEqualTo(messageSendCount.get());
485490
assertThat(completesReceived.get()).isEqualTo(1);
486-
assertThat(messageReceiveCount.get()).isEqualTo(messageCount.get());
487491

488492
// Make sure we actually tested something
489-
assertThat(messageCount.get()).isGreaterThan(10);
493+
assertThat(messageSendCount.get()).isGreaterThan(10);
490494
});
491495
}
492496

0 commit comments

Comments
 (0)