Sub-scope 04 (fileserver) platform/local - IO primitive / gateway / store+publisher revision=a24ece9cf797f7ea647e33bf846b115208ed1ba5 generatedAt=2026-08-30T01:22:06+00:00 === OWNED FILES === 3c03d0e4158da54e8105d03c2233662139b0bd2e platform/local/LocalStorageLayout.java 29 ade8a995be43b400974148f20e103cd347ec3bef platform/local/PhysicalPathResolver.java 26 ef697d8d353ad83cd8cdf2bf0af833d98a06065b platform/local/DefaultPhysicalPathResolver.java 134 de4a170b7c7d44bc69302b958c161145ce8ad6aa platform/local/SecureDirectoryWalk.java 172 eb5594e2bdce47fc01e720c811faae93ab222530 platform/local/SafeFileChannelFactory.java 288 35b5e29b631cdd50ff4618983f669bcde1f16447 platform/local/BoundedFileChannel.java 52 d60c3a5db41a27b3612bb8514146e4edc4416ab3 platform/local/StreamingDigest.java 62 675e5f0e0b22e3280e5037ba6a65be35de84b599 platform/local/TransferBufferPool.java 59 05639c1c99be3986dcb1978e480052b1b589a178 platform/local/LocalAppendEngine.java 260 c03b3c4a65a834b55969a74c73c84100ac315fb2 platform/local/LocalUploadContentGateway.java 118 16b82d1689bdd819dd655e20f699d363cbe8b4af platform/local/LocalUploadStorageGateway.java 62 61e4a361fd57accc87355befde54e4d8a8f8c8c8 platform/local/LocalDownloadContentGateway.java 26 d61ca3342028694c233131a16510ca597ec0eb75 platform/local/LocalZeroCopyDownloadGateway.java 42 d5c5b8d0e1f3890e92416f4adb13b9c691e58e06 platform/local/LocalCopyContentGateway.java 102 64a3456555dae206bd5fdac3d5adf22aa17db6e7 platform/local/LocalCleanupContentGateway.java 33 7d4466f3071626cf4e19cf3167b701055943a89b platform/local/LocalUploadHandle.java 75 28ea844dd9209f303ac2782070c700e1a0c45eec platform/local/LocalBlockingContentStore.java 400 38924d53eec31163de73d6b98a8da8351c94f538 platform/local/ContentPublisher.java 17 e878aab9a89c2dc268cad36ae4b0f440ce2ebb79 platform/local/AtomicMoveContentPublisher.java 124 b5e407f37420a3d861cc7d612a7375e95102ed3d platform/local/MetadataPointerContentPublisher.java 115 d9c8790ab5f0beb9c206e01610aebc3f219b44f9 platform/local/ContentPublishVerification.java 133 7a4b14c2820ac250818c2e43544cd71253fa3e06 platform/local/PublishResult.java 21 b01552ee5658797faef668bc322b9776681e1587 test/ContentPublisherTest.java 208 8a9a8ad2799700f69ef9e428d0dafd928b0f89cf test/LocalAppendEngineTest.java 245 72c3b9920e105683e58df82a0e7f717eceb548f9 test/LocalAppendMemoryTest.java 92 42fd4735920e8b8ce26f48dc3d5a7eb634dcf12f test/LocalCreateUploadTest.java 157 db9c350bf983107f17fd62234222445fb78b60be test/LocalCreateUploadConcurrencyTest.java 72 7e1fbf711532bbe13dc69c9f3707a329b5ef2ab4 test/LocalStorageGatewayContractTest.java 269 2696bca685bf8a49c4bb37839dded0c19c0c877f test/PhysicalPathResolverTest.java 112 00fcdd6fd3c8e7464b19dfcf119f762be22b8cb9 test/LocalContentStoreFixture.java 82 === 8.1 reachability: which platform/local types are public? === $ grep -l 'public final class\|public interface\|public record' adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/*.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/AmbiguousFilesystemOperationDetector.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalBlockingContentStore.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalCleanupContentGateway.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalCopyContentGateway.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalDownloadContentGateway.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalOrphanScanAdapter.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalReconciliationContentProbe.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageCapabilityProbe.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageHealthAdapter.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageProbeResult.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageProperties.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageUsageProbe.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalUploadContentGateway.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalUploadStorageGateway.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalZeroCopyDownloadGateway.java exit=0 $ git grep -rln 'platform.local' -- . | grep -v "^adapter/outbound/fileserver/" app-bootstrap/src/main/java/dev/caskeleton/bootstrap/autoconfigure/fileserver/FileserverServiceConfiguration.java app-bootstrap/src/main/java/dev/caskeleton/bootstrap/autoconfigure/fileserver/FileserverStartupCheck.java app-bootstrap/src/main/java/dev/caskeleton/bootstrap/autoconfigure/fileserver/FileserverStartupConfiguration.java app-bootstrap/src/main/java/dev/caskeleton/bootstrap/autoconfigure/fileserver/FileserverStartupValidator.java app-bootstrap/src/main/java/dev/caskeleton/bootstrap/autoconfigure/fileserver/FileserverStorageConfiguration.java app-bootstrap/src/test/java/dev/caskeleton/bootstrap/autoconfigure/fileserver/FileserverStartupValidatorTest.java exit=0 === 8.2 the module's own rule: descriptor-relative access, and where pathnames survive === --- descriptor-relative usage per file $ grep -c 'SecureDirectoryWalk\|channels\.' adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalBlockingContentStore.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalAppendEngine.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/SafeFileChannelFactory.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalBlockingContentStore.java:20 adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalAppendEngine.java:5 adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/SafeFileChannelFactory.java:5 exit=0 --- every remaining java.nio.file.Files.* call in platform/local $ grep -n 'Files\.' adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/*.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/AtomicMoveContentPublisher.java:53: Files.move(staging, target, StandardCopyOption.ATOMIC_MOVE); adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/AtomicMoveContentPublisher.java:113: boolean stagingGone = !Files.exists(staging, LinkOption.NOFOLLOW_LINKS); adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/AtomicMoveContentPublisher.java:114: boolean targetPresent = Files.exists(target, LinkOption.NOFOLLOW_LINKS); adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublishVerification.java:53: return Files.size(target); adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublishVerification.java:114: if (!Files.isDirectory(directory, LinkOption.NOFOLLOW_LINKS)) { adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalAppendEngine.java:124: *
{@code Files.size} would re-resolve the whole pathname, which is precisely the lookup a
adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalOrphanScanAdapter.java:73: if (!Files.isDirectory(contentRoot, LinkOption.NOFOLLOW_LINKS)) {
adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalOrphanScanAdapter.java:81: try (Stream Production access no longer relies on it: descending descriptor by descriptor with {@code
158- * NOFOLLOW_LINKS} refuses a symlinked component by construction, which a precheck could only ever
159- * approximate.
160- */
161- void requireNoSymlinkBetween(Path root, Path leaf) {
exit=0
$ grep -n 'could only ever approximate\|More checks only narrow the window' adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/SafeFileChannelFactory.java adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/SecureDirectoryWalk.java
adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/SecureDirectoryWalk.java:20: * directories. More checks only narrow the window; they never close it.
exit=0
=== 8.2c the same question answered two ways: file length ===
$ grep -n 'Files.size' -B 4 adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublishVerification.java
49- }
50-
51- long sizeOf(Path target) {
52- try {
53: return Files.size(target);
exit=0
$ grep -n 'private long currentLength' -B 8 -A 4 adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalAppendEngine.java
121- /**
122- * Length read through the staging file's parent descriptor.
123- *
124- * {@code Files.size} would re-resolve the whole pathname, which is precisely the lookup a
125- * replaced shard directory redirects: an attacker who swaps the parent for a symlink gets this
126- * check to report the size of their own file, and the offset comparison that follows is then
127- * being made about a different object than the one the append will open.
128- */
129: private long currentLength(Path root, Path staging) {
130- return channels.readAttributes(root, staging).size();
131- }
132-
133- /**
exit=0
=== 8.3 duplicate mechanism: two publishers, one selection point ===
$ grep -n 'selectPublisher' -A 18 adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalBlockingContentStore.java | head -24
63: this.publisher = selectPublisher(properties, probeResult, verification);
64- this.capabilities = probeResult.toCapabilities(true);
65- }
66-
67- /**
68- * Chooses the publish strategy from the probe result.
69- *
70- * {@code ATOMIC_MOVE_REQUIRED} fails closed when the probe could not demonstrate an atomic
71- * move; {@code ATOMIC_MOVE_PREFERRED} degrades to a metadata pointer publish instead.
72- */
73: private ContentPublisher selectPublisher(
74- LocalStorageProperties properties,
75- LocalStorageProbeResult probeResult,
76- ContentPublishVerification verification) {
77- Path root = properties.root();
78- boolean atomicProven = probeResult.atomicMove();
79- return switch (properties.publishMode()) {
80- case ATOMIC_MOVE_REQUIRED -> {
81- if (!atomicProven) {
82- throw new AtomicPublishUnsupportedException(
83- "publish mode requires an atomic move that the storage probe could not prove",
84- FileserverFailureContext.of(FileserverErrorCode.ATOMIC_PUBLISH_UNSUPPORTED, false));
85- }
86- yield new AtomicMoveContentPublisher(root, resolver, channels, verification);
exit=0
$ grep -n 'usesAtomicMove' adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/*.java
adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/AtomicMoveContentPublisher.java:101: public boolean usesAtomicMove() {
adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisher.java:16: boolean usesAtomicMove();
adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalBlockingContentStore.java:379: return publisher.usesAtomicMove();
adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalBlockingContentStore.java:384: if (publisher.usesAtomicMove()) {
adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/MetadataPointerContentPublisher.java:69: public boolean usesAtomicMove() {
exit=0
=== 8.4 doc/behaviour: bounded memory claim and its regression test ===
$ grep -n 'maxBorrowedBytes' adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/TransferBufferPool.java adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalAppendMemoryTest.java
adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/TransferBufferPool.java:20: private final AtomicLong maxBorrowedBytes = new AtomicLong();
adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/TransferBufferPool.java:38: maxBorrowedBytes.accumulateAndGet(outstanding, Math::max);
adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/TransferBufferPool.java:56: long maxBorrowedBytes() {
adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/TransferBufferPool.java:57: return maxBorrowedBytes.get();
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalAppendMemoryTest.java:54: assertThat(bufferPool.maxBorrowedBytes()).isLessThanOrEqualTo(BUFFER_BYTES);
exit=0
$ grep -nE '@Test| void ' adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalAppendMemoryTest.java adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java | head -30
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalAppendMemoryTest.java:31: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalAppendMemoryTest.java:32: void maxObservedBufferDoesNotGrowWithPayload() throws IOException {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:20: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:21: void generatedContentPathAlwaysStaysBelowContentRoot() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:30: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:31: void stagingPathIsShardedFromTheUploadIdentityOnly() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:43: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:44: void quarantinePathMirrorsTheContentLayoutInASeparateArea() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:67: void rejectsEveryKeyThatIsNotTheServerGeneratedShardedShape(String candidate) {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:75: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:76: void newContentKeyIsShardedUniqueAndResolvable() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:87: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:88: void aRelativeStorageRootIsRejectedOutright() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:93: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:94: void everyAreaRootStaysBelowTheConfiguredRoot() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:103: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:104: void resolutionNeverDependsOnAClientFilename() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:32: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:33: void atomicPublisherMovesStagingToCreateOnlyTarget() throws IOException {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:48: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:49: void pointerPublisherKeepsImmutableObjectAndReturnsNewContentKey() throws IOException {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:64: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:65: void bothStrategiesRecordTheProvenSizeAndDigest() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:80: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:81: void aDigestMismatchNeverPublishesAnything() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:94: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:95: void aLengthMismatchNeverPublishesAnything() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:107: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:108: void requiredAtomicModeFailsClosedWhenTheProbeCouldNotProveIt() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:119: @Test
exit=0
$ grep -nE '@Test| void ' adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalCreateUploadConcurrencyTest.java adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java | head -30
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalCreateUploadConcurrencyTest.java:28: void exactlyOneConcurrentCreateWinsForSameUploadId() throws Exception {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:47: void setUp() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:56: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:57: void anUploadIsStagedAppendedAndReadBackThroughTheGateways() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:67: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:68: void aStagingLengthOfAMissingObjectReadsAsZeroRatherThanFailing() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:76: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:77: void aStagedDigestIsRefusedWhenTheOffsetDisagreesWithTheBytesOnDisk() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:86: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:87: void aPublishedObjectIsReadableThroughTheDownloadGateway() throws IOException {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:96: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:97: void aRangedReadIsBoundedToTheRequestedRegion() throws IOException {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:106: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:107: void aCopyProducesAnIndependentObjectWithTheSameBytes() throws IOException {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:121: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:122: void deletingTheCopyLeavesTheSourceIntact() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:133: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:134: void aDeleteWhoseSizePreconditionDisagreesIsRefused() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:143: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:144: void deletingAnAbsentObjectIsIdempotentRatherThanAFailure() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:152: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:153: void aDirectTransferWritesExactlyTheRequestedRegion() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:165: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:166: void aDirectTransferDeclinesForAnObjectThatIsNotThereRatherThanThrowing() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:188: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:189: void aSinkThatStopsPartWayReportsAPartialTransferRatherThanADecline() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:230: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:231: void aStagingCleanupRemovesTheBytesTheUploadOwned() {
exit=0
=== 8.4b maxBorrowedBytes: the javadoc names a regression test; who reads it? ===
$ grep -n 'the bounded-memory regression asserts on this' -A 3 adapter/outbound/fileserver/src/main/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/TransferBufferPool.java
55: /** Peak simultaneously-borrowed bytes; the bounded-memory regression asserts on this. */
56- long maxBorrowedBytes() {
57- return maxBorrowedBytes.get();
58- }
exit=0
$ git grep -rn 'maxBorrowedBytes' -- 'adapter/outbound/fileserver/src' | grep -v 'TransferBufferPool.java'
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalAppendMemoryTest.java:54: assertThat(bufferPool.maxBorrowedBytes()).isLessThanOrEqualTo(BUFFER_BYTES);
exit=0
$ grep -nE '@Test| void |assertThat' adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalAppendMemoryTest.java | head -20
3:import static org.assertj.core.api.Assertions.assertThat;
31: @Test
32: void maxObservedBufferDoesNotGrowWithPayload() throws IOException {
53: assertThat(result.committedOffset()).isEqualTo(PAYLOAD_BYTES);
54: assertThat(bufferPool.maxBorrowedBytes()).isLessThanOrEqualTo(BUFFER_BYTES);
55: assertThat(Files.size(staging)).isEqualTo(PAYLOAD_BYTES);
exit=0
$ git grep -rn 'LargeFileBoundedMemory' -- 'adapter/outbound/fileserver/src' | head -4
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/testkit/LargeFileBoundedMemoryTest.java:34:class LargeFileBoundedMemoryTest {
exit=0
$ grep -nE '@Test| void |assertThat.*[Mm]emory|Runtime.getRuntime' adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/testkit/LargeFileBoundedMemoryTest.java | head -20
43: @Test
44: void uploadingALargeObjectNeverRequestsMoreThanOneBufferAtATime() {
71: @Test
72: void readingALargeObjectIsAlsoBounded() throws Exception {
exit=0
=== 8.4c what LocalCreateUploadConcurrencyTest and the gateway contract cover ===
$ grep -nE '@Test| void ' adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalCreateUploadConcurrencyTest.java adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalCreateUploadConcurrencyTest.java:28: void exactlyOneConcurrentCreateWinsForSameUploadId() throws Exception {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:47: void setUp() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:56: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:57: void anUploadIsStagedAppendedAndReadBackThroughTheGateways() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:67: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:68: void aStagingLengthOfAMissingObjectReadsAsZeroRatherThanFailing() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:76: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:77: void aStagedDigestIsRefusedWhenTheOffsetDisagreesWithTheBytesOnDisk() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:86: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:87: void aPublishedObjectIsReadableThroughTheDownloadGateway() throws IOException {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:96: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:97: void aRangedReadIsBoundedToTheRequestedRegion() throws IOException {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:106: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:107: void aCopyProducesAnIndependentObjectWithTheSameBytes() throws IOException {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:121: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:122: void deletingTheCopyLeavesTheSourceIntact() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:133: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:134: void aDeleteWhoseSizePreconditionDisagreesIsRefused() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:143: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:144: void deletingAnAbsentObjectIsIdempotentRatherThanAFailure() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:152: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:153: void aDirectTransferWritesExactlyTheRequestedRegion() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:165: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:166: void aDirectTransferDeclinesForAnObjectThatIsNotThereRatherThanThrowing() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:188: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:189: void aSinkThatStopsPartWayReportsAPartialTransferRatherThanADecline() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:230: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/LocalStorageGatewayContractTest.java:231: void aStagingCleanupRemovesTheBytesTheUploadOwned() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:20: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:21: void generatedContentPathAlwaysStaysBelowContentRoot() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:30: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:31: void stagingPathIsShardedFromTheUploadIdentityOnly() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:43: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:44: void quarantinePathMirrorsTheContentLayoutInASeparateArea() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:67: void rejectsEveryKeyThatIsNotTheServerGeneratedShardedShape(String candidate) {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:75: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:76: void newContentKeyIsShardedUniqueAndResolvable() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:87: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:88: void aRelativeStorageRootIsRejectedOutright() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:93: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:94: void everyAreaRootStaysBelowTheConfiguredRoot() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:103: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/PhysicalPathResolverTest.java:104: void resolutionNeverDependsOnAClientFilename() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:32: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:33: void atomicPublisherMovesStagingToCreateOnlyTarget() throws IOException {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:48: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:49: void pointerPublisherKeepsImmutableObjectAndReturnsNewContentKey() throws IOException {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:64: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:65: void bothStrategiesRecordTheProvenSizeAndDigest() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:80: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:81: void aDigestMismatchNeverPublishesAnything() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:94: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:95: void aLengthMismatchNeverPublishesAnything() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:107: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:108: void requiredAtomicModeFailsClosedWhenTheProbeCouldNotProveIt() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:119: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:120: void preferredModeDegradesToPointerPublishWhenAtomicMoveIsUnproven() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:133: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:134: void statReadsTheProvenPhysicalSizeWithoutFollowingALink() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:146: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:147: void rangedReadStopsExactlyAtTheRequestedEnd() throws IOException {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:158: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:159: void deleteIsPreconditionCheckedAndIdempotent() {
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:179: @Test
adapter/outbound/fileserver/src/test/java/dev/caskeleton/adapter/outbound/fileserver/platform/local/ContentPublisherTest.java:180: void publishedContentIsNeverNamedAfterAClientFilename() {
exit=0