mediawiki-extensions-Secure.../tests/phpunit/DomainsTest.php
Kunal Mehta 933ce7188e Add a test verifying the reproducibility of domains.php
This test downloads the specified revision of the HSTS preload list,
regenerates it, and compares it with the committed version at
domains.php.

In theory it would catch any potential code injection in domains.php,
which is hard to manually review due to its length.

Bug: T241522
Change-Id: Iee2a393c590b830c6e78adba48edc921e2873465
2019-12-28 17:33:07 -08:00

51 lines
1.7 KiB
PHP

<?php
/**
* Copyright (C) 2019 Kunal Mehta <legoktm@member.fsf.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
namespace MediaWiki\SecureLinkFixer\Test;
use MediaWiki\SecureLinkFixer\ListFetcher;
use MediaWikiTestCase;
/**
* Integration test and sanity check for domains.php
* @coversNothing
*/
class DomainsTest extends MediaWikiTestCase {
public function testReproducibility() {
$domains = file_get_contents( __DIR__ . '/../../domains.php' );
preg_match( '/mozilla-central@([0-9a-f]*?) \((.*?)\)/', $domains, $matches );
$this->assertCount( 3, $matches );
[ , $rev, $date ] = $matches;
$lf = new ListFetcher();
$expected = $lf->fetchList( $rev, $date );
$this->assertSame( $expected, $domains );
}
public function testDomains() {
$domains = require __DIR__ . '/../../domains.php';
$this->assertIsArray( $domains );
// Some arbitrary number as a sanity check
$this->assertGreaterThan( 50000, count( $domains ) );
foreach ( $domains as $domain => $subdomain ) {
$this->assertRegExp( '/^[A-z0-9\-\.]*$/', $domain );
$this->assertTrue( $subdomain === 0 || $subdomain === 1 );
}
}
}