Skip to content

Commit 14f1d62

Browse files
committed
chore: improvements for test repeatability (#766)
Signed-off-by: Alex Kehayov <[email protected]>
1 parent c42d534 commit 14f1d62

File tree

5 files changed

+241
-84
lines changed

5 files changed

+241
-84
lines changed

server/src/main/java/com/hedera/block/server/pbj/PbjBlockStreamServiceProxy.java

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,37 @@ public Pipeline<? super Bytes> open(
130130
final @NonNull RequestOptions options,
131131
final @NonNull Pipeline<? super Bytes> replies) {
132132

133-
final var m = (BlockStreamMethod) method;
133+
return openPipeline(
134+
(BlockStreamMethod) method,
135+
options,
136+
replies,
137+
openRangeHistoricStreamingExecutorService,
138+
closedRangeHistoricStreamingExecutorService);
139+
}
140+
141+
@NonNull
142+
public Pipeline<? super Bytes> open(
143+
final @NonNull Method method,
144+
final @NonNull RequestOptions options,
145+
final @NonNull Pipeline<? super Bytes> replies,
146+
final @NonNull ExecutorService openRangeHistoricStreamingExecutorService,
147+
final @NonNull ExecutorService closedRangeHistoricStreamingExecutorService) {
148+
149+
return openPipeline(
150+
(BlockStreamMethod) method,
151+
options,
152+
replies,
153+
openRangeHistoricStreamingExecutorService,
154+
closedRangeHistoricStreamingExecutorService);
155+
}
156+
157+
private Pipeline<? super Bytes> openPipeline(
158+
@NonNull BlockStreamMethod method,
159+
@NonNull RequestOptions options,
160+
@NonNull Pipeline<? super Bytes> replies,
161+
@NonNull ExecutorService openRangeHistoricStreamingExecutorService,
162+
@NonNull ExecutorService closedRangeHistoricStreamingExecutorService) {
163+
final var m = method;
134164
try {
135165
return switch (m) {
136166
case publishBlockStream -> {
@@ -145,7 +175,11 @@ public Pipeline<? super Bytes> open(
145175
case subscribeBlockStream -> Pipelines
146176
.<SubscribeStreamRequest, SubscribeStreamResponseUnparsed>serverStreaming()
147177
.mapRequest(bytes -> parseSubscribeStreamRequest(bytes, options))
148-
.method(this::subscribeBlockStream)
178+
.method((subscribeStreamRequest, helidonConsumerObserver) -> subscribeBlockStream(
179+
subscribeStreamRequest,
180+
helidonConsumerObserver,
181+
openRangeHistoricStreamingExecutorService,
182+
closedRangeHistoricStreamingExecutorService))
149183
.mapResponse(reply -> createSubscribeStreamResponse(reply, options))
150184
.respondTo(replies)
151185
.build();
@@ -201,7 +235,9 @@ Pipeline<List<BlockItemUnparsed>> publishBlockStream(
201235
*/
202236
void subscribeBlockStream(
203237
@NonNull final SubscribeStreamRequest subscribeStreamRequest,
204-
@NonNull final Pipeline<? super SubscribeStreamResponseUnparsed> helidonConsumerObserver) {
238+
@NonNull final Pipeline<? super SubscribeStreamResponseUnparsed> helidonConsumerObserver,
239+
@NonNull final ExecutorService openRangeHistoricStreamingExecutorService,
240+
@NonNull final ExecutorService closedRangeHistoricStreamingExecutorService) {
205241

206242
LOGGER.log(DEBUG, "Executing Server Streaming subscribeBlockStream gRPC method");
207243

server/src/test/java/com/hedera/block/server/mediator/LiveStreamMediatorImplTest.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// SPDX-License-Identifier: Apache-2.0
22
package com.hedera.block.server.mediator;
33

4+
import static com.hedera.block.server.metrics.BlockNodeMetricTypes.Counter.BlocksPersisted;
45
import static com.hedera.block.server.metrics.BlockNodeMetricTypes.Counter.LiveBlockItems;
56
import static com.hedera.block.server.metrics.BlockNodeMetricTypes.Gauge.Consumers;
67
import static com.hedera.block.server.util.PersistTestUtils.PERSISTENCE_STORAGE_ARCHIVE_ROOT_PATH_KEY;
@@ -32,6 +33,7 @@
3233
import com.hedera.block.server.service.ServiceConfig;
3334
import com.hedera.block.server.service.ServiceStatus;
3435
import com.hedera.block.server.service.ServiceStatusImpl;
36+
import com.hedera.block.server.util.BlockingExecutorService;
3537
import com.hedera.block.server.util.PersistTestUtils;
3638
import com.hedera.block.server.util.TestConfigUtil;
3739
import com.hedera.hapi.block.BlockItemSetUnparsed;
@@ -174,7 +176,9 @@ void testUnsubscribeEach() throws InterruptedException {
174176
}
175177

176178
@Test
177-
void testMediatorPersistenceWithoutSubscribers() throws IOException {
179+
void testMediatorPersistenceWithoutSubscribers() throws IOException, InterruptedException {
180+
// 1 block is expected to be processed, so the expected tasks param is set to 1
181+
final BlockingExecutorService executor = new BlockingExecutorService(1, 1);
178182
final ServiceStatus serviceStatus = new ServiceStatusImpl(serviceConfig);
179183
final LiveStreamMediator streamMediator = LiveStreamMediatorBuilder.newBuilder(
180184
metricsService, mediatorConfig, serviceStatus)
@@ -192,7 +196,7 @@ void testMediatorPersistenceWithoutSubscribers() throws IOException {
192196
serviceStatus,
193197
ackHandlerMock,
194198
writerFactory,
195-
executorMock,
199+
executor,
196200
archiverMock,
197201
pathResolverMock,
198202
persistenceStorageConfig);
@@ -201,13 +205,12 @@ void testMediatorPersistenceWithoutSubscribers() throws IOException {
201205
// Acting as a producer, notify the mediator of a new block
202206
streamMediator.publish(blockItemUnparsed);
203207

208+
// Wait all the tasks to complete before the assertions to avoid flakiness
209+
executor.waitTasksToComplete();
210+
204211
// Verify the counter was incremented
205212
assertEquals(10, metricsService.get(LiveBlockItems).get());
206-
207-
// @todo(642) we need to employ the same technique here to inject a writer that will ensure
208-
// the tasks are complete before we can verify the metrics for blocks persisted
209-
// the test will pass without flaking if we do that
210-
// assertEquals(1, blockNodeContext.metricsService().get(BlocksPersisted).get());
213+
assertEquals(1, metricsService.get(BlocksPersisted).get());
211214
}
212215

213216
@Test

0 commit comments

Comments
 (0)