Newer
Older
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
Benaka Moorthi
a validé
use Piwik\Db;
/**
* Tests some API using range periods & makes sure the correct amount of blob/numeric
* archives are created.
*/
class Test_Piwik_Integration_OneVisitorOneWebsite_SeveralDaysDateRange_ArchivingTests extends IntegrationTestCase
public static $fixture = null; // initialized below test definition
Benaka Moorthi
a validé
public static function getOutputPrefix()
{
return 'oneVisitor_oneWebsite_severalDays_DateRange';
}
* @dataProvider getApiForTesting
mattab
a validé
* *
public function testApi($api, $params)
$this->runApiTests($api, $params);
}
public function getApiForTesting()
{
$idSite = self::$fixture->idSite;
$apiToCall = array('Actions.getPageUrls',
'VisitsSummary.get',
'UserSettings.getResolution',
'VisitFrequency.get',
'VisitTime.getVisitInformationPerServerTime');
// 2 segments: ALL and another way of expressing ALL but triggering the Segment code path
$segments = array(
false,
'pageUrl!=ThisIsNotKnownPageUrl',
);
// Running twice just as health check that second call also works
$result = array();
for ($i = 0; $i <= 1; $i++) {
foreach ($segments as $segment) {
diosmosis
a validé
$result[] = array($apiToCall, array('idSite' => $idSite, 'date' => '2010-12-15,2011-01-15',
'periods' => array('range'),
'segment' => $segment,
'otherRequestParameters' => array(
'flat' => '0',
'expanded' => '0'
),
));
// Testing Date range in January only
// Because of flat=1, this test will archive all sub-tables
$result[] = array('Actions.getPageUrls', array('idSite' => $idSite, 'date' => '2011-01-01,2011-02-01',
'periods' => array('range'),
'otherRequestParameters' => array(
'flat' => '1',
'expanded' => '0'
),
'testSuffix' => '_periodIsRange_flattened_')
);
// testing the same with expanded=1 should not create new archive records
$result[] = array('Actions.getPageUrls', array('idSite' => $idSite, 'date' => '2011-01-01,2011-02-01',
'periods' => array('range'),
'otherRequestParameters' => array(
'flat' => '0',
'expanded' => '1'
),
'testSuffix' => '_periodIsRange_expanded_')
return $result;
}
/**
* Check that requesting period "Range" means only processing
* the requested Plugin blob (Actions in this case), not all Plugins blobs
* @depends testApi
* @group Integration
mattab
a validé
* *
*/
public function test_checkArchiveRecords_whenPeriodIsRange()
// we expect 5 blobs for Actions plugins, because flat=1 or expanded=1 was not set
// so we only archived the parent table
$expectedActionsBlobs = 5;
// When flat=1, Actions plugin will process 5 + 3 extra blobs (URL = 'http://example.org/sub1/sub2/sub3/news')
$expectedActionsBlobsWhenFlattened = $expectedActionsBlobs + 3;
$tests = array(
// TODO Implement fix, then remove the +3 below
'archive_blob_2010_12' => ( ($expectedActionsBlobs+3) /*Actions*/
+ 8 /* UserSettings */
+ 2 /* VisitTime */) * 3,
/**
* In Each "Period=range" Archive, we expect following non zero numeric entries:
* 5 metrics + 1 flag // VisitsSummary
* + 2 metrics + 1 flag // Actions
* + 1 flag // UserSettings
* + 1 flag // VisitTime
* = 11
*
* because we call VisitFrequency.get, this creates an archive for the visitorType==returning segment.
* -> There are two archives for each segment (one for "countryCode!=aa"
* and VisitFrequency creates one for "countryCode!=aa;visitorType==returning")
*
* So each period=range will have = 11 records + (5 metrics + 1 flag // VisitsSummary)
* = 17
*
* Total expected records = count unique archives * records per archive
* = 3 * 17
* = 51
*/
'archive_numeric_2010_12' => 17 * 3,
/**
* In the January date range,
* we archive only Actions plugins.
* It is flattened so all 3 sub-tables should be archived.
*/
'archive_blob_2011_01' => $expectedActionsBlobsWhenFlattened,
/**
* 5 metrics + 1 flag // VisitsSummary
* + 2 metrics + 1 flag // Actions
*/
'archive_numeric_2011_01' => (6 + 3),
// nothing in Feb
'archive_blob_2011_02' => 0,
'archive_numeric_2011_02' => 0,
);
foreach ($tests as $table => $expectedRows) {
$sql = "SELECT count(*) FROM " . Common::prefixTable($table) . " WHERE period = " . Piwik::$idPeriods['range'];
Benaka Moorthi
a validé
$countBlobs = Db::get()->fetchOne($sql);
if($expectedRows != $countBlobs) {
$this->printDebugWhenTestFails($table);
$this->assertEquals($expectedRows, $countBlobs, "$table expected $expectedRows, got $countBlobs");
/**
* @param $table
*/
protected function printDebugWhenTestFails($table)
{
$data = Db::get()->fetchAll("SELECT * FROM " . Common::prefixTable($table) . " WHERE period = " . Piwik::$idPeriods['range'] . " ORDER BY idarchive ASC");
var_export($data);
$idArchives = array();
foreach ($data as $row) {
$idArchives[] = $row['idarchive'];
}
$idArchives = array_unique($idArchives);
foreach ($idArchives as $idArchive) {
$numericTable = str_replace("blob", "numeric", Common::prefixTable($table));
var_export(Db::get()->fetchAll("SELECT idarchive, name FROM " . $numericTable . " WHERE idarchive = ? AND name LIKE 'done%' LIMIT 1 ", $idArchive));
}
}
diosmosis
a validé
Test_Piwik_Integration_OneVisitorOneWebsite_SeveralDaysDateRange_ArchivingTests::$fixture
= new Test_Piwik_Fixture_VisitsOverSeveralDays();