1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\GeoIp2\tests\Unit;
use Piwik\Container\StaticContainer;
use Piwik\Plugins\GeoIp2\GeoIP2AutoUpdater;
use Piwik\Plugins\GeoIp2\LocationProvider\GeoIp2;
use Piwik\Plugins\UserCountry\LocationProvider;
use Exception;
class GeoIp2Test extends \PHPUnit\Framework\TestCase
{
/**
* Test that redundant checks work.
*
* @group Plugins
*/
public function testGeoIpUpdaterRedundantChecks()
{
LocationProvider::$providers = null;
// create empty ISP file
$this->createEmptyISPFile();
// run redundant checks
$updater = new PiwikGeoIp2GeoIP2AutoUpdaterPublicTest();
$updater->performRedundantDbChecks();
// check that files are renamed correctly
$this->checkBrokenGeoIPState();
// create empty file again & run checks again
$this->createEmptyISPFile();
$updater->performRedundantDbChecks();
// check that w/ broken files already there, redundant checks still work correctly
$this->checkBrokenGeoIPState();
}
/**
* @group Plugins
*
* @dataProvider getInvalidGeoIpUrlsToTest
*/
public function testGeoIpDownloadInvalidUrl($url)
{
// unset translations, otherwise Exception message will be translated
StaticContainer::get('Piwik\Translation\Translator')->reset();
$updater = new PiwikGeoIp2GeoIP2AutoUpdaterPublicTest();
try {
$updater->downloadFile('loc', $url);
$this->fail("Downloading invalid url succeeded!");
} catch (Exception $ex) {
$this->assertEquals("GeoIp2_UnsupportedArchiveType", $ex->getMessage());
}
}
public function getInvalidGeoIpUrlsToTest()
{
return array(array("http://localhost/tests/resources/geoip.tar"),
array("http://localhost/tests/resources/geoip.tar.bz2"),
array("http://localhost/tests/resources/geoip.dat"));
}
protected $backUpNames;
public function setUp(): void
{
$this->backUpNames = GeoIp2::$dbNames;
GeoIp2::$dbNames = [
'loc' => ['DBIP-City.mmdb'],
'isp' => ['DBIP-ISP.mmdb'],
];
}
public function tearDown(): void
{
GeoIp2::$dbNames = $this->backUpNames;
$geoIpDirPath = PIWIK_INCLUDE_PATH . '/tests/lib/geoip-files';
$filesToRemove = array('DBIP-ISP.mmdb.broken', 'DBIP-ISP.mmdb');
foreach ($filesToRemove as $name) {
$path = $geoIpDirPath . '/' . $name;
if (file_exists($path)) {
@unlink($path);
}
}
}
private function createEmptyISPFile()
{
$geoIpDir = PIWIK_INCLUDE_PATH . '/tests/lib/geoip-files';
$fd = fopen($geoIpDir . '/DBIP-ISP.mmdb', 'w');
fclose($fd);
}
private function checkBrokenGeoIPState()
{
$geoIpDir = PIWIK_INCLUDE_PATH . '/tests/lib/geoip-files';
$this->assertFalse(file_exists($geoIpDir . '/DBIP-City.mmdb.broken'));
$this->assertFalse(file_exists($geoIpDir . '/DBIP-ISP.mmdb'));
$this->assertTrue(file_exists($geoIpDir . '/DBIP-ISP.mmdb.broken'));
}
}
class PiwikGeoIp2GeoIP2AutoUpdaterPublicTest extends GeoIP2AutoUpdater
{
public function __construct()
{
// empty
}
// during tests do not call the Log::error or they will be displayed in the output
public function performRedundantDbChecks($logErrors = false)
{
parent::performRedundantDbChecks($logErrors);
}
public function downloadFile($type, $url)
{
parent::downloadFile($type, $url);
}
}
|