/** startElement function */ public function startElement($parser, $name, $attributes) { parent::startElement($parser, $name, $attributes); if ($name == 'SITE') { $this->Site->Name = $attributes['NAME']; if (empty($this->Site->Name)) { $this->Site->Name = '(empty)'; } $this->Site->Insert(); $siteInformation = new SiteInformation(); $buildInformation = new BuildInformation(); // Fill in the attribute foreach ($attributes as $key => $value) { $siteInformation->SetValue($key, $value); $buildInformation->SetValue($key, $value); } $this->Site->SetInformation($siteInformation); $this->Build->SiteId = $this->Site->Id; $this->Build->Name = $attributes['BUILDNAME']; if (empty($this->Build->Name)) { $this->Build->Name = '(empty)'; } $this->Build->SetStamp($attributes['BUILDSTAMP']); $this->Build->Generator = $attributes['GENERATOR']; $this->Build->Information = $buildInformation; } elseif ($name == 'NOTE') { $this->Note = new BuildNote(); $this->Note->Name = isset($attributes['NAME']) ? $attributes['NAME'] : ''; } }
public function startElement($parser, $name, $attributes) { parent::startElement($parser, $name, $attributes); if ($name == 'SITE') { $this->Site->Name = $attributes['NAME']; if (empty($this->Site->Name)) { $this->Site->Name = "(empty)"; } $this->Site->Insert(); $siteInformation = new SiteInformation(); $buildInformation = new BuildInformation(); // Fill in the attribute foreach ($attributes as $key => $value) { $siteInformation->SetValue($key, $value); $buildInformation->SetValue($key, $value); } $this->Site->SetInformation($siteInformation); $this->Build->SiteId = $this->Site->Id; $this->Build->Name = $attributes['BUILDNAME']; if (empty($this->Build->Name)) { $this->Build->Name = "(empty)"; } $this->Build->SetStamp($attributes['BUILDSTAMP']); $this->Build->Generator = $attributes['GENERATOR']; $this->Build->Information = $buildInformation; if (array_key_exists('APPEND', $attributes)) { if (strtolower($attributes['APPEND']) == "true") { $this->Append = true; } } else { $this->Append = false; } } else { if ($name == 'WARNING') { $this->Error = new BuildError(); $this->Error->Type = 1; } else { if ($name == 'ERROR') { $this->Error = new BuildError(); $this->Error->Type = 0; } else { if ($name == 'FAILURE') { $this->Error = new BuildFailure(); $this->Error->Type = 0; if ($attributes['TYPE'] == "Error") { $this->Error->Type = 0; } else { if ($attributes['TYPE'] == "Warning") { $this->Error->Type = 1; } } } else { if ($name == 'LABEL') { $this->Label = new Label(); } } } } } }
public function startElement($parser, $name, $attributes) { parent::startElement($parser, $name, $attributes); if ($name == 'SITE') { $this->Site->Name = $attributes['NAME']; if (empty($this->Site->Name)) { $this->Site->Name = '(empty)'; } $this->Site->Insert(); $siteInformation = new SiteInformation(); $buildInformation = new BuildInformation(); // Fill in the attribute foreach ($attributes as $key => $value) { if ($key === 'CHANGEID') { $this->Build->SetPullRequest($value); continue; } $siteInformation->SetValue($key, $value); $buildInformation->SetValue($key, $value); } $this->Site->SetInformation($siteInformation); $this->Build->SiteId = $this->Site->Id; $this->Build->Name = $attributes['BUILDNAME']; if (empty($this->Build->Name)) { $this->Build->Name = '(empty)'; } $this->Build->SetStamp($attributes['BUILDSTAMP']); $this->Build->Generator = $attributes['GENERATOR']; $this->Build->Information = $buildInformation; } elseif ($name == 'LABEL') { $this->Label = new Label(); } }
/** Start element */ public function startElement($parser, $name, $attributes) { parent::startElement($parser, $name, $attributes); if ($name == 'SITE') { $this->Site->Name = $attributes['NAME']; if (empty($this->Site->Name)) { $this->Site->Name = "(empty)"; } $this->Site->Insert(); $siteInformation = new SiteInformation(); $buildInformation = new BuildInformation(); // Fill in the attribute foreach ($attributes as $key => $value) { $siteInformation->SetValue($key, $value); $buildInformation->SetValue($key, $value); } $this->Site->SetInformation($siteInformation); $this->Build->SiteId = $this->Site->Id; $this->Build->Name = $attributes['BUILDNAME']; if (empty($this->Build->Name)) { $this->Build->Name = "(empty)"; } $this->Build->SetStamp($attributes['BUILDSTAMP']); $this->Build->Generator = $attributes['GENERATOR']; $this->Build->Information = $buildInformation; } else { if ($name == 'DYNAMICANALYSIS') { $this->Checker = $attributes['CHECKER']; } else { if ($name == 'TEST' && isset($attributes['STATUS'])) { $this->DynamicAnalysis = new DynamicAnalysis(); $this->DynamicAnalysis->Checker = $this->Checker; $this->DynamicAnalysis->Status = $attributes['STATUS']; } else { if ($name == 'DEFECT') { $this->DynamicAnalysisDefect = new DynamicAnalysisDefect(); $this->DynamicAnalysisDefect->Type = $attributes['TYPE']; } else { if ($name == 'LABEL') { $this->Label = new Label(); } else { if ($name == 'LOG') { $this->DynamicAnalysis->LogCompression = isset($attributes['COMPRESSION']) ? $attributes['COMPRESSION'] : ''; $this->DynamicAnalysis->LogEncoding = isset($attributes['ENCODING']) ? $attributes['ENCODING'] : ''; } } } } } } }
/** startElement */ public function startElement($parser, $name, $attributes) { parent::startElement($parser, $name, $attributes); if ($name == 'SITE') { $this->Site->Name = $attributes['NAME']; if (empty($this->Site->Name)) { $this->Site->Name = "(empty)"; } $this->Site->Insert(); $siteInformation = new SiteInformation(); $buildInformation = new BuildInformation(); // Fill in the attribute foreach ($attributes as $key => $value) { $siteInformation->SetValue($key, $value); $buildInformation->SetValue($key, $value); } $this->Site->SetInformation($siteInformation); $this->Build->SiteId = $this->Site->Id; $this->Build->Name = $attributes['BUILDNAME']; if (empty($this->Build->Name)) { $this->Build->Name = "(empty)"; } $this->Build->SetStamp($attributes['BUILDSTAMP']); $this->Build->Generator = $attributes['GENERATOR']; $this->Build->Information = $buildInformation; } else { if ($name == 'FILE') { $this->CoverageFile = new CoverageFile(); $this->Coverage = new Coverage(); $this->CoverageFile->FullPath = $attributes['FULLPATH']; if ($attributes['COVERED'] == 1 || $attributes['COVERED'] == "true") { $this->Coverage->Covered = 1; } else { $this->Coverage->Covered = 0; } $this->Coverage->CoverageFile = $this->CoverageFile; } else { if ($name == 'LABEL') { $this->Label = new Label(); } } } }
/** startElement function */ public function startElement($parser, $name, $attributes) { parent::startElement($parser, $name, $attributes); if ($name == 'SITE') { $this->Site->Name = $attributes['NAME']; if (empty($this->Site->Name)) { $this->Site->Name = "(empty)"; } $this->Site->Insert(); $siteInformation = new SiteInformation(); $buildInformation = new BuildInformation(); // Fill in the attribute foreach ($attributes as $key => $value) { $siteInformation->SetValue($key, $value); $buildInformation->SetValue($key, $value); } $this->Site->SetInformation($siteInformation); $this->Build->SiteId = $this->Site->Id; $this->Build->Name = $attributes['BUILDNAME']; if (empty($this->Build->Name)) { $this->Build->Name = "(empty)"; } $this->Build->SetStamp($attributes['BUILDSTAMP']); $this->Build->Generator = $attributes['GENERATOR']; $this->Build->Information = $buildInformation; } else { if ($name == 'NOTE') { $this->Note = new BuildNote(); $this->Note->Name = isset($attributes['NAME']) ? $attributes['NAME'] : ''; } else { if ($name == 'NOTES') { // We need a build to add notes (and cannot create one from the information) $this->Build->ProjectId = $this->projectid; $buildid = $this->Build->GetIdFromName($this->SubProjectName); $this->BuildId = $buildid; } } } }
/** Start Element */ public function startElement($parser, $name, $attributes) { parent::startElement($parser, $name, $attributes); $parent = $this->getParent(); // should be before endElement if ($name == 'SITE') { $this->Site->Name = $attributes['NAME']; if (empty($this->Site->Name)) { $this->Site->Name = '(empty)'; } $this->Site->Insert(); $siteInformation = new SiteInformation(); $buildInformation = new BuildInformation(); // Fill in the attribute foreach ($attributes as $key => $value) { if ($key === 'CHANGEID') { $this->Build->SetPullRequest($value); continue; } $siteInformation->SetValue($key, $value); $buildInformation->SetValue($key, $value); } $this->Site->SetInformation($siteInformation); $this->Build->SiteId = $this->Site->Id; $this->Build->Name = $attributes['BUILDNAME']; if (empty($this->Build->Name)) { $this->Build->Name = '(empty)'; } $this->Build->SetStamp($attributes['BUILDSTAMP']); $this->Build->Generator = $attributes['GENERATOR']; $this->Build->Information = $buildInformation; if (array_key_exists('APPEND', $attributes)) { $this->Append = $attributes['APPEND']; } else { $this->Append = false; } } elseif ($name == 'TEST' && count($attributes) > 0) { $this->Test = new Test(); $this->Test->ProjectId = $this->projectid; $this->BuildTest = new BuildTest(); $this->BuildTest->Status = $attributes['STATUS']; if ($attributes['STATUS'] == 'passed') { $this->NumberTestsPassed++; } elseif ($attributes['STATUS'] == 'failed') { $this->NumberTestsFailed++; } elseif ($attributes['STATUS'] == 'notrun') { $this->NumberTestsNotRun++; } } elseif ($name == 'NAMEDMEASUREMENT') { $this->TestMeasurement = new TestMeasurement(); if ($attributes['TYPE'] == 'file') { $this->TestMeasurement->Name = $attributes['FILENAME']; } else { $this->TestMeasurement->Name = $attributes['NAME']; } $this->TestMeasurement->Type = $attributes['TYPE']; } elseif ($name == 'VALUE' && $parent == 'MEASUREMENT') { if (isset($attributes['COMPRESSION']) && $attributes['COMPRESSION'] == 'gzip') { $this->Test->CompressedOutput = true; } } elseif ($name == 'LABEL' && $parent == 'LABELS') { $this->Label = new Label(); } elseif ($name == 'TESTLIST' && $parent == 'TESTING') { $start_time = gmdate(FMT_DATETIME, $this->StartTimeStamp); $this->Build->ProjectId = $this->projectid; $this->Build->StartTime = $start_time; // EndTimeStamp hasn't been parsed yet. $this->Build->EndTime = $start_time; $this->Build->SubmitTime = gmdate(FMT_DATETIME); $this->Build->SetSubProject($this->SubProjectName); $this->Build->GetIdFromName($this->SubProjectName); $this->Build->RemoveIfDone(); // If the build doesn't exist we add it if ($this->Build->Id == 0) { $this->Build->Append = $this->Append; $this->Build->InsertErrors = false; add_build($this->Build, $this->scheduleid); } else { // Otherwise make sure that the build is up-to-date. $this->Build->UpdateBuild($this->Build->Id, -1, -1); // If the build already exists factor the number of tests // that have already been run into our running total. $this->NumberTestsFailed += $this->Build->GetNumberOfFailedTests(); $this->NumberTestsNotRun += $this->Build->GetNumberOfNotRunTests(); $this->NumberTestsPassed += $this->Build->GetNumberOfPassedTests(); } $GLOBALS['PHP_ERROR_BUILD_ID'] = $this->Build->Id; } }
/** Start Element */ public function startElement($parser, $name, $attributes) { parent::startElement($parser, $name, $attributes); $parent = $this->getParent(); // should be before endElement if ($name == 'SITE') { $this->HasSiteTag = true; $this->Site->Name = $attributes['NAME']; if (empty($this->Site->Name)) { $this->Site->Name = "(empty)"; } $this->Site->Insert(); $siteInformation = new SiteInformation(); $buildInformation = new BuildInformation(); // Fill in the attribute foreach ($attributes as $key => $value) { $siteInformation->SetValue($key, $value); $buildInformation->SetValue($key, $value); } $this->Site->SetInformation($siteInformation); $this->Build->SiteId = $this->Site->Id; $this->Build->Name = $attributes['BUILDNAME']; if (empty($this->Build->Name)) { $this->Build->Name = "(empty)"; } $this->Build->SetStamp($attributes['BUILDSTAMP']); $this->Build->Generator = $attributes['GENERATOR']; $this->Build->Information = $buildInformation; if (array_key_exists('APPEND', $attributes)) { $this->Append = $attributes['APPEND']; } else { $this->Append = false; } } else { if ($name == "TEST-CASE" && count($attributes) > 0) { $this->Test = new Test(); $this->Test->ProjectId = $this->projectid; $this->BuildTest = new BuildTest(); $teststatus = "notrun"; if ($attributes['RESULT'] == "Success") { $teststatus = "passed"; } else { if ($attributes['RESULT'] == "Failure") { $teststatus = "failed"; } } $this->BuildTest->Status = $teststatus; if ($teststatus == "passed") { $this->NumberTestsPassed++; } else { if ($teststatus == "failed") { $this->NumberTestsFailed++; } else { if ($teststatus == "notrun") { $this->NumberTestsNotRun++; } } } if (isset($attributes['TIME'])) { $this->BuildTest->Time = $attributes['TIME']; } if (isset($attributes['ASSERTS'])) { $this->Test->Details = $attributes['ASSERTS']; } $this->Test->Name = $attributes['NAME']; $this->Test->Path = $attributes['NAME']; $this->Test->Command = $attributes['NAME']; } else { if ($name == "TEST-RESULTS") { $this->StartTimeStamp = strtotime($attributes['DATE'] . ' ' . $attributes['TIME']); $this->EndTimeStamp = $this->StartTimeStamp; } else { if ($this->HasSiteTag == false && $name == "ENVIRONMENT") { // If the XML file doesn't have a <Site> tag then we use the information // provided by the testsuite. // buildname is 'name' // sitename is 'hostname' // timestamp is 'timestamp' $this->Site->Name = $attributes['MACHINE-NAME']; $this->Site->Insert(); $buildInformation = new BuildInformation(); $buildInformation->OSName = $attributes['PLATFORM']; $buildInformation->OSVersion = $attributes['OS-VERSION']; $buildInformation->CompilerName = 'CLR'; $buildInformation->CompilerVersion = $attributes['CLR-VERSION']; $this->Build->SiteId = $this->Site->Id; $this->Build->Name = $attributes['PLATFORM']; // Construct a CMake-Like build stamp // We assume Nightly $stamp = date("Ymd-Hi", $this->StartTimeStamp) . '-Nightly'; $this->Build->SetStamp($stamp); $this->Build->Information = $buildInformation; $this->Append = false; } else { if ($this->BuildAdded == false && $name == "TEST-SUITE") { $this->Build->SaveTotalTestsTime(0); $start_time = gmdate(FMT_DATETIME, $this->StartTimeStamp); $this->Build->ProjectId = $this->projectid; $buildid = $this->Build->GetIdFromName($this->SubProjectName); // If the build doesn't exist we add it if ($buildid == 0) { $this->Build->ProjectId = $this->projectid; $this->Build->StartTime = $start_time; $this->Build->EndTime = $start_time; $this->Build->SubmitTime = gmdate(FMT_DATETIME); $this->Build->SetSubProject($this->SubProjectName); $this->Build->Append = $this->Append; $this->Build->InsertErrors = false; add_build($this->Build, $this->scheduleid); $this->UpdateEndTime = true; $buildid = $this->Build->Id; } else { $this->Build->Id = $buildid; //if the build already exists factor the number of tests that have //already been run into our running total $this->NumberTestsFailed += $this->Build->GetNumberOfFailedTests(); $this->NumberTestsNotRun += $this->Build->GetNumberOfNotRunTests(); $this->NumberTestsPassed += $this->Build->GetNumberOfPassedTests(); } $GLOBALS['PHP_ERROR_BUILD_ID'] = $buildid; $this->BuildId = $buildid; $this->BuildAdded = true; } } } } } }
/** startElement */ public function startElement($parser, $name, $attributes) { parent::startElement($parser, $name, $attributes); $parent = $this->getParent(); if ($name == 'SITE') { $this->Site->Name = $attributes['NAME']; if (empty($this->Site->Name)) { $this->Site->Name = "(empty)"; } $this->Site->Insert(); $siteInformation = new SiteInformation(); $buildInformation = new BuildInformation(); // Fill in the attribute foreach ($attributes as $key => $value) { $siteInformation->SetValue($key, $value); $buildInformation->SetValue($key, $value); } $this->Site->SetInformation($siteInformation); $this->Build->SiteId = $this->Site->Id; $this->Build->Name = $attributes['BUILDNAME']; if (empty($this->Build->Name)) { $this->Build->Name = "(empty)"; } $this->Build->SetStamp($attributes['BUILDSTAMP']); $this->Build->Generator = $attributes['GENERATOR']; $this->Build->Information = $buildInformation; } else { if ($name == 'SOURCEFILE') { $this->CoverageFile = new CoverageFile(); $this->Coverage = new Coverage(); $this->CoverageFile->FullPath = $attributes['NAME']; $this->Coverage->Covered = 1; $this->Coverage->CoverageFile = $this->CoverageFile; } else { if ($name == 'LABEL') { $this->Label = new Label(); } else { if ($parent == 'REPORT' && $name == 'SESSIONINFO') { // timestamp are in miliseconds $this->StartTimeStamp = substr($attributes['START'], 0, -3); $this->EndTimeStamp = substr($attributes['DUMP'], 0, -3); } else { if ($parent == 'REPORT' && $name == 'COUNTER') { switch ($attributes['TYPE']) { case 'LINE': $this->CoverageSummary->LocTested = intval($attributes['COVERED']); $this->CoverageSummary->LocUntested = intval($attributes['MISSED']); break; case 'COMPLEXITY': $this->CoverageSummary->BranchesTested = intval($attributes['COVERED']); $this->CoverageSummary->BranchesUntested = intval($attributes['MISSED']); break; case 'METHOD': $this->CoverageSummary->FunctionsTested = intval($attributes['COVERED']); $this->CoverageSummary->FunctionsUntested = intval($attributes['MISSED']); break; } } else { if ($parent == 'SOURCEFILE' && $name == 'COUNTER') { switch ($attributes['TYPE']) { case 'LINE': $this->Coverage->LocTested = intval($attributes['COVERED']); $this->Coverage->LocUntested = intval($attributes['MISSED']); break; case 'COMPLEXITY': $this->Coverage->BranchesTested = intval($attributes['COVERED']); $this->Coverage->BranchesUntested = intval($attributes['MISSED']); break; case 'METHOD': $this->Coverage->FunctionsTested = intval($attributes['COVERED']); $this->Coverage->FunctionsUntested = intval($attributes['MISSED']); break; } } } } } } } }
public function testBuildRemovalWorksAsExpected() { require_once 'include/common.php'; require_once 'include/pdo.php'; require_once 'models/build.php'; require_once 'models/buildconfigure.php'; require_once 'models/builderror.php'; require_once 'models/buildfailure.php'; require_once 'models/buildgroup.php'; require_once 'models/buildnote.php'; require_once 'models/buildupdate.php'; require_once 'models/coverage.php'; require_once 'models/dynamicanalysis.php'; require_once 'models/dynamicanalysissummary.php'; require_once 'models/image.php'; require_once 'models/label.php'; require_once 'models/test.php'; require_once 'models/uploadfile.php'; $time = gmdate(FMT_DATETIME); // Find an existing site. $row = pdo_single_row_query('SELECT id FROM site LIMIT 1'); $siteid = $row['id']; // Label $label = new Label(); $label->SetText('remove me'); // Build $build = new Build(); $build->Name = 'RemovalWorksAsExpected'; $build->SetStamp('20160822-1810-Experimental'); $build->ProjectId = 1; $build->InsertErrors = true; $build->SiteId = $siteid; $build->StartTime = $time; $build->EndTime = $time; $build->SubmitTime = $time; $build->AddLabel($label); $buildgroup = new BuildGroup(); $build->GroupId = $buildgroup->GetGroupIdFromRule($build); $info = new BuildInformation(); $info->SetValue('OSNAME', 'Windows'); $build->Information = $info; // BuildError $error = new BuildError(); $error->Text = 'error: asdf'; $build->AddError($error); // BuildFailure $failure = new BuildFailure(); $failure->StdError = 'failure: asdf'; $failure->AddArgument('arg1'); $failure->AddLabel($label); $build->AddError($failure); $build->Save(); // Create another build to test shared resources. $existing_build = new Build(); $existing_build->Id = $build->Id; $existing_build->FillFromId($build->Id); $existing_build->SetStamp('20160822-1811-Experimental'); $existing_build->SubmitTime = $time; $existing_build->InsertErrors = true; $existing_build->AddError($failure); $existing_build->Id = null; $existing_build->Save(); // BuildConfigure $configure = new BuildConfigure(); $configure->BuildId = $build->Id; $configure->StartTime = $time; $configure->EndTime = $time; $configure->Command = 'cmake'; $configure->Log = "precontext\nWARNING: bar\npostcontext"; $configure->Status = 5; $configure->AddLabel($label); $configure->Insert(); $configure->ComputeWarnings(); $configure->ComputeErrors(); // BuildNote $note = new BuildNote(); $note->Name = 'my note'; $note->Text = 'note text'; $note->Time = $time; $note->BuildId = $build->Id; $note->Insert(); $shared_note = new BuildNote(); $shared_note->Name = 'my shared note'; $shared_note->Text = 'shared note text'; $shared_note->Time = $time; $shared_note->BuildId = $build->Id; $shared_note->Insert(); $shared_note->BuildId = $existing_build->Id; $shared_note->Insert(); // buildtesttime $build->SaveTotalTestsTime(8); // BuildUpdate $updatefile = new BuildUpdateFile(); $updatefile->Author = 'My Self'; $updatefile->Committer = 'My Self'; $updatefile->Email = '*****@*****.**'; $updatefile->CommitterEmail = '*****@*****.**'; $updatefile->Revision = 2; $updatefile->PriorRevision = 1; $updatefile->Filename = 'foo.cpp'; $updatefile->Status = 'MODIFIED'; $update = new BuildUpdate(); $update->AddFile($updatefile); $update->BuildId = $build->Id; $update->StartTime = $time; $update->EndTime = $time; $update->Command = 'git fetch'; $update->Insert(); pdo_query("INSERT INTO build2update (buildid, updateid)\n VALUES ({$existing_build->Id}, {$update->UpdateId})"); // Coverage $file1 = new CoverageFile(); $file1->FullPath = '/path/to/unshared.php'; $file1->File .= "this unshared line gets covered<br>"; $file1->File .= "this unshared line does not<br>"; $coverage1 = new Coverage(); $coverage1->Covered = 1; $coverage1->CoverageFile = $file1; $coverage1->LocTested = 1; $coverage1->LocUntested = 1; $coverage1->AddLabel($label); $file2 = new CoverageFile(); $file2->FullPath = '/path/to/shared.php'; $file2->File .= "this shared line gets covered<br>"; $file2->File .= "this shared line does not<br>"; $coverage2 = new Coverage(); $coverage2->Covered = 1; $coverage2->CoverageFile = $file2; $coverage2->LocTested = 1; $coverage2->LocUntested = 1; $coverage2->AddLabel($label); $summary = new CoverageSummary(); $summary->BuildId = $build->Id; $summary->AddCoverage($coverage1); $summary->AddCoverage($coverage2); $summary->Insert(true); $file1->TrimLastNewline(); $file1->Update($build->Id); $log1 = new CoverageFileLog(); $log1->AddLine(1, 1); $log1->BuildId = $build->Id; $log1->FileId = $file1->Id; $log1->Insert(true); $file2->TrimLastNewline(); $file2->Update($build->Id); $log2 = new CoverageFileLog(); $log2->AddLine(1, 1); $log2->BuildId = $build->Id; $log2->FileId = $file2->Id; $log2->Insert(true); // Also add coverage to existing build to test that shared files // do not get deleted. $existing_cov = new Coverage(); $existing_cov->Covered = 1; $existing_cov->CoverageFile = $file2; $existing_cov->LocTested = 1; $existing_cov->LocUntested = 1; $existing_cov->AddLabel($label); $existing_summary = new CoverageSummary(); $existing_summary->BuildId = $existing_build->Id; $existing_summary->AddCoverage($existing_cov); $existing_summary->Insert(true); $file2->Update($existing_build->Id); $existing_log = new CoverageFileLog(); $existing_log->AddLine(1, 1); $existing_log->BuildId = $existing_build->Id; $existing_log->FileId = $file2->Id; $existing_log->Insert(true); // DynamicAnalysis $DA_defect = new DynamicAnalysisDefect(); $DA_defect->Type = 'Potential Memory Leak'; $DA_defect->Value = 5; $DA = new DynamicAnalysis(); $DA->BuildId = $build->Id; $DA->Checker = 'Valgrind'; $DA->FullCommandLine = 'php DA_removebuilds.php'; $DA->Log = 'build removed successfully'; $DA->Name = 'removal test'; $DA->Path = '/path/to/removal/DA'; $DA->Status = 'failed'; $DA->AddDefect($DA_defect); $DA->AddLabel($label); $DA->Insert(); $DA_summary = new DynamicAnalysisSummary(); $DA_summary->BuildId = $build->Id; $DA_summary->Checker = 'Valgrind'; $DA_summary->AddDefects($DA_defect->Value); $DA_summary->Insert(); // Test $test = new Test(); $test->ProjectId = 1; $test->CompressedOutput = false; $test->Details = 'Completed'; $test->Name = 'removal test'; $test->Path = '/path/to/removal/test'; $test->Command = 'php test_removebuilds.php'; $test->Output = 'build removed successfully'; $measurement = new TestMeasurement(); $measurement->Name = 'Exit Value'; $measurement->Type = 'text/string'; $measurement->Value = 5; $test->AddMeasurement($measurement); $image = new Image(); $image->Extension = 'image/png'; $image->Data = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl' . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr' . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r' . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='; $image->Name = 'remove_me.png'; $test->AddImage($image); $test->Insert(); $buildtest = new BuildTest(); $buildtest->BuildId = $build->Id; $buildtest->TestId = $test->Id; $buildtest->Status = 'passed'; $buildtest->Insert(); $test->AddLabel($label); $test->InsertLabelAssociations($build->Id); $test2 = new Test(); $test2->ProjectId = 1; $test2->CompressedOutput = false; $test2->Details = 'Completed'; $test2->Name = 'shared test'; $test2->Path = '/path/to/shared/test'; $test2->Command = 'php test_sharedtest.php'; $test2->Output = 'test shared successfully'; $measurement2 = new TestMeasurement(); $measurement2->Name = 'Exit Value'; $measurement2->Type = 'text/string'; $measurement2->Value = 0; $test2->AddMeasurement($measurement2); $image2 = new Image(); $image2->Extension = 'image/gif'; $image2->Name = 'smile.gif'; $image2->Data = base64_encode(file_get_contents(dirname(__FILE__) . '/data/smile.gif')); $test2->AddImage($image2); $test2->Insert(); $buildtest2 = new BuildTest(); $buildtest2->BuildId = $build->Id; $buildtest2->TestId = $test2->Id; $buildtest2->Status = 'passed'; $buildtest2->Insert(); $buildtest2->BuildId = $existing_build->Id; $buildtest2->Insert(); $test2->AddLabel($label); $test2->InsertLabelAssociations($build->Id); // UploadFile $filename = dirname(__FILE__) . '/data/smile.gif'; $upload1 = new UploadFile(); $upload1->Filename = $filename; $upload1->IsUrl = false; $upload1->BuildId = $build->Id; $upload1->Sha1Sum = sha1_file($filename); $upload1->Filesize = filesize($filename); $upload1->Insert(); $filename = dirname(__FILE__) . '/data/smile2.gif'; $upload2 = new UploadFile(); $upload2->Filename = $filename; $upload2->IsUrl = false; $upload2->BuildId = $build->Id; $upload2->Sha1Sum = sha1_file($filename); $upload2->Filesize = filesize($filename); $upload2->Insert(); $upload2->BuildId = $existing_build->Id; $upload2->Insert(); // Various tables that are too hard to spoof with models so we resort // to direct insertion. pdo_query("INSERT INTO buildemail (userid, buildid, category)\n VALUES (1, {$build->Id}, 0)"); pdo_query("INSERT INTO builderrordiff\n (buildid, type, difference_positive, difference_negative)\n VALUES ({$build->Id}, 0, 1, 1)"); pdo_query("INSERT INTO configureerrordiff (buildid, type, difference)\n VALUES ({$build->Id}, 0, 1)"); pdo_query("INSERT INTO coveragesummarydiff (buildid, loctested, locuntested)\n VALUES ({$build->Id}, 1, 1)"); pdo_query("INSERT INTO summaryemail (buildid, date, groupid)\n VALUES ({$build->Id}, '{$time}', 1)"); pdo_query("INSERT INTO subproject2build (subprojectid, buildid)\n VALUES (1, {$build->Id})"); pdo_query("INSERT INTO testdiff\n (buildid, type, difference_positive, difference_negative)\n VALUES ({$build->Id}, 0, 1, 1)"); // Check that everything was created successfully. $this->verify('build', 'id', '=', $build->Id, 1); $this->verify('build2group', 'buildid', '=', $build->Id, 1); $this->verify('buildemail', 'buildid', '=', $build->Id, 1); $this->verify('builderror', 'buildid', '=', $build->Id, 1); $this->verify('builderrordiff', 'buildid', '=', $build->Id, 1); $this->verify('buildinformation', 'buildid', '=', $build->Id, 1); $this->verify('buildtesttime', 'buildid', '=', $build->Id, 1); $this->verify('configure', 'buildid', '=', $build->Id, 1); $this->verify('configureerror', 'buildid', '=', $build->Id, 1); $this->verify('configureerrordiff', 'buildid', '=', $build->Id, 1); $this->verify('coveragesummary', 'buildid', '=', $build->Id, 1); $this->verify('coveragesummarydiff', 'buildid', '=', $build->Id, 1); $this->verify('coveragefilelog', 'buildid', '=', $build->Id, 2); $this->verify('dynamicanalysissummary', 'buildid', '=', $build->Id, 1); $this->verify('summaryemail', 'buildid', '=', $build->Id, 1); $this->verify('subproject2build', 'buildid', '=', $build->Id, 1); $this->verify('testdiff', 'buildid', '=', $build->Id, 1); list($buildfailureid, $detailsid) = $this->verify_get_columns('buildfailure', ['id', 'detailsid'], 'buildid', '=', $build->Id, 1); $this->verify('buildfailure2argument', 'buildfailureid', '=', $buildfailureid, 1); $this->verify('buildfailuredetails', 'id', '=', $detailsid, 1); $noteids = $this->verify_get_rows('build2note', 'noteid', 'buildid', '=', $build->Id, 2); $this->verify('note', 'id', 'IN', $noteids, 2); $coveragefileids = $this->verify_get_rows('coverage', 'fileid', 'buildid', '=', $build->Id, 2); $this->verify('coveragefile', 'id', 'IN', $coveragefileids, 2); $dynamicanalysisid = $this->verify_get_rows('dynamicanalysis', 'id', 'buildid', '=', $build->Id, 1); $this->verify('dynamicanalysisdefect', 'dynamicanalysisid', '=', $dynamicanalysisid, 1); $testids = $this->verify_get_rows('build2test', 'testid', 'buildid', '=', $build->Id, 2); $this->verify('test', 'id', 'IN', $testids, 2); $this->verify('testmeasurement', 'testid', 'IN', $testids, 2); $imgids = $this->verify_get_rows('test2image', 'imgid', 'testid', 'IN', $testids, 2); $this->verify('image', 'id', 'IN', $imgids, 2); $updateid = $this->verify_get_rows('build2update', 'updateid', 'buildid', '=', $build->Id, 1); $this->verify('buildupdate', 'id', '=', $updateid, 1); $this->verify('updatefile', 'updateid', '=', $updateid, 1); $uploadfileids = $this->verify_get_rows('build2uploadfile', 'fileid', 'buildid', '=', $build->Id, 2); $this->verify('uploadfile', 'id', 'IN', $uploadfileids, 2); $labelid = $this->verify_get_rows('label2build', 'labelid', 'buildid', '=', $build->Id, 1); $this->verify('label', 'id', '=', $labelid, 1); $this->verify('label2buildfailure', 'labelid', '=', $labelid, 2); $this->verify('label2coveragefile', 'labelid', '=', $labelid, 3); $this->verify('label2dynamicanalysis', 'labelid', '=', $labelid, 1); $this->verify('label2test', 'labelid', '=', $labelid, 2); // Remove the build. remove_build($build->Id); // Check that everything was deleted properly. $this->verify('build', 'id', '=', $build->Id, 0, true); $this->verify('build2group', 'buildid', '=', $build->Id, 0, true); $this->verify('build2note', 'buildid', '=', $build->Id, 0, true); $this->verify('build2test', 'buildid', '=', $build->Id, 0, true); $this->verify('build2update', 'buildid', '=', $build->Id, 0, true); $this->verify('build2uploadfile', 'buildid', '=', $build->Id, 0, true); $this->verify('buildemail', 'buildid', '=', $build->Id, 0, true); $this->verify('builderror', 'buildid', '=', $build->Id, 0, true); $this->verify('builderrordiff', 'buildid', '=', $build->Id, 0, true); $this->verify('buildfailure', 'buildid', '=', $build->Id, 0, true); $this->verify('buildfailure2argument', 'buildfailureid', '=', $buildfailureid, 0, true); $this->verify('buildfailuredetails', 'id', '=', $detailsid, 1, true); $this->verify('buildinformation', 'buildid', '=', $build->Id, 0, true); $this->verify('buildtesttime', 'buildid', '=', $build->Id, 0, true); $this->verify('buildupdate', 'id', '=', $updateid, 1, true); $this->verify('configure', 'buildid', '=', $build->Id, 0, true); $this->verify('configureerror', 'buildid', '=', $build->Id, 0, true); $this->verify('configureerrordiff', 'buildid', '=', $build->Id, 0, true); $this->verify('coverage', 'buildid', '=', $build->Id, 0, true); $this->verify('coveragefile', 'id', 'IN', $coveragefileids, 1, true); $this->verify('coveragefilelog', 'buildid', '=', $build->Id, 0, true); $this->verify('coveragesummary', 'buildid', '=', $build->Id, 0, true); $this->verify('coveragesummarydiff', 'buildid', '=', $build->Id, 0, true); $this->verify('dynamicanalysis', 'buildid', '=', $build->Id, 0, true); $this->verify('dynamicanalysissummary', 'buildid', '=', $build->Id, 0, true); $this->verify('dynamicanalysisdefect', 'dynamicanalysisid', '=', $dynamicanalysisid, 0, true); $this->verify('image', 'id', 'IN', $imgids, 1, true); $this->verify('label2build', 'buildid', '=', $build->Id, 0, true); $this->verify('label2buildfailure', 'labelid', '=', $labelid, 1, true); $this->verify('label2coveragefile', 'labelid', '=', $labelid, 1, true); $this->verify('label2dynamicanalysis', 'labelid', '=', $labelid, 0, true); $this->verify('label2test', 'labelid', '=', $labelid, 0, true); $this->verify('note', 'id', 'IN', $noteids, 1, true); $this->verify('summaryemail', 'buildid', '=', $build->Id, 0, true); $this->verify('subproject2build', 'buildid', '=', $build->Id, 0, true); $this->verify('test', 'id', 'IN', $testids, 1, true); $this->verify('test2image', 'testid', 'IN', $testids, 1, true); $this->verify('testdiff', 'buildid', '=', $build->Id, 0, true); $this->verify('testmeasurement', 'testid', 'IN', $testids, 1, true); $this->verify('updatefile', 'updateid', '=', $updateid, 1, true); $this->verify('uploadfile', 'id', 'IN', $uploadfileids, 1, true); }
/** Start Element */ public function startElement($parser, $name, $attributes) { parent::startElement($parser, $name, $attributes); $parent = $this->getParent(); // should be before endElement if ($name == 'SITE') { $this->HasSiteTag = true; $this->Site->Name = $attributes['NAME']; if (empty($this->Site->Name)) { $this->Site->Name = "(empty)"; } $this->Site->Insert(); $siteInformation = new SiteInformation(); $buildInformation = new BuildInformation(); // Fill in the attribute foreach ($attributes as $key => $value) { $siteInformation->SetValue($key, $value); $buildInformation->SetValue($key, $value); } $this->Site->SetInformation($siteInformation); $this->Build->SiteId = $this->Site->Id; $this->Build->Name = $attributes['BUILDNAME']; if (empty($this->Build->Name)) { $this->Build->Name = "(empty)"; } $this->Build->SetStamp($attributes['BUILDSTAMP']); $this->Build->Generator = $attributes['GENERATOR']; $this->Build->Information = $buildInformation; if (array_key_exists('APPEND', $attributes)) { $this->Append = $attributes['APPEND']; } else { $this->Append = false; } } else { if ($name == "FAILURE") { $this->Test->Details = $attributes['TYPE']; } else { if ($name == "PROPERTY" && $parent == "PROPERTIES") { $this->TestProperties .= $attributes['NAME'] . '=' . $attributes['VALUE'] . "\n"; if ($this->HasSiteTag == false) { switch ($attributes['NAME']) { case 'os.name': $this->Build->Information->OSName = $attributes['VALUE']; break; case 'os.version': $this->Build->Information->OSVersion = $attributes['VALUE']; break; case 'java.vm.name': $this->Build->Information->CompilerName = $attributes['VALUE']; break; case 'java.vm.version': $this->Build->Information->CompilerVersion = $attributes['VALUE']; break; case 'hostname': if (empty($this->Site->Name)) { $this->Site->Name = $attributes['VALUE']; $this->Site->Insert(); $this->Build->SiteId = $this->Site->Id; } break; } } } else { if ($name == "TESTCASE" && count($attributes) > 0) { if ($this->BuildAdded == false) { $this->Build->SaveTotalTestsTime(0); $start_time = gmdate(FMT_DATETIME, $this->StartTimeStamp); $this->Build->ProjectId = $this->projectid; $buildid = $this->Build->GetIdFromName($this->SubProjectName); // If the build doesn't exist we add it if ($buildid == 0) { $this->Build->ProjectId = $this->projectid; $this->Build->StartTime = $start_time; $this->Build->EndTime = $start_time; $this->Build->SubmitTime = gmdate(FMT_DATETIME); $this->Build->SetSubProject($this->SubProjectName); $this->Build->Append = $this->Append; $this->Build->InsertErrors = false; add_build($this->Build, $this->scheduleid); $this->UpdateEndTime = true; $buildid = $this->Build->Id; } else { $this->Build->Id = $buildid; //if the build already exists factor the number of tests that have //already been run into our running total $this->NumberTestsFailed += $this->Build->GetNumberOfFailedTests(); $this->NumberTestsNotRun += $this->Build->GetNumberOfNotRunTests(); $this->NumberTestsPassed += $this->Build->GetNumberOfPassedTests(); } $GLOBALS['PHP_ERROR_BUILD_ID'] = $buildid; $this->BuildId = $buildid; $this->BuildAdded = true; } $this->Test = new Test(); $this->Test->Command = $this->TestProperties; $this->Test->ProjectId = $this->projectid; $this->BuildTest = new BuildTest(); if (isset($attributes['TIME'])) { $this->BuildTest->Time = $attributes['TIME']; } // Default is that the test passes unless there is a <failure> tag $this->BuildTest->Status = "passed"; $this->Test->Name = $attributes['NAME']; $this->Test->Path = $attributes['CLASSNAME']; } else { if ($name == "TESTSUITE") { // If the XML file doesn't have a <Site> tag then we use the information // provided by the testsuite. // buildname is 'name' // sitename is 'hostname' // timestamp is 'timestamp' if ($this->HasSiteTag == false) { // Hostname is not necessarily defined if (!empty($attributes['HOSTNAME'])) { $this->Site->Name = $attributes['HOSTNAME']; $this->Site->Insert(); $this->Build->SiteId = $this->Site->Id; } $this->Build->Information = new BuildInformation(); $this->Build->Name = $attributes['NAME']; // Construct a CMake-Like build stamp // We assume Nightly // If the TIMESTAMP attribute is not defined we take the current timestamp if (!isset($attributes['TIMESTAMP'])) { $timestamp = time(); } else { $timestamp = strtotime($attributes['TIMESTAMP']); } $stamp = date("Ymd-Hi", $timestamp) . '-Nightly'; $this->Build->SetStamp($stamp); $this->Append = false; } else { if (!isset($attributes['TIMESTAMP'])) { $stamp = $this->Build->GetStamp(); $timestamp = mktime(substr($stamp, 9, 2), substr($stamp, 11, 2), 0, substr($stamp, 6, 2), substr($stamp, 4, 2), substr($stamp, 0, 4)); } } $this->StartTimeStamp = $timestamp; $this->EndTimeStamp = $this->StartTimeStamp + $attributes['TIME']; $this->Build->SaveTotalTestsTime($attributes['TIME']); } } } } } }
/** Start element */ public function startElement($parser, $name, $attributes) { parent::startElement($parser, $name, $attributes); if ($this->UploadError) { return; } if ($name == 'SITE') { $this->Site->Name = $attributes['NAME']; if (empty($this->Site->Name)) { $this->Site->Name = "(empty)"; } $this->Site->Insert(); $siteInformation = new SiteInformation(); $buildInformation = new BuildInformation(); // Fill in the attribute foreach ($attributes as $key => $value) { $siteInformation->SetValue($key, $value); $buildInformation->SetValue($key, $value); } $this->Site->SetInformation($siteInformation); $this->Build->SiteId = $this->Site->Id; $this->Build->Name = $attributes['BUILDNAME']; if (empty($this->Build->Name)) { $this->Build->Name = "(empty)"; } $this->Build->SetStamp($attributes['BUILDSTAMP']); $this->Build->Generator = $attributes['GENERATOR']; $this->Build->Information = $buildInformation; } else { if ($name == 'UPLOAD') { $this->Build->ProjectId = $this->projectid; $buildid = $this->Build->GetIdFromName($this->SubProjectName); // If the build doesn't exist we add it if ($buildid == 0) { $this->Build->ProjectId = $this->projectid; $this->Build->StartTime = gmdate(FMT_DATETIME); $this->Build->EndTime = gmdate(FMT_DATETIME); $this->Build->SubmitTime = gmdate(FMT_DATETIME); $this->Build->SetSubProject($this->SubProjectName); $this->Build->Append = false; $this->Build->InsertErrors = false; add_build($this->Build, $this->scheduleid); $this->UpdateEndTime = true; $buildid = $this->Build->Id; } else { $this->Build->Id = $buildid; } $GLOBALS['PHP_ERROR_BUILD_ID'] = $buildid; $this->BuildId = $buildid; } else { if ($name == 'FILE') { $this->UploadFile = new UploadFile(); $this->UploadFile->Filename = $attributes['FILENAME']; } else { if ($name == 'CONTENT') { $fileEncoding = isset($attributes['ENCODING']) ? $attributes['ENCODING'] : 'base64'; if (strcmp($fileEncoding, 'base64') != 0) { // Only base64 encoding is supported for file upload add_log("upload_handler: Only 'base64' encoding is supported", __FILE__ . ':' . __LINE__ . ' - ' . __FUNCTION__, LOG_ERR); $this->UploadError = true; return; } // Create tmp file $this->TmpFilename = tempnam($GLOBALS['CDASH_UPLOAD_DIRECTORY'], 'tmp'); // TODO Handle error if (empty($this->TmpFilename)) { add_log("Failed to create temporary filename", __FILE__ . ':' . __LINE__ . ' - ' . __FUNCTION__, LOG_ERR); $this->UploadError = true; return; } $this->Base64TmpFilename = $this->TmpFilename . '-base64'; // Open base64 temporary file for writting $this->Base64TmpFileWriteHandle = fopen($this->Base64TmpFilename, 'w'); if (!$this->Base64TmpFileWriteHandle) { add_log("Failed to open file '" . $this->Base64TmpFilename . "' for writting", __FILE__ . ':' . __LINE__ . ' - ' . __FUNCTION__, LOG_ERR); $this->UploadError = true; return; } } } } } }
/** Start element */ public function startElement($parser, $name, $attributes) { parent::startElement($parser, $name, $attributes); if ($this->UploadError) { return; } if ($name == 'SITE') { $this->Site->Name = $attributes['NAME']; if (empty($this->Site->Name)) { $this->Site->Name = '(empty)'; } $this->Site->Insert(); $siteInformation = new SiteInformation(); $buildInformation = new BuildInformation(); // Fill in the attribute foreach ($attributes as $key => $value) { $siteInformation->SetValue($key, $value); $buildInformation->SetValue($key, $value); } $this->Site->SetInformation($siteInformation); $this->Build->SiteId = $this->Site->Id; $this->Build->Name = $attributes['BUILDNAME']; if (empty($this->Build->Name)) { $this->Build->Name = '(empty)'; } $this->Build->SetStamp($attributes['BUILDSTAMP']); $this->Build->Generator = $attributes['GENERATOR']; $this->Build->Information = $buildInformation; } elseif ($name == 'UPLOAD') { // Setting start time and end time is tricky here, since all // we have is the build stamp. The strategy we take here is: // Set the start time as late as possible, and set the end time // as early as possible. // This way we don't override any existing values for these fields // when we call UpdateBuild() below. // // For end time, we use the start of the testing day. // For start time, we use either the submit time (now) or // one second before the start time of the *next* testing day // (whichever is earlier). // Yes, this means the build finished before it began. // // This associates the build with the correct day if it is only // an upload. Otherwise we defer to the values set by the // other handlers. $row = pdo_single_row_query("SELECT nightlytime FROM project where id='{$this->projectid}'"); $nightly_time = $row['nightlytime']; $build_date = extract_date_from_buildstamp($this->Build->GetStamp()); list($prev, $nightly_start_time, $next) = get_dates($build_date, $nightly_time); // If the nightly start time is after noon (server time) // and this buildstamp is on or after the nightly start time // then this build belongs to the next testing day. if (date(FMT_TIME, $nightly_start_time) > '12:00:00') { $build_timestamp = strtotime($build_date); $next_timestamp = strtotime($next); if (strtotime(date(FMT_TIME, $build_timestamp), $next_timestamp) >= strtotime(date(FMT_TIME, $nightly_start_time), $next_timestamp)) { $nightly_start_time += 3600 * 24; } } $this->Build->EndTime = gmdate(FMT_DATETIME, $nightly_start_time); $now = time(); $one_second_before_tomorrow = strtotime('+1 day -1 second', $nightly_start_time); if ($one_second_before_tomorrow < time()) { $this->Build->StartTime = gmdate(FMT_DATETIME, $one_second_before_tomorrow); } else { $this->Build->StartTime = gmdate(FMT_DATETIME, $now); } $this->Build->SubmitTime = gmdate(FMT_DATETIME, $now); $this->Build->ProjectId = $this->projectid; $this->Build->SetSubProject($this->SubProjectName); $this->Build->GetIdFromName($this->SubProjectName); $this->Build->RemoveIfDone(); // If the build doesn't exist we add it if ($this->Build->Id == 0) { $this->Build->Append = false; $this->Build->InsertErrors = false; add_build($this->Build, $this->scheduleid); $this->UpdateEndTime = true; } else { // Otherwise make sure that the build is up-to-date. $this->Build->UpdateBuild($this->Build->Id, -1, -1); } $GLOBALS['PHP_ERROR_BUILD_ID'] = $this->Build->Id; } elseif ($name == 'FILE') { $this->UploadFile = new UploadFile(); $this->UploadFile->Filename = $attributes['FILENAME']; } elseif ($name == 'CONTENT') { $fileEncoding = isset($attributes['ENCODING']) ? $attributes['ENCODING'] : 'base64'; if (strcmp($fileEncoding, 'base64') != 0) { // Only base64 encoding is supported for file upload add_log("upload_handler: Only 'base64' encoding is supported", __FILE__ . ':' . __LINE__ . ' - ' . __FUNCTION__, LOG_ERR); $this->UploadError = true; return; } // Create tmp file $this->TmpFilename = tempnam($GLOBALS['CDASH_UPLOAD_DIRECTORY'], 'tmp'); // TODO Handle error if (empty($this->TmpFilename)) { add_log('Failed to create temporary filename', __FILE__ . ':' . __LINE__ . ' - ' . __FUNCTION__, LOG_ERR); $this->UploadError = true; return; } $this->Base64TmpFilename = $this->TmpFilename . '-base64'; // Open base64 temporary file for writting $this->Base64TmpFileWriteHandle = fopen($this->Base64TmpFilename, 'w'); if (!$this->Base64TmpFileWriteHandle) { add_log("Failed to open file '" . $this->Base64TmpFilename . "' for writting", __FILE__ . ':' . __LINE__ . ' - ' . __FUNCTION__, LOG_ERR); $this->UploadError = true; return; } } }