Пример #1
0
 /** 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'] : '';
     }
 }
Пример #2
0
 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();
                     }
                 }
             }
         }
     }
 }
Пример #3
0
 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();
     }
 }
Пример #4
0
 /** 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'] : '';
                         }
                     }
                 }
             }
         }
     }
 }
Пример #5
0
 /** 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();
             }
         }
     }
 }
Пример #6
0
 /** 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;
             }
         }
     }
 }
Пример #7
0
 /** 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;
     }
 }
Пример #8
0
 /** 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;
                     }
                 }
             }
         }
     }
 }
Пример #9
0
 /** 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;
                             }
                         }
                     }
                 }
             }
         }
     }
 }
Пример #10
0
 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);
 }
Пример #11
0
 /** 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']);
                     }
                 }
             }
         }
     }
 }
Пример #12
0
 /** 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;
                     }
                 }
             }
         }
     }
 }
Пример #13
0
 /** 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;
         }
     }
 }