wiki.techinc.nl/tests/phpunit/includes/utils/FileContentsHasherTest.php
Timo Tijhof 66102bd54c resourceloader: Remove support for $algo param in FileContentsHasher
This isn't used anywhere. Theoretical code using would gracefully
fallback to 'md4' given extra params are ignored by PHP.

In terms of future roadmap, I do expect that this algo may have to
change one day based on information that might come to light around
whether MD4 will remain sufficiently fast and/or sufficiently unique.

However, I do not expect that to be so significant in difference that
we'd have to remain some callers on MD4 whilst others adopt something
else. It seems fine that, if that time comes, to simply switch it
and thus consider the algo an implementation detail.

Bug: T32956
Change-Id: Ia9e1366b802ac18f439ce0c802189ede0a2c63f0
2021-12-03 12:12:29 +00:00

56 lines
1.6 KiB
PHP

<?php
/**
* @covers FileContentsHasherTest
*/
class FileContentsHasherTest extends PHPUnit\Framework\TestCase {
use MediaWikiCoversValidator;
public function provideSingleFile() {
return array_map( static function ( $file ) {
return [ $file, file_get_contents( $file ) ];
}, glob( __DIR__ . '/../../data/filecontentshasher/*.*' ) );
}
/**
* @covers FileContentsHasher::getFileContentsHash
* @covers FileContentsHasher::getFileContentsHashInternal
* @dataProvider provideSingleFile
*/
public function testSingleFileHash( $fileName, $contents ) {
$expected = hash( 'md4', $contents );
$actualHash = FileContentsHasher::getFileContentsHash( $fileName );
$this->assertEquals( $expected, $actualHash );
$actualHashRepeat = FileContentsHasher::getFileContentsHash( $fileName );
$this->assertEquals( $expected, $actualHashRepeat );
}
public function provideMultipleFiles() {
return [
[ $this->provideSingleFile() ]
];
}
/**
* @covers FileContentsHasher::getFileContentsHash
* @covers FileContentsHasher::getFileContentsHashInternal
* @dataProvider provideMultipleFiles
*/
public function testMultipleFileHash( $files ) {
$fileNames = [];
$hashes = [];
foreach ( $files as [ $fileName, $contents ] ) {
$fileNames[] = $fileName;
$hashes[] = hash( 'md4', $contents );
}
$expectedHash = hash( 'md4', implode( '', $hashes ) );
$actualHash = FileContentsHasher::getFileContentsHash( $fileNames );
$this->assertEquals( $expectedHash, $actualHash );
$actualHashRepeat = FileContentsHasher::getFileContentsHash( $fileNames );
$this->assertEquals( $expectedHash, $actualHashRepeat );
}
}