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
56 lines
1.6 KiB
PHP
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 );
|
|
}
|
|
}
|