Example #1
0
/** Check for errors for a given build. Return false if no errors */
function check_email_errors($buildid, $checktesttimeingchanged, $testtimemaxstatus, $checkpreviouserrors)
{
    // Includes
    require_once 'models/buildconfigure.php';
    require_once 'models/build.php';
    require_once 'models/buildtest.php';
    require_once 'models/dynamicanalysis.php';
    $errors = array();
    $errors['errors'] = true;
    $errors['hasfixes'] = false;
    // Configure errors
    $BuildConfigure = new BuildConfigure();
    $BuildConfigure->BuildId = $buildid;
    $errors['configure_errors'] = $BuildConfigure->ComputeErrors();
    // Build errors and warnings
    $Build = new Build();
    $Build->Id = $buildid;
    $Build->FillFromId($buildid);
    $errors['build_errors'] = $Build->GetNumberOfErrors();
    $errors['build_warnings'] = $Build->GetNumberOfWarnings();
    // Test errors
    $BuildTest = new BuildTest();
    $BuildTest->BuildId = $buildid;
    $errors['test_errors'] = $BuildTest->GetNumberOfFailures($checktesttimeingchanged, $testtimemaxstatus);
    // Dynamic analysis errors
    $DynamicAnalysis = new DynamicAnalysis();
    $DynamicAnalysis->BuildId = $buildid;
    $errors['dynamicanalysis_errors'] = $DynamicAnalysis->GetNumberOfErrors();
    // Green build we return
    if ($errors['configure_errors'] == 0 && $errors['build_errors'] == 0 && $errors['build_warnings'] == 0 && $errors['test_errors'] == 0 && $errors['dynamicanalysis_errors'] == 0) {
        $errors['errors'] = false;
    }
    // look for the previous build
    $previousbuildid = $Build->GetPreviousBuildId();
    if ($previousbuildid > 0) {
        $error_differences = $Build->GetErrorDifferences($buildid);
        if ($errors['errors'] && $checkpreviouserrors && $errors['dynamicanalysis_errors'] == 0) {
            // If the builderroddiff positive and configureerrordiff and testdiff positive are zero we don't send an email
            // we don't send any emails
            if ($error_differences['buildwarningspositive'] <= 0 && $error_differences['builderrorspositive'] <= 0 && $error_differences['configurewarnings'] <= 0 && $error_differences['configureerrors'] <= 0 && $error_differences['testfailedpositive'] <= 0 && $error_differences['testnotrunpositive'] <= 0) {
                $errors['errors'] = false;
            }
        }
        if ($error_differences['buildwarningsnegative'] > 0 || $error_differences['builderrorsnegative'] > 0 || $error_differences['configurewarnings'] < 0 || $error_differences['configureerrors'] < 0 || $error_differences['testfailednegative'] > 0 || $error_differences['testnotrunnegative'] > 0) {
            $errors['hasfixes'] = true;
            $errors['fixes']['configure_fixes'] = $error_differences['configurewarnings'] + $error_differences['configureerrors'];
            $errors['fixes']['builderror_fixes'] = $error_differences['builderrorsnegative'];
            $errors['fixes']['buildwarning_fixes'] = $error_differences['buildwarningsnegative'];
            $errors['fixes']['test_fixes'] = $error_differences['testfailednegative'] + $error_differences['testnotrunnegative'];
        }
    }
    return $errors;
}
Example #2
0
 function testBuildModel()
 {
     $this->startCodeCoverage();
     $build = new Build();
     $builderror = new BuildError();
     $builderror->Type = 0;
     $builderror->Text = 'error';
     $buildwarning = new BuildError();
     $buildwarning->Type = 1;
     $buildwarning->Text = 'warning';
     if ($build->GetName() !== false) {
         $this->fail("GetName didn't return false for empty build id");
         return 1;
     }
     if ($build->GetLabels() !== false) {
         $this->fail("GetLabels didn't return false for empty build id");
         return 1;
     }
     if ($build->GetGroup() !== false) {
         $this->fail("GetGroup didn't return false for empty build id");
         return 1;
     }
     if ($build->GetNumberOfErrors() !== false) {
         $this->fail("GetNumberOfErrors didn't return false for empty build id");
         return 1;
     }
     if ($build->GetNumberOfWarnings() !== false) {
         $this->fail("GetNumberOfWarnings didn't return false for empty build id");
         return 1;
     }
     if ($build->SetSubProject('1234') !== false) {
         $this->fail("SetSubProject didn't return false for empty project id");
         return 1;
     }
     if ($build->GetSubProjectName() !== false) {
         $this->fail("GetSubProjectName didn't return false for empty build id");
         return 1;
     }
     if ($build->GetErrorDifferences() !== false) {
         $this->fail("GetErrorDifferences didn't return false for empty build id");
         return 1;
     }
     if ($build->ComputeUpdateStatistics() !== false) {
         $this->fail("ComputeUpdateStatistics didn't return false for empty build id");
         return 1;
     }
     if ($build->ComputeDifferences() !== false) {
         $this->fail("ComputeDifferences didn't return false for empty build id");
         return 1;
     }
     if ($build->ComputeConfigureDifferences() !== false) {
         $this->fail("ComputeConfigureDifferences didn't return false for empty build id");
         return 1;
     }
     if ($build->ComputeTestTiming() !== false) {
         $this->fail("ComputeTestTiming didn't return false for empty build id");
         return 1;
     }
     if ($build->InsertLabelAssociations() !== false) {
         $this->fail("InsertLabelAssocations didn't return false for empty build id");
         return 1;
     }
     if ($build->UpdateEndTime('2010-08-07') !== false) {
         $this->fail("UpdateEndTime didn't return false for empty build id");
         return 1;
     }
     if ($build->SaveTotalTestsTime('100') !== false) {
         $this->fail("SaveTotalTestsTime didn't return false for empty build id");
         return 1;
     }
     $build->Id = '1';
     if ($build->ComputeTestTiming() !== false) {
         $this->fail("ComputeTestTiming didn't return false for empty project id");
         return 1;
     }
     if ($build->ComputeUpdateStatistics() !== false) {
         $this->fail("ComputeUpdateStatistics didn't return false for empty project id");
         return 1;
     }
     $build->ProjectId = '2';
     $build->SiteId = '1';
     $build->SetSubProject('8567');
     if (strpos(file_get_contents($this->logfilename), "New subproject detected") === false) {
         $this->fail("'New subproject detected' not found in log after calling SetSubProject for invalid subproject id");
         return 1;
     }
     if ($build->Exists() == false) {
         $this->fail("Exists returned false for a valid build id");
         return 1;
     }
     $build->Id = '98765';
     $build->SetStamp('20100610-1901-Experimental');
     $build->Type = '';
     //force this empty for coverage purposes
     $build->StartTime = '2009-12-18 14:19:11';
     $build->EndTime = '2009-12-18 14:20:23';
     $build->SubmitTime = '2012-01-25 16:43:11';
     if ($build->Exists() == true) {
         $this->fail("Exists returned true for an invalid build id");
         return 1;
     }
     $build->Save();
     $build->Append = true;
     $build->InsertErrors = true;
     $build->AddError($builderror);
     $build->AddError($buildwarning);
     $build->Save();
     $this->stopCodeCoverage();
     return 0;
 }