1
0
قرینه از https://github.com/matomo-org/matomo.git synced 2025-08-24 16:07:37 +00:00
Files
matomo/tests/PHPUnit/Integration/Tracker/FailuresTest.php
Stefan Giehl d6d72d1fa7 [Coding Style] Enable rule PSR1.Methods.CamelCapsMethodName.NotCamelCaps (#22144)
* [Coding Style] Enable rule PSR1.Methods.CamelCapsMethodName.NotCamelCaps

* [Coding Style] Use camel case for method names in API plugin tests (#22145)

* [Coding Style] Use camel case for method names in Core* plugin tests (#22147)

* [Coding Style] Use camel case for method names in core Unit tests (#22149)

* [Coding Style] Use camel case for method names in Actions and BulkTracking plugin tests (#22146)

* [Coding Style] Use camel case for method names in CustomDimensions and CustomJSTracker plugin tests (#22148)

* [Coding Style] Use camel case for method names in core Integration tests (#22151)

* [Coding Style] Use camel case for method names in more core plugin tests (#22153)

* [Coding Style] Use camel case for method names in more core plugin tests (#22157)

* [Coding Style] Use camel case for method names in more core plugin tests

* Update plugins/Monolog/tests/Unit/Processor/ExceptionToTextProcessorTest.php

Co-authored-by: Michal Kleiner <michal@innocraft.com>

---------

Co-authored-by: Michal Kleiner <michal@innocraft.com>

* [Coding Style] Use camel case for method names in more core plugin tests (#22159)

* [Coding Style] Use camel case for method names in remaining tests (#22160)

* [Coding Style] Use camel case for method names in remaining tests

* rename expected test files

---------

Co-authored-by: Michal Kleiner <michal@innocraft.com>
2024-04-25 20:57:55 +02:00

331 خطوط
13 KiB
PHP

<?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\Tests\Integration\Tracker;
use Piwik\Date;
use Piwik\Exception\UnexpectedWebsiteFoundException;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
use Piwik\Tracker\Failures;
use Piwik\Tracker\Request;
/**
* @group Failures
* @group FailuresTest
*/
class FailuresTest extends IntegrationTestCase
{
/**
* @var Failures
*/
private $failures;
private $idSite;
/**
* @var Date
*/
private $now;
public function setUp(): void
{
parent::setUp();
$this->idSite = Fixture::createWebsite('2018-01-02 03:04:05');
Fixture::createWebsite('2018-01-02 03:04:05');
$this->now = Date::factory('2018-09-07 01:02:03');
$this->failures = new Failures();
$this->failures->setNow($this->now);
}
public function testLogFailureGetAllFailures()
{
$this->logFailure(1, array());
$this->logFailure(1, array('idsite' => 9999999)); // unknown idsite
$this->logFailure(9999, array()); // unknown failure
$this->logFailure(2, array('url' => ''));
$this->logFailure(1, array('url' => 'https://www.example.com/page'));
$failures = $this->failures->getAllFailures();
$this->assertEquals(array (
array (
'idsite' => '1',
'idfailure' => '1',
'date_first_occurred' => '2018-09-07 01:02:03',
'request_url' => 'rec=1&idsite=1',
'site_name' => 'Piwik test',
'pretty_date_first_occurred' => 'Intl_1or02Intl_Time_AMt_250Intl_Time_AMtTi02_S1ort',
'url' => '',
'solution_url' => 'https://matomo.org/faq/how-to/faq_30838/',
'problem' => 'CoreAdminHome_TrackingFailureInvalidSiteProblem',
'solution' => 'CoreAdminHome_TrackingFailureInvalidSiteSolution',
),
array (
'idsite' => '1',
'idfailure' => '2',
'date_first_occurred' => '2018-09-07 01:02:03',
'request_url' => 'url=&rec=1&idsite=1',
'site_name' => 'Piwik test',
'pretty_date_first_occurred' => 'Intl_1or02Intl_Time_AMt_250Intl_Time_AMtTi02_S1ort',
'url' => '',
'solution_url' => 'https://matomo.org/faq/how-to/faq_30835/',
'problem' => 'CoreAdminHome_TrackingFailureAuthenticationProblem',
'solution' => 'CoreAdminHome_TrackingFailureAuthenticationSolution',
),
array (
'idsite' => '1',
'idfailure' => '9999',
'date_first_occurred' => '2018-09-07 01:02:03',
'request_url' => 'rec=1&idsite=1',
'site_name' => 'Piwik test',
'pretty_date_first_occurred' => 'Intl_1or02Intl_Time_AMt_250Intl_Time_AMtTi02_S1ort',
'url' => '',
'problem' => '',
'solution' => '',
'solution_url' => '',
),
array (
'idsite' => '9999999',
'idfailure' => '1',
'date_first_occurred' => '2018-09-07 01:02:03',
'request_url' => 'idsite=9999999&rec=1',
'site_name' => 'General_Unknown',
'pretty_date_first_occurred' => 'Intl_1or02Intl_Time_AMt_250Intl_Time_AMtTi02_S1ort',
'url' => '',
'solution_url' => 'https://matomo.org/faq/how-to/faq_30838/',
'problem' => 'CoreAdminHome_TrackingFailureInvalidSiteProblem',
'solution' => 'CoreAdminHome_TrackingFailureInvalidSiteSolution',
),
), $failures);
}
public function testLogFailureDoesNotLogSameFailureTwice()
{
$expected = array (
array (
'idsite' => '1',
'idfailure' => '1',
'date_first_occurred' => '2018-09-07 01:02:03',
'request_url' => 'rec=1&idsite=1',
'site_name' => 'Piwik test',
'pretty_date_first_occurred' => 'Intl_1or02Intl_Time_AMt_250Intl_Time_AMtTi02_S1ort',
'url' => '',
'solution_url' => 'https://matomo.org/faq/how-to/faq_30838/',
'problem' => 'CoreAdminHome_TrackingFailureInvalidSiteProblem',
'solution' => 'CoreAdminHome_TrackingFailureInvalidSiteSolution',
)
);
$this->logFailure(1, array());
$failures = $this->failures->getAllFailures();
$this->assertEquals($expected, $failures);
$this->logFailure(1, array());
$failures = $this->failures->getAllFailures();
$this->assertEquals($expected, $failures);
// does log a different problem for same site
$this->logFailure(2, array());
$failures = $this->failures->getAllFailures();
$this->assertCount(2, $failures);
// does log a same problem for different site
$this->logFailure(1, array('idsite' => 999));
$failures = $this->failures->getAllFailures();
$this->assertCount(3, $failures);
}
public function testLogFailureAnonymizesTokenWhenParamUsed()
{
$this->logFailure(1, array('token_auth' => 'foobar', 'token' => 'bar', 'tokenauth' => 'baz'));
$failures = $this->failures->getAllFailures();
$this->assertEquals('token_auth=__TOKEN_AUTH__&token=__TOKEN_AUTH__&tokenauth=__TOKEN_AUTH__&rec=1&idsite=1', $failures[0]['request_url']);
}
public function testLogFailureAnonymizesTokenWhenMd5ValueUsed()
{
$this->logFailure(1, array('foo' => md5('foo')));
$failures = $this->failures->getAllFailures();
$this->assertEquals('foo=__TOKEN_AUTH__&rec=1&idsite=1', $failures[0]['request_url']);
}
public function testLogFailureAnonymizesTokenWhenMd5SimilarValueUsed()
{
$this->logFailure(1, array('foo' => md5('foo') . 'ff'));
$failures = $this->failures->getAllFailures();
$this->assertEquals('foo=__TOKEN_AUTH__&rec=1&idsite=1', $failures[0]['request_url']);
}
public function testLogFailureDoesNotLogExcludedRequest()
{
$this->logFailure(1, array('rec' => '0'));
$this->assertEquals(array(), $this->failures->getAllFailures());
}
public function testLogFailureDoesNotLogAnyUnusualHighSiteId()
{
$this->logFailure(1, array('idsite' => '99999999999'));
$this->assertEquals(array(), $this->failures->getAllFailures());
}
public function testLogFailureDoesNotLogAnyUnusualLowSiteId()
{
try {
$this->logFailure(1, array('idsite' => '-1'));
} catch (UnexpectedWebsiteFoundException $e) {
// triggered by $request->getIdSite() in visits excluded... we ignore this error in this test
// as it is fine to have this error as long as the failure is not recorded
}
$this->assertEquals(array(), $this->failures->getAllFailures());
}
public function testLogFailureCanLogEntryForIdSite0()
{
$this->logFailure(1, array('idsite' => '0'));
$this->assertCount(1, $this->failures->getAllFailures());
}
public function testGetAllFailuresNoFailuresByDefault()
{
$this->assertSame(array(), $this->failures->getAllFailures());
}
public function testGetFailuresForSitesNoFailuresByDefault()
{
$this->assertSame(array(), $this->failures->getAllFailures());
}
public function testGetFailuresForSitesReturnsOnlyFailuresForGivenSite()
{
$this->logFailure(1, array('idsite' => 2));
$this->logFailure(2, array('idsite' => 2));
$this->logFailure(1, array('idsite' => 3));
$this->logFailure(2, array('idsite' => 3));
$this->logFailure(3, array('idsite' => 3));
$this->logFailure(1, array('idsite' => 4));
$this->logFailure(2, array('idsite' => 4));
$this->logFailure(3, array('idsite' => 4));
$this->logFailure(4, array('idsite' => 4));
$this->logFailure(1, array('idsite' => 5));
$this->logFailure(2, array('idsite' => 5));
$this->logFailure(3, array('idsite' => 5));
$this->logFailure(4, array('idsite' => 5));
$this->logFailure(5, array('idsite' => 5));
$this->assertSame(array(), $this->failures->getFailuresForSites(array()));
$this->assertCount(2, $this->failures->getFailuresForSites(array(2)));
$this->assertCount(3, $this->failures->getFailuresForSites(array(3)));
$this->assertCount(7, $this->failures->getFailuresForSites(array(2,5)));
$this->assertCount(12, $this->failures->getFailuresForSites(array(4,3,5)));
}
public function testDeleteTrackingFailure()
{
$this->logFailure(1, array('idsite' => 2));
$this->logFailure(2, array('idsite' => 2));
$this->logFailure(1, array('idsite' => 3));
$this->logFailure(2, array('idsite' => 3));
$this->logFailure(3, array('idsite' => 3));
$this->assertCount(5, $this->failures->getAllFailures());
$this->failures->deleteTrackingFailure(3, 2);
$summary = $this->getFailureSummary();
$this->assertEquals(array(
array(2,1), array(2,2), array(3,1), array(3,3), // 3,2 is not returned
), $summary);
}
public function testDeleteTrackingFailureWhenWrongIdAllAreKept()
{
$this->logFailure(1, array('idsite' => 2));
$this->logFailure(2, array('idsite' => 2));
$this->logFailure(1, array('idsite' => 3));
$this->logFailure(2, array('idsite' => 3));
$this->logFailure(3, array('idsite' => 3));
$this->assertCount(5, $this->failures->getAllFailures());
$this->failures->deleteTrackingFailure(99999, 2);
$this->assertCount(5, $this->failures->getAllFailures());
$this->failures->deleteTrackingFailure(2, 9999);
$this->assertCount(5, $this->failures->getAllFailures());
}
public function testDeleteAllTrackingFailures()
{
$this->logFailure(1, array('idsite' => 2));
$this->logFailure(2, array('idsite' => 2));
$this->logFailure(1, array('idsite' => 3));
$this->logFailure(2, array('idsite' => 3));
$this->logFailure(3, array('idsite' => 3));
$this->assertCount(5, $this->failures->getAllFailures());
$this->failures->deleteAllTrackingFailures();
$this->assertSame([], $this->failures->getAllFailures());
}
public function testDeleteTrackingFailures()
{
$this->logFailure(1, array('idsite' => 1));
$this->logFailure(1, array('idsite' => 2));
$this->logFailure(2, array('idsite' => 2));
$this->logFailure(1, array('idsite' => 3));
$this->logFailure(2, array('idsite' => 3));
$this->logFailure(3, array('idsite' => 3));
$this->assertCount(6, $this->failures->getAllFailures());
$this->failures->deleteTrackingFailures(array(1,3));
$this->assertEquals([array(2,1), array(2,2)], $this->getFailureSummary());
}
public function testRemoveFailuresOlderThanDays()
{
$this->logFailure(1, array('idsite' => 2));
$this->logFailure(2, array('idsite' => 2));
$this->logFailure(3, array('idsite' => 2), 1);
$this->logFailure(1, array('idsite' => 3), 2);
$this->logFailure(2, array('idsite' => 3), 2);
$this->logFailure(3, array('idsite' => 3), 3);
$this->logFailure(4, array('idsite' => 3), 3);
$this->logFailure(5, array('idsite' => 3), 3);
$this->logFailure(6, array('idsite' => 3), 4);
$this->failures->removeFailuresOlderThanDays(2);
$summary = $this->getFailureSummary();
$this->assertEquals(array(
array(2,1), array(2,2), array(2,3), array(3,1), array(3,2)
), $summary);
}
private function getFailureSummary()
{
$failures = $this->failures->getAllFailures();
$summary = array();
foreach ($failures as $failure) {
$summary[] = array($failure['idsite'], $failure['idfailure']);
}
return $summary;
}
private function logFailure($idFailure, $params, $daysAgo = null)
{
if (!isset($params['rec'])) {
$params['rec'] = 1;
}
if (!isset($params['idsite'])) {
$params['idsite'] = $this->idSite;
}
$request = new Request($params);
if (isset($daysAgo)) {
$this->failures->setNow($this->now->subDay($daysAgo)->addPeriod(1, 'minute'));
}
$this->failures->logFailure($idFailure, $request);
$this->failures->setNow($this->now);
}
}