|
17 | 17 | package com.hedera.block.server;
|
18 | 18 |
|
19 | 19 | import static com.hedera.block.protos.BlockStreamService.*;
|
20 |
| -import static com.hedera.block.protos.BlockStreamService.PublishStreamResponse.EndOfStream; |
21 |
| -import static com.hedera.block.protos.BlockStreamService.PublishStreamResponse.ItemAcknowledgement; |
22 |
| -import static com.hedera.block.protos.BlockStreamService.PublishStreamResponse.PublishStreamResponseCode; |
| 20 | +import static com.hedera.block.protos.BlockStreamService.PublishStreamResponse.*; |
23 | 21 | import static com.hedera.block.server.util.PersistTestUtils.generateBlockItems;
|
24 | 22 | import static org.junit.jupiter.api.Assertions.assertFalse;
|
25 | 23 | import static org.mockito.Mockito.*;
|
|
29 | 27 | import com.hedera.block.server.mediator.LiveStreamMediatorImpl;
|
30 | 28 | import com.hedera.block.server.mediator.StreamMediator;
|
31 | 29 | import com.hedera.block.server.persistence.FileSystemPersistenceHandler;
|
32 |
| -import com.hedera.block.server.persistence.storage.BlockAsDirReader; |
33 |
| -import com.hedera.block.server.persistence.storage.BlockAsDirWriter; |
34 |
| -import com.hedera.block.server.persistence.storage.BlockReader; |
35 |
| -import com.hedera.block.server.persistence.storage.BlockWriter; |
| 30 | +import com.hedera.block.server.persistence.storage.*; |
36 | 31 | import com.hedera.block.server.producer.ItemAckBuilder;
|
37 | 32 | import com.hedera.block.server.util.TestUtils;
|
38 | 33 | import com.lmax.disruptor.BatchEventProcessor;
|
|
44 | 39 | import java.io.IOException;
|
45 | 40 | import java.nio.file.Files;
|
46 | 41 | import java.nio.file.Path;
|
| 42 | +import java.nio.file.attribute.FileAttribute; |
47 | 43 | import java.nio.file.attribute.PosixFilePermission;
|
48 |
| -import java.nio.file.attribute.PosixFilePermissions; |
49 | 44 | import java.security.NoSuchAlgorithmException;
|
50 | 45 | import java.util.*;
|
51 | 46 | import java.util.concurrent.ConcurrentHashMap;
|
@@ -303,7 +298,7 @@ public void testSubAndUnsubWhileStreaming() throws IOException, InterruptedExcep
|
303 | 298 | BlockItemEventHandler<ObjectEvent<SubscribeStreamResponse>>,
|
304 | 299 | BatchEventProcessor<ObjectEvent<SubscribeStreamResponse>>>
|
305 | 300 | subscribers = new LinkedHashMap<>();
|
306 |
| - final var streamMediator = buildStreamMediator(subscribers); |
| 301 | + final var streamMediator = buildStreamMediator(subscribers, Util.defaultPerms); |
307 | 302 | final var blockStreamService = buildBlockStreamService(streamMediator);
|
308 | 303 |
|
309 | 304 | // Pass a StreamObserver to the producer as Helidon does
|
@@ -389,7 +384,10 @@ public void testMediatorExceptionHandlingWhenPersistenceFailure()
|
389 | 384 | BlockItemEventHandler<ObjectEvent<SubscribeStreamResponse>>,
|
390 | 385 | BatchEventProcessor<ObjectEvent<SubscribeStreamResponse>>>
|
391 | 386 | subscribers = new ConcurrentHashMap<>();
|
392 |
| - final var streamMediator = buildStreamMediator(subscribers); |
| 387 | + |
| 388 | + // Initialize the underlying BlockReader and BlockWriter with ineffective |
| 389 | + // permissions to repair the file system. |
| 390 | + final var streamMediator = buildStreamMediator(subscribers, TestUtils.getNoPerms()); |
393 | 391 | final var blockStreamService = buildBlockStreamService(streamMediator);
|
394 | 392 |
|
395 | 393 | // Register the web server to confirm
|
@@ -452,12 +450,9 @@ public void testMediatorExceptionHandlingWhenPersistenceFailure()
|
452 | 450 | verify(webServer, times(1)).stop();
|
453 | 451 | }
|
454 | 452 |
|
455 |
| - private static final String NO_WRITE = "r-xr-xr-x"; |
456 |
| - |
457 | 453 | private void removeRootPathWritePerms(final Config config) throws IOException {
|
458 | 454 | final Path blockNodeRootPath = Path.of(config.get(JUNIT).asString().get());
|
459 |
| - final Set<PosixFilePermission> perms = PosixFilePermissions.fromString(NO_WRITE); |
460 |
| - Files.setPosixFilePermissions(blockNodeRootPath, perms); |
| 455 | + Files.setPosixFilePermissions(blockNodeRootPath, TestUtils.getNoWrite().value()); |
461 | 456 | }
|
462 | 457 |
|
463 | 458 | private static void verifySubscribeStreamResponse(
|
@@ -499,19 +494,21 @@ private static SubscribeStreamResponse buildSubscribeStreamResponse(BlockItem bl
|
499 | 494 |
|
500 | 495 | private StreamMediator<BlockItem, ObjectEvent<SubscribeStreamResponse>> buildStreamMediator()
|
501 | 496 | throws IOException {
|
502 |
| - return buildStreamMediator(new ConcurrentHashMap<>()); |
| 497 | + return buildStreamMediator(new ConcurrentHashMap<>(), Util.defaultPerms); |
503 | 498 | }
|
504 | 499 |
|
505 | 500 | private StreamMediator<BlockItem, ObjectEvent<SubscribeStreamResponse>> buildStreamMediator(
|
506 | 501 | final Map<
|
507 | 502 | BlockItemEventHandler<ObjectEvent<SubscribeStreamResponse>>,
|
508 | 503 | BatchEventProcessor<ObjectEvent<SubscribeStreamResponse>>>
|
509 |
| - subscribers) |
| 504 | + subscribers, |
| 505 | + FileAttribute<Set<PosixFilePermission>> filePerms) |
510 | 506 | throws IOException {
|
511 | 507 |
|
512 | 508 | // Initialize with concrete a concrete BlockReader, BlockWriter and Mediator
|
513 |
| - final BlockReader<Block> blockReader = new BlockAsDirReader(JUNIT, testConfig); |
514 |
| - final BlockWriter<BlockItem> blockWriter = new BlockAsDirWriter(JUNIT, testConfig); |
| 509 | + final BlockReader<Block> blockReader = new BlockAsDirReader(JUNIT, testConfig, filePerms); |
| 510 | + final BlockWriter<BlockItem> blockWriter = |
| 511 | + new BlockAsDirWriter(JUNIT, testConfig, filePerms); |
515 | 512 | return new LiveStreamMediatorImpl(
|
516 | 513 | subscribers, new FileSystemPersistenceHandler(blockReader, blockWriter));
|
517 | 514 | }
|
|
0 commit comments