mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
N°852 - Cleanup: remove deprecated impact analysis algorithm and clean up old broken test
This commit is contained in:
@@ -485,7 +485,7 @@ class TestMyBizModel extends TestBizModel
|
||||
echo "Max depth = $iMaxDepth</br>\n";
|
||||
|
||||
$oObj = MetaModel::GetObject("cmdbContact", 18);
|
||||
$aRels = $oObj->GetRelatedObjects("Potes", $iMaxDepth);
|
||||
$aRels = $oObj->GetRelatedObjectsDown("Potes", $iMaxDepth);
|
||||
echo $oObj->Get('name')." has some 'Potes'...</br>\n";
|
||||
foreach ($aRels as $sClass => $aObjs)
|
||||
{
|
||||
@@ -581,391 +581,6 @@ class TestMyBizModel extends TestBizModel
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Test a complex biz model on the fly
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
abstract class MyFarm extends TestBizModel
|
||||
{
|
||||
static public function GetConfigFile() {return '/config-test-farm.php';}
|
||||
|
||||
protected function DoPrepare()
|
||||
{
|
||||
parent::DoPrepare();
|
||||
$this->ResetDB();
|
||||
MetaModel::DBCheckIntegrity();
|
||||
}
|
||||
|
||||
protected function InsertMammal($sSpecies, $sSex, $iSpeed, $iMotherid, $iFatherId, $sName, $iHeight, $sBirth)
|
||||
{
|
||||
$oNew = MetaModel::NewObject('Mammal');
|
||||
$oNew->Set('species', $sSpecies);
|
||||
$oNew->Set('sex', $sSex);
|
||||
$oNew->Set('speed', $iSpeed);
|
||||
$oNew->Set('mother', $iMotherid);
|
||||
$oNew->Set('father', $iFatherId);
|
||||
$oNew->Set('name', $sName);
|
||||
$oNew->Set('height', $iHeight);
|
||||
$oNew->Set('birth', $sBirth);
|
||||
return $this->ObjectToDB($oNew);
|
||||
}
|
||||
|
||||
protected function InsertBird($sSpecies, $sSex, $iSpeed, $iMotherid, $iFatherId)
|
||||
{
|
||||
$oNew = MetaModel::NewObject('Bird');
|
||||
$oNew->Set('species', $sSpecies);
|
||||
$oNew->Set('sex', $sSex);
|
||||
$oNew->Set('speed', $iSpeed);
|
||||
$oNew->Set('mother', $iMotherid);
|
||||
$oNew->Set('father', $iFatherId);
|
||||
return $this->ObjectToDB($oNew);
|
||||
}
|
||||
|
||||
protected function InsertFlyingBird($sSpecies, $sSex, $iSpeed, $iMotherid, $iFatherId, $iFlyingSpeed)
|
||||
{
|
||||
$oNew = MetaModel::NewObject('FlyingBird');
|
||||
$oNew->Set('species', $sSpecies);
|
||||
$oNew->Set('sex', $sSex);
|
||||
$oNew->Set('speed', $iSpeed);
|
||||
$oNew->Set('mother', $iMotherid);
|
||||
$oNew->Set('father', $iFatherId);
|
||||
$oNew->Set('flyingspeed', $iFlyingSpeed);
|
||||
return $this->ObjectToDB($oNew);
|
||||
}
|
||||
|
||||
private function InsertGroup($sName, $iLeaderId)
|
||||
{
|
||||
$oNew = MetaModel::NewObject('Group');
|
||||
$oNew->Set('name', $sName);
|
||||
$oNew->Set('leader', $iLeaderId);
|
||||
$iId = $oNew->DBInsertNoReload();
|
||||
return $iId;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class TestQueriesOnFarm extends MyFarm
|
||||
{
|
||||
static public function GetName()
|
||||
{
|
||||
return 'Farm test';
|
||||
}
|
||||
|
||||
static public function GetDescription()
|
||||
{
|
||||
return 'A series of tests on the farm business model (SQL generation)';
|
||||
}
|
||||
|
||||
protected function CheckQuery($sQuery, $bIsCorrectQuery)
|
||||
{
|
||||
if ($bIsCorrectQuery)
|
||||
{
|
||||
echo "<h4 style=\"color:green;\">$sQuery</h4>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "<h4 style=\"color:red;\">$sQuery</h3>\n";
|
||||
}
|
||||
try
|
||||
{
|
||||
//$oOql = new OqlInterpreter($sQuery);
|
||||
//$oTrash = $oOql->ParseQuery();
|
||||
//self::DumpVariable($oTrash, true);
|
||||
$oMyFilter = DBObjectSearch::FromOQL($sQuery);
|
||||
}
|
||||
catch (OQLException $oOqlException)
|
||||
{
|
||||
if ($bIsCorrectQuery)
|
||||
{
|
||||
echo "<p>More info on this unexpected failure:<br/>".$oOqlException->getHtmlDesc()."</p>\n";
|
||||
throw $oOqlException;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Everything is fine :-)
|
||||
echo "<p>More info on this expected failure:\n";
|
||||
echo "<ul>\n";
|
||||
echo "<li>".get_class($oOqlException)."</li>\n";
|
||||
echo "<li>".$oOqlException->getMessage()."</li>\n";
|
||||
echo "<li>".$oOqlException->getHtmlDesc()."</li>\n";
|
||||
echo "</ul>\n";
|
||||
echo "</p>\n";
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// The query was correctly parsed, was it expected to be correct ?
|
||||
if (!$bIsCorrectQuery)
|
||||
{
|
||||
throw new UnitTestException("The query '$sQuery' was parsed with success, while it shouldn't (?)");
|
||||
return false;
|
||||
}
|
||||
echo "<p>To OQL: ".$oMyFilter->ToOQL()."</p>";
|
||||
|
||||
$this->search_and_show_list($oMyFilter);
|
||||
|
||||
//echo "<p>first pass<p>\n";
|
||||
//self::DumpVariable($oMyFilter, true);
|
||||
$sQuery1 = $oMyFilter->MakeSelectQuery();
|
||||
//echo "<p>second pass<p>\n";
|
||||
//self::DumpVariable($oMyFilter, true);
|
||||
//$sQuery1 = $oMyFilter->MakeSelectQuery();
|
||||
|
||||
$sSerialize = $oMyFilter->serialize();
|
||||
echo "<p>Serialized:$sSerialize</p>\n";
|
||||
$oFilter2 = DBObjectSearch::unserialize($sSerialize);
|
||||
try
|
||||
{
|
||||
$sQuery2 = $oFilter2->MakeSelectQuery();
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
echo "<p>Could not compute the query after unserialize</p>\n";
|
||||
echo "<p>Query 1: $sQuery1</p>\n";
|
||||
MyHelpers::var_cmp_html($oMyFilter, $oFilter2);
|
||||
throw $e;
|
||||
}
|
||||
//if ($oFilter2 != $oMyFilter) no, they may differ while the resulting query is the same!
|
||||
if ($sQuery1 != $sQuery2)
|
||||
{
|
||||
echo "<p>serialize/unserialize mismatch :-(</p>\n";
|
||||
MyHelpers::var_cmp_html($sQuery1, $sQuery2);
|
||||
MyHelpers::var_cmp_html($oMyFilter, $oFilter2);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function DoExecute()
|
||||
{
|
||||
// $this->ReportError("Found two different OQL expression out of the (same?) filter: <em>$sExpr1</em> != <em>$sExpr2</em>");
|
||||
// $this->ReportSuccess('Found '.$oSet->Count()." objects of class $sClassName");
|
||||
echo "<h3>Create protagonists...</h3>";
|
||||
|
||||
$iId1 = $this->InsertMammal('human', 'male', 10, 0, 0, 'romanoff', 192, '1971-07-19');
|
||||
$iId2 = $this->InsertMammal('human', 'female', 9, 0, 0, 'rouanita', 165, '1983-01-23');
|
||||
$this->InsertMammal('human', 'female', 3, $iId2, $iId1, 'pomme', 169, '2008-02-23');
|
||||
$this->InsertMammal('pig', 'female', 3, 0, 0, 'grouinkette', 85, '2006-06-01');
|
||||
$this->InsertMammal('donkey', 'female', 3, 0, 0, 'muleta', 124, '2003-11-11');
|
||||
|
||||
$this->InsertBird('rooster', 'male', 12, 0, 0);
|
||||
$this->InsertFlyingBird('pie', 'female', 11, 0, 0, 35);
|
||||
|
||||
// Benchmarking
|
||||
//
|
||||
if (false)
|
||||
{
|
||||
define ('COUNT_BENCHMARK', 10);
|
||||
echo "<h3>Parsing a long query, ".COUNT_BENCHMARK." times</h3>";
|
||||
$sQuery = "SELECT Animal AS Child JOIN Mammal AS Dad ON Child.father = Dad.id JOIN Animal AS Mum ON Child.mother = Mum.id WHERE Dad.birth < DATE_SUB(CURRENT_DATE(), INTERVAL 10 YEAR) AND Dad.height * 2 <= ROUND(TO_DAYS(Dad.birth) / (3 + 1) * 5 - 3)";
|
||||
|
||||
$fStart = MyHelpers::getmicrotime();
|
||||
for($i=0 ; $i < COUNT_BENCHMARK ; $i++)
|
||||
{
|
||||
$oMyFilter = DBObjectSearch::FromOQL($sQuery);
|
||||
}
|
||||
$fDuration = MyHelpers::getmicrotime() - $fStart;
|
||||
$fParsingDuration = $fDuration / COUNT_BENCHMARK;
|
||||
echo "<p>Mean time by op: $fParsingDuration</p>";
|
||||
}
|
||||
|
||||
echo "<h3>Test queries...</h3>";
|
||||
|
||||
$aQueries = array(
|
||||
'SELECT Animal' => true,
|
||||
'SELECT Animal WHERE Animal.pkey = 1' => false,
|
||||
'SELECT Animal WHERE Animal.id = 1' => true,
|
||||
'SELECT Aniiimal' => false,
|
||||
'SELECTe Animal' => false,
|
||||
'SELECT * FROM Animal' => false,
|
||||
'SELECT Animal AS zoo WHERE zoo.species = \'human\'' => true,
|
||||
'SELECT Animal AS zoo WHERE species = \'human\'' => true,
|
||||
'SELECT Animal AS zoo WHERE espece = \'human\'' => false,
|
||||
'SELECT Animal AS zoo WHERE zoo.species IN (\'human\', "pig")' => true,
|
||||
'SELECT Animal AS zoo WHERE CONCATENATION(zoo.species, zoo.sex) LIKE "hum%male"' => false,
|
||||
'SELECT Animal AS zoo WHERE CONCAT(zoo.species, zoo.sex) LIKE "hum%male"' => true,
|
||||
'SELECT Animal AS zoo WHERE zoo.species NOT IN (\'human\', "pig")' => true,
|
||||
'SELECT Animal AS zoo WHERE zoo.kind = \'human\'' => false,
|
||||
'SELECT Animal WHERE Animal.species = \'human\' AND Animal.sex = \'female\'' => true,
|
||||
'SELECT Mammal AS x WHERE (x.species = \'human\' AND x.name LIKE \'ro%\') OR (x.species = \'donkey\' AND x.name LIKE \'po%\')' => true,
|
||||
'SELECT Mammal AS x WHERE x.species = \'human\' AND x.name LIKE \'ro%\' OR x.species = \'donkey\' AND x.name LIKE \'po%\'' => true,
|
||||
'SELECT Mammal AS m WHERE MONTH(m.birth) = 7' => true,
|
||||
'SELECT Mammal AS m WHERE DAY(m.birth) = 19' => true,
|
||||
'SELECT Mammal AS m WHERE YEAR(m.birth) = 1971' => true,
|
||||
'SELECT Mammal AS m WHERE m.birth < DATE_SUB(CURRENT_DATE(), INTERVAL 10 YEAR)' => true,
|
||||
'SELECT Mammal AS m WHERE m.birth > DATE_SUB(NOW(), INTERVAL 2000 DAY)' => true,
|
||||
'SELECT Mammal AS m WHERE (TO_DAYS(NOW()) - TO_DAYS(m.birth)) > 2000' => true,
|
||||
'SELECT Mammal AS m WHERE m.name = IF(FLOOR(ROUND(m.height)) > 2, "pomme", "romain")' => true,
|
||||
'SELECT Mammal AS m WHERE (1 + 2' => false,
|
||||
'SELECT Mammal AS m WHERE (1 + 2 * 4 / 23) > 0' => true,
|
||||
'SELECT Mammal AS m WHERE (4 / 23 * 2 + 1) > 0' => true,
|
||||
'SELECT Mammal AS m WHERE 1/0' => true,
|
||||
'SELECT Mammal AS m WHERE MONTH(m.birth) = 7' => true,
|
||||
'SELECT Animal JOIN Group ON Group.leader = Animal.id' => true,
|
||||
'SELECT Group JOIN Animal ON Group.leader = Animal.id' => true,
|
||||
'SELECT Animal AS A JOIN Group AS G1 ON G1.leader = A.id' => true,
|
||||
'SELECT Animal AS A JOIN Group AS G ON FooClass.leader = A.id' => false,
|
||||
'SELECT Animal AS A JOIN Group AS G ON G.leader = FooClass.id' => false,
|
||||
'SELECT Animal AS A JOIN Group AS G ON G.masterchief = A.id' => false,
|
||||
'SELECT Animal AS A JOIN Group AS G ON A.id = G.leader' => false,
|
||||
'SELECT Animal AS A JOIN Group AS G ON G.leader = A.id WHERE A.sex=\'male\' OR G.qwerty = 123' => false,
|
||||
'SELECT Animal AS A JOIN Group AS G ON G.leader = A.id WHERE A.sex=\'male\' OR G.name LIKE "a%"' => true,
|
||||
'SELECT Animal AS A JOIN Group AS G ON G.leader = A.id WHERE A.id = 1' => true,
|
||||
'SELECT Animal AS A JOIN Group AS G ON G.leader = A.id WHERE id = 1' => false,
|
||||
'SELECT Animal AS A JOIN Group AS G ON A.member = G.id' => false,
|
||||
'SELECT Mammal AS M JOIN Group AS G ON M.member = G.id' => true,
|
||||
'SELECT Mammal AS M JOIN Group AS G ON A.member = G.id' => false,
|
||||
'SELECT Mammal AS myAlias JOIN Group AS myAlias ON myAlias.member = myAlias.id' => false,
|
||||
'SELECT Mammal AS Mammal JOIN Group AS Mammal ON Mammal.member = Mammal.id' => false,
|
||||
'SELECT Group AS G WHERE G.leader_name LIKE "%"' => true,
|
||||
'SELECT Group AS G WHERE G.leader_speed < 100000' => true,
|
||||
'SELECT Mammal AS M JOIN Group AS G ON M.member = G.id WHERE G.leader_name LIKE "%"' => true,
|
||||
'SELECT Mammal AS M JOIN Group AS G ON M.member = G.id WHERE G.leader_speed < 100000' => true,
|
||||
'SELECT Mammal AS Child JOIN Mammal AS Dad ON Child.father = Dad.id' => true,
|
||||
'SELECT Mammal AS Child JOIN Animal AS Dad ON Child.father = Dad.id' => true,
|
||||
'SELECT Animal AS Child JOIN Mammal AS Dad ON Child.father = Dad.id' => true,
|
||||
'SELECT Animal AS Child JOIN Animal AS Dad ON Child.father = Dad.id' => true,
|
||||
'SELECT Animal AS Dad JOIN Animal AS Child ON Child.father = Dad.id' => true,
|
||||
'SELECT Animal AS Child JOIN Animal AS Dad ON Child.father = Dad.id JOIN Animal AS Mum ON Child.mother = Mum.id' => true,
|
||||
'SELECT Animal AS Child JOIN Animal AS Dad ON Child.father = Dad.id JOIN Animal AS Mum ON Child.mother = Mum.id WHERE Dad.id = 1' => true,
|
||||
'SELECT Animal AS Child JOIN Animal AS Dad ON Child.father = Dad.id JOIN Animal AS Mum ON Child.mother = Mum.id WHERE Dad.name = \'romanoff\'' => false,
|
||||
'SELECT Animal AS Child JOIN Mammal AS Dad ON Child.father = Dad.id' => true,
|
||||
'SELECT Animal AS Child JOIN Mammal AS Dad ON Child.father = Dad.id JOIN Animal AS Mum ON Child.mother = Mum.id WHERE Dad.name = \'romanoff\' OR Mum.speed = 0' => true,
|
||||
'SELECT Animal AS Dad JOIN Animal AS Child ON Child.father = Dad.id JOIN Animal AS Mum ON Child.mother = Mum.id' => true,
|
||||
'SELECT Mammal AS Dad JOIN Mammal AS Child ON Child.father = Dad.id' => true,
|
||||
'SELECT Mammal AS Dad JOIN Mammal AS Child ON Child.father = Dad.id JOIN Mammal AS Mum ON Child.mother = Mum.id WHERE Dad.name = \'romanoff\' OR Mum.name=\'chloe\' OR Child.name=\'bizounours\'' => true,
|
||||
// Specifying multiple objects
|
||||
'SELECT Animal FROM Animal' => true,
|
||||
'SELECT yelele FROM Animal' => false,
|
||||
'SELECT Animal FROM Animal AS A' => false,
|
||||
'SELECT A FROM Animal AS A' => true,
|
||||
);
|
||||
//$aQueries = array(
|
||||
// 'SELECT Mammal AS M JOIN Group AS G ON M.member = G.id WHERE G.leader_name LIKE "%"' => true,
|
||||
//);
|
||||
foreach($aQueries as $sQuery => $bIsCorrect)
|
||||
{
|
||||
$this->CheckQuery($sQuery, $bIsCorrect);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Test data load
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class TestBulkChangeOnFarm extends TestBizModel
|
||||
{
|
||||
static public function GetName()
|
||||
{
|
||||
return 'Farm test - data load';
|
||||
}
|
||||
|
||||
static public function GetDescription()
|
||||
{
|
||||
return 'Bulk load';
|
||||
}
|
||||
|
||||
static public function GetConfigFile() {return '/config-test-farm.php';}
|
||||
|
||||
protected function DoPrepare()
|
||||
{
|
||||
parent::DoPrepare();
|
||||
$this->ResetDB();
|
||||
MetaModel::DBCheckIntegrity();
|
||||
}
|
||||
|
||||
protected function DoExecute()
|
||||
{
|
||||
// $this->ReportError("Found two different OQL expression out of the (same?) filter: <em>$sExpr1</em> != <em>$sExpr2</em>");
|
||||
// $this->ReportSuccess('Found '.$oSet->Count()." objects of class $sClassName");
|
||||
|
||||
$oParser = new CSVParser("denomination,hauteur,age
|
||||
suzy,123,2009-01-01
|
||||
chita,456,
|
||||
", ',', '"');
|
||||
$aData = $oParser->ToArray(1, array('_name', '_height', '_birth'));
|
||||
self::DumpVariable($aData);
|
||||
|
||||
$oBulk = new BulkChange(
|
||||
'Mammal',
|
||||
$aData,
|
||||
// attributes
|
||||
array('name' => '_name', 'height' => '_height', 'birth' => '_birth'),
|
||||
// ext keys
|
||||
array(),
|
||||
// reconciliation
|
||||
array('name')
|
||||
);
|
||||
|
||||
$oMyChange = MetaModel::NewObject("CMDBChange");
|
||||
$oMyChange->Set("date", time());
|
||||
$oMyChange->Set("userinfo", "Testor");
|
||||
$iChangeId = $oMyChange->DBInsert();
|
||||
// echo "Created new change: $iChangeId</br>";
|
||||
|
||||
echo "<h3>Planned for loading...</h3>";
|
||||
$aRes = $oBulk->Process();
|
||||
self::DumpVariable($aRes);
|
||||
echo "<h3>Go for loading...</h3>";
|
||||
$aRes = $oBulk->Process($oMyChange);
|
||||
self::DumpVariable($aRes);
|
||||
|
||||
return;
|
||||
|
||||
$oRawData = array(
|
||||
'Mammal',
|
||||
array('species', 'sex', 'speed', 'mother', 'father', 'name', 'height', 'birth'),
|
||||
"human,male,23,0,0,romulus,192,1971
|
||||
human,male,23,0,0,remus,154,-50
|
||||
human,male,23,0,0,julius,160,-49
|
||||
human,female,23,0,0,cleopatra,142,-50
|
||||
pig,female,23,0,0,confucius,50,2003"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Test data load
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class TestFullTextSearchOnFarm extends MyFarm
|
||||
{
|
||||
static public function GetName()
|
||||
{
|
||||
return 'Farm test - full text search';
|
||||
}
|
||||
|
||||
static public function GetDescription()
|
||||
{
|
||||
return 'Focus on the full text search feature';
|
||||
}
|
||||
|
||||
protected function DoExecute()
|
||||
{
|
||||
echo "<h3>Create protagonists...</h3>";
|
||||
|
||||
$iId1 = $this->InsertMammal('human', 'male', 10, 0, 0, 'romanoff', 192, '1971-07-19');
|
||||
$iId2 = $this->InsertMammal('human', 'female', 9, 0, 0, 'rouanita', 165, '1983-01-23');
|
||||
$this->InsertMammal('human', 'female', 3, $iId2, $iId1, 'pomme', 169, '2008-02-23');
|
||||
$this->InsertMammal('pig', 'female', 3, 0, 0, 'grouinkette', 85, '2006-06-01');
|
||||
$this->InsertMammal('donkey', 'female', 3, 0, 0, 'muleta', 124, '2003-11-11');
|
||||
|
||||
$this->InsertBird('rooster', 'male', 12, 0, 0);
|
||||
$this->InsertFlyingBird('pie', 'female', 11, 0, 0, 35);
|
||||
|
||||
echo "<h3>Search...</h3>";
|
||||
$oSearch = new DBObjectSearch('Mammal');
|
||||
$oSearch->AddCondition_FullText('manof');
|
||||
//$oResultSet = new DBObjectSet($oSearch);
|
||||
$this->search_and_show_list($oSearch);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Test queries
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Reference in New Issue
Block a user