From ba4924b331c6508db44d743c2d727056aa46f347 Mon Sep 17 00:00:00 2001 From: Josh Date: Sat, 13 Jun 2026 10:01:52 -0400 Subject: [PATCH 1/2] test(s3): make testFileSizes EOF assertion more robust Signed-off-by: Josh --- tests/lib/Files/ObjectStore/S3Test.php | 32 +++++++++++++++----------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/tests/lib/Files/ObjectStore/S3Test.php b/tests/lib/Files/ObjectStore/S3Test.php index c5e5e0685ffb0..45cd0a7df9f6a 100644 --- a/tests/lib/Files/ObjectStore/S3Test.php +++ b/tests/lib/Files/ObjectStore/S3Test.php @@ -150,21 +150,20 @@ public static function dataFileSizes(): array { #[\PHPUnit\Framework\Attributes\DataProvider('dataFileSizes')] public function testFileSizes($size): void { - if (str_starts_with(PHP_VERSION, '8.5') && getenv('CI')) { - $this->markTestSkipped('Test is unreliable and skipped on 8.5'); - } - $this->cleanupAfter('testfilesizes'); $s3 = $this->getInstance(); $sourceStream = fopen('php://memory', 'wb+'); $writeChunkSize = 1024; - $chunkCount = $size / $writeChunkSize; - for ($i = 0; $i < $chunkCount; $i++) { - fwrite($sourceStream, str_repeat('A', - ($i < $chunkCount - 1) ? $writeChunkSize : $size - ($i * $writeChunkSize) - )); + $chunk = str_repeat('A', $writeChunkSize); + $remainingSize = $size; + + while ($remainingSize > 0) { + $bytesToWrite = min($writeChunkSize, $remainingSize); + fwrite($sourceStream, ($bytesToWrite === $writeChunkSize) ? $chunk : str_repeat('A', $bytesToWrite)); + $remainingSize -= $bytesToWrite; } + rewind($sourceStream); $s3->writeObject('testfilesizes', $sourceStream); @@ -174,16 +173,21 @@ public function testFileSizes($size): void { $result = $s3->readObject('testfilesizes'); // compare first 100 bytes - self::assertEquals(str_repeat('A', 100), fread($result, 100), 'Compare first 100 bytes'); + self::assertSame(str_repeat('A', 100), fread($result, 100), 'Compare first 100 bytes'); // compare last 100 bytes - fseek($result, $size - 100); - self::assertEquals(str_repeat('A', 100), fread($result, 100), 'Compare last 100 bytes'); + self::assertSame(0, fseek($result, $size - 100), 'Seek to last 100 bytes succeeds'); + self::assertSame(str_repeat('A', 100), fread($result, 100), 'Compare last 100 bytes'); // end of file reached - fseek($result, $size); - self::assertTrue(feof($result), 'End of file reached'); + self::assertSame(0, fseek($result, $size), 'Seek to EOF succeeds'); + self::assertSame($size, ftell($result), 'Pointer is at the end of file'); + self::assertSame('', fread($result, 1), 'Reading at end of file returns no bytes'); + self::assertTrue(feof($result), 'End of file reached after read attempt'); $this->assertNoUpload('testfilesizes'); + + fclose($sourceStream); + fclose($result); } } From 384e21b82496a562d9b4650f35e519b969cd45f8 Mon Sep 17 00:00:00 2001 From: Josh Date: Sat, 13 Jun 2026 10:21:26 -0400 Subject: [PATCH 2/2] test(s3): drop unnecessarily added fclose Signed-off-by: Josh --- tests/lib/Files/ObjectStore/S3Test.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/lib/Files/ObjectStore/S3Test.php b/tests/lib/Files/ObjectStore/S3Test.php index 45cd0a7df9f6a..219958ecc9d8f 100644 --- a/tests/lib/Files/ObjectStore/S3Test.php +++ b/tests/lib/Files/ObjectStore/S3Test.php @@ -186,8 +186,5 @@ public function testFileSizes($size): void { self::assertTrue(feof($result), 'End of file reached after read attempt'); $this->assertNoUpload('testfilesizes'); - - fclose($sourceStream); - fclose($result); } }