'blue', 'x-amz-meta-priority' => 'high', 'content-type' => 'text/plain', ]); self::assertSame(['color' => 'blue', 'priority' => 'high'], UserMetadata::extract($request)); } public function testExtractReturnsEmptyArrayWithoutMetadataHeaders(): void { $request = php_s3_test_request('PUT', '/b/k.txt', ['content-type' => 'text/plain']); self::assertSame([], UserMetadata::extract($request)); } public function testExtractRejectsMetadataLargerThan2KiB(): void { $request = php_s3_test_request('PUT', '/b/k.txt', [ 'x-amz-meta-blob' => str_repeat('m', 2100), ]); try { UserMetadata::extract($request); self::fail('Expected InvalidArgument for oversized user metadata'); } catch (S3Exception $e) { self::assertSame('InvalidArgument', $e->errorCode); } } }