Exemple #1
0
    def setUp(self):
        super(CompileApiTest, self).setUp()
        self.analyzed_build_id = 8000000000000
        self.context = Context(luci_project_name='chromeos',
                               gitiles_host='gitiles.host.com',
                               gitiles_project='project/name',
                               gitiles_ref='ref/heads/master',
                               gitiles_id='git_sha')

        self.analysis = CompileFailureAnalysis.Create(
            luci_project=self.context.luci_project_name,
            luci_bucket='postsubmit',
            luci_builder='Linux Builder',
            build_id=self.analyzed_build_id,
            gitiles_host=self.context.gitiles_host,
            gitiles_project=self.context.gitiles_project,
            gitiles_ref=self.context.gitiles_ref,
            last_passed_gitiles_id='last_passed_git_hash',
            last_passed_commit_position=65432,
            first_failed_gitiles_id=self.context.gitiles_id,
            first_failed_commit_position=65450,
            rerun_builder_id='chromeos/postsubmit/builder-bisect',
            compile_failure_keys=[])
        self.analysis.Save()

        self.compile_step_name = 'compile'
Exemple #2
0
    def testBisectGitilesCommitFailedToGetGitilesId(self):
        gitiles_host = 'gitiles.host.com'
        gitiles_project = 'project/name'
        gitiles_ref = 'ref/heads/master'
        left_bound_gitiles_id = '100'
        right_bound_gitiles_id = '110'

        context = Context(luci_project_name='chromium',
                          gitiles_project=gitiles_project,
                          gitiles_host=gitiles_host,
                          gitiles_ref=gitiles_ref,
                          gitiles_id=right_bound_gitiles_id)

        left_bound_commit = self._CreateGitilesCommit(left_bound_gitiles_id,
                                                      100)

        right_bound_commit = self._CreateGitilesCommit(right_bound_gitiles_id,
                                                       110)

        revisions = {}

        bisect_commit, culprit_commit = analysis_util.BisectGitilesCommit(
            context, left_bound_commit, right_bound_commit, revisions)

        self.assertIsNone(bisect_commit)
        self.assertIsNone(culprit_commit)
Exemple #3
0
    def setUp(self):
        super(ChromeOSProjectAPITest, self).setUp()
        self.first_failed_commit_id = 'git_sha'
        self.first_failed_commit_position = 65450
        self.context = Context(luci_project_name='chromeos',
                               gitiles_host='gitiles.host.com',
                               gitiles_project='project/name',
                               gitiles_ref='ref/heads/master',
                               gitiles_id='git_sha')

        self.builder = BuilderID(project='chromeos',
                                 bucket='postsubmit',
                                 builder='builder-postsubmit')

        self.group_build_id = 8000000000189
        self.group_build = LuciFailedBuild.Create(
            luci_project=self.context.luci_project_name,
            luci_bucket=self.builder.bucket,
            luci_builder='builder2-postsubmit',
            build_id=self.group_build_id,
            legacy_build_number=12345,
            gitiles_host=self.context.gitiles_host,
            gitiles_project=self.context.gitiles_project,
            gitiles_ref=self.context.gitiles_ref,
            gitiles_id=self.context.gitiles_id,
            commit_position=self.first_failed_commit_position,
            status=20,
            create_time=datetime(2019, 3, 28),
            start_time=datetime(2019, 3, 28, 0, 1),
            end_time=datetime(2019, 3, 28, 1),
            build_failure_type=StepTypeEnum.COMPILE)
        self.group_build.put()
Exemple #4
0
def GetBuildAndContextForAnalysis(project, build_id):
    """Gets all information about a build and generates context from it.

  Args:
    project (str): Luci project of the build.
    build_id (int): Id of the build.

  Returns:
    (buildbucket build.proto): ALL info about the build.
    (Context): Context of an analysis.

  """
    build = buildbucket_client.GetV2Build(build_id,
                                          fields=FieldMask(paths=['*']))

    if not build:
        logging.error('Failed to get build info for build %d.', build_id)
        return None, None

    if (build.input.gitiles_commit.host !=
            projects.GERRIT_PROJECTS[project]['gitiles-host']
            or build.input.gitiles_commit.project !=
            projects.GERRIT_PROJECTS[project]['name']):
        logging.warning('Unexpected gitiles project for build: %r', build_id)
        return None, None

    context = Context(luci_project_name=project,
                      gitiles_host=build.input.gitiles_commit.host,
                      gitiles_project=build.input.gitiles_commit.project,
                      gitiles_ref=build.input.gitiles_commit.ref,
                      gitiles_id=build.input.gitiles_commit.id)
    return build, context
  def testBackfillIfSkippedAnalyses(self, mock_trigger_new_analysis,
                                    mock_get_failures, *_):
    first_failed_build_id = 8000000000128
    first_failure = TestFailure.Create(
        ndb.Key(LuciFailedBuild, first_failed_build_id),
        self.test_step_name,
        'test8',
        first_failed_build_id=first_failed_build_id,
        failure_group_build_id=first_failed_build_id,
        properties={'needs_bisection': False})
    first_failure.put()

    current_build_id = 8000000000123
    test_failure = TestFailure.Create(
        ndb.Key(LuciFailedBuild, current_build_id),
        self.test_step_name,
        'test8',
        first_failed_build_id=first_failed_build_id,
        failure_group_build_id=first_failed_build_id,
        merged_failure_key=first_failure.key)
    test_failure.put()

    mock_get_failures.return_value = {first_failed_build_id: [first_failure]}

    context = Context(
        luci_project_name='chromeos',
        gitiles_host='gitiles.host.com',
        gitiles_project='project/name',
        gitiles_ref='ref/heads/master',
        gitiles_id='git_sha_123')
    build = Build(id=current_build_id)
    test_analysis.BackfillIfSkippedAnalyses(context, build)

    mock_trigger_new_analysis.assert_called_once_with(
        'ChromeOSProjectAPI', 'prev_context', 'prev_build', [first_failure])
Exemple #6
0
    def testBisectGitilesCommitGetCulpritCommit(self):
        gitiles_host = 'gitiles.host.com'
        gitiles_project = 'project/name'
        gitiles_ref = 'ref/heads/master'
        left_bound_gitiles_id = '100'
        right_bound_gitiles_id = '110'

        context = Context(luci_project_name='chromium',
                          gitiles_project=gitiles_project,
                          gitiles_host=gitiles_host,
                          gitiles_ref=gitiles_ref,
                          gitiles_id=right_bound_gitiles_id)

        left_bound_commit = self._CreateGitilesCommit(left_bound_gitiles_id,
                                                      109)

        right_bound_commit = self._CreateGitilesCommit(right_bound_gitiles_id,
                                                       110)

        revisions = {n: str(n) for n in xrange(100, 110)}

        bisect_commit, culprit_commit = analysis_util.BisectGitilesCommit(
            context, left_bound_commit, right_bound_commit, revisions)

        self.assertIsNone(bisect_commit)
        self.assertEqual(110, culprit_commit.commit_position)
Exemple #7
0
 def setUp(self):
     super(APITest, self).setUp()
     self.context = Context(luci_project_name='project',
                            gitiles_host='gitiles.host.com',
                            gitiles_project='project/name',
                            gitiles_ref='ref/heads/master',
                            gitiles_id='git_sha')
Exemple #8
0
    def testGetRepoUrlFromContext(self):
        context = Context(luci_project_name='chromium',
                          gitiles_host='gitiles.host.com',
                          gitiles_project='project/name',
                          gitiles_ref='ref/heads/master',
                          gitiles_id='git_sha')

        self.assertEqual('https://gitiles.host.com/project/name.git',
                         git.GetRepoUrlFromContext(context))
Exemple #9
0
def GetRepoUrlFromV2Build(build):
    """Constructs repo url from a build's info.

  Args:
    build (build_pb2.Build): Info of a build.

  Returns:
    (str): repo url.
  """
    context = Context(luci_project_name=build.builder.project,
                      gitiles_host=build.input.gitiles_commit.host,
                      gitiles_project=build.input.gitiles_commit.project,
                      gitiles_ref=build.input.gitiles_commit.ref,
                      gitiles_id=build.input.gitiles_commit.id)
    return GetRepoUrlFromContext(context)
Exemple #10
0
 def testValidFailedBuild(self, mocked_OnBuildFailure, mocked_GetV2Build,
                          *_):
     build = Build()
     build.input.gitiles_commit.host = 'gitiles.host.com'
     build.input.gitiles_commit.project = 'project/name'
     build.input.gitiles_commit.ref = 'ref/heads/master'
     build.input.gitiles_commit.id = 'git_sha'
     mocked_GetV2Build.return_value = build
     self.assertTrue(
         api.OnBuildCompletion('project', 'ci', 'builder', 123, 'FAILURE'))
     mocked_GetV2Build.assert_called_once_with(
         123, fields=FieldMask(paths=['*']))
     mocked_OnBuildFailure.assert_called_once_with(
         Context(luci_project_name='project',
                 gitiles_host='gitiles.host.com',
                 gitiles_project='project/name',
                 gitiles_ref='ref/heads/master',
                 gitiles_id='git_sha'), build)
Exemple #11
0
  def testSaveFailedBuild(self, _):
    builder = BuilderID(project='chromium', bucket='try', builder='linux-rel')
    build = Build(
        id=87654321, builder=builder, number=123, status=common_pb2.FAILURE)
    build.create_time.FromDatetime(datetime(2019, 4, 9))
    build.start_time.FromDatetime(datetime(2019, 4, 9, 0, 1))
    build.end_time.FromDatetime(datetime(2019, 4, 9, 1))

    context = Context(
        luci_project_name='project',
        gitiles_host='gitiles.host.com',
        gitiles_project='project/name',
        gitiles_ref='ref/heads/master',
        gitiles_id='git_sha')

    build_entity = luci_build.SaveFailedBuild(context, build,
                                              StepTypeEnum.COMPILE)

    self.assertIsNotNone(build_entity)
    def setUp(self):
        super(CompileAnalysisAPITest, self).setUp()
        self.build_id = 8000000000123
        self.build_number = 123
        self.builder = BuilderID(project='chromium',
                                 bucket='ci',
                                 builder='Linux Tests')
        self.build = self._MockBuild(self.build_id, self.build_number,
                                     'git_sha_123')
        self.rerun_builder = BuilderID(project='chromium',
                                       bucket='try',
                                       builder='findit_variables')

        self.context = Context(luci_project_name='chromium',
                               gitiles_host='gitiles.host.com',
                               gitiles_project='project/name',
                               gitiles_ref='ref/heads/master',
                               gitiles_id='git_sha_123')

        self.build_entity = LuciFailedBuild.Create(
            luci_project=self.build.builder.project,
            luci_bucket=self.build.builder.bucket,
            luci_builder=self.build.builder.builder,
            build_id=self.build.id,
            legacy_build_number=self.build.number,
            gitiles_host=self.context.gitiles_host,
            gitiles_project=self.context.gitiles_project,
            gitiles_ref=self.context.gitiles_ref,
            gitiles_id=self.context.gitiles_id,
            commit_position=123,
            status=self.build.status,
            create_time=self.build.create_time.ToDatetime(),
            start_time=self.build.start_time.ToDatetime(),
            end_time=self.build.end_time.ToDatetime(),
            build_failure_type=StepTypeEnum.COMPILE)
        self.build_entity.put()

        self.analysis_api = CompileAnalysisAPI()

        self.compile_failure = self.analysis_api._CreateFailure(
            self.build_entity.key, 'compile', self.build_id, 8000000000122,
            None, frozenset(['a.o']), None)
        self.compile_failure.put()
Exemple #13
0
 def testOnRerunBuildCompletion(self, mocked_OnRerunBuildCompletion,
                                mocked_GetV2Build, *_):
     build = Build()
     build.created_by = 'user:{}'.format(DEFAULT_SERVICE_ACCOUNT)
     build.input.gitiles_commit.host = 'gitiles.host.com'
     build.input.gitiles_commit.project = 'project/name'
     build.input.gitiles_commit.ref = 'ref/heads/master'
     build.input.gitiles_commit.id = 'git_sha'
     mocked_GetV2Build.return_value = build
     self.assertTrue(
         api.OnBuildCompletion('project', 'ci', 'r_builder', 123,
                               'SUCCESS'))
     mocked_GetV2Build.assert_called_once_with(
         123, fields=FieldMask(paths=['*']))
     mocked_OnRerunBuildCompletion.assert_called_once_with(
         Context(luci_project_name='project',
                 gitiles_host='gitiles.host.com',
                 gitiles_project='project/name',
                 gitiles_ref='ref/heads/master',
                 gitiles_id='git_sha'), build)
Exemple #14
0
    def setUp(self):
        super(PreCompileAnalysisTest, self).setUp()
        self.build_id = 8000000000123
        self.build_number = 123
        self.builder = BuilderID(project='chromium',
                                 bucket='ci',
                                 builder='Linux Tests')
        self.build = self._MockBuild(self.build_id, self.build_number,
                                     'git_sha_123')

        self.context = Context(luci_project_name='chromium',
                               gitiles_host='gitiles.host.com',
                               gitiles_project='project/name',
                               gitiles_ref='ref/heads/master',
                               gitiles_id='git_sha_123')

        self.build_info = {
            'id': 8000000000123,
            'number': self.build_number,
            'commit_id': 'git_sha_123'
        }
Exemple #15
0
  def testTriggerAnalysisForPreviousFailuresNoNeeded(
      self, mock_trigger_new_analysis, mock_get_failures):
    current_build_id = 8000000000123
    test_failure = TestFailure.Create(
        ndb.Key(LuciFailedBuild, current_build_id),
        self.test_step_name,
        'test8',
        first_failed_build_id=current_build_id,
        failure_group_build_id=current_build_id)
    test_failure.put()

    mock_get_failures.return_value = {}

    context = Context(
        luci_project_name='chromeos',
        gitiles_host='gitiles.host.com',
        gitiles_project='project/name',
        gitiles_ref='ref/heads/master',
        gitiles_id='git_sha_123')
    build = Build(id=current_build_id)
    test_analysis.BackfillIfSkippedAnalyses(context, build)

    self.assertFalse(mock_trigger_new_analysis.called)
    def testGetFailedStepsInBuild(self):
        build_id = 8000000000123
        build_number = 123
        builder = BuilderID(project='chromium',
                            bucket='try',
                            builder='linux-rel')
        build = Build(id=build_id,
                      builder=builder,
                      number=build_number,
                      status=common_pb2.FAILURE)
        step1 = Step(name='s1', status=common_pb2.SUCCESS)
        step2 = Step(name='compile', status=common_pb2.FAILURE)
        build.steps.extend([step1, step2])

        context = Context(luci_project_name='chromium',
                          gitiles_host='gitiles.host.com',
                          gitiles_project='project/name',
                          gitiles_ref='ref/heads/master',
                          gitiles_id='git_sha')

        failed_steps = build_util.GetFailedStepsInBuild(context, build)
        self.assertEqual(1, len(failed_steps))
        self.assertEqual('compile', failed_steps[0][0].name)
        self.assertEqual(StepTypeEnum.COMPILE, failed_steps[0][1])
Exemple #17
0
 def testAnalyzeCompileFailureBailoutChromium(self):
     context = Context(luci_project_name='chromium')
     self.assertFalse(compile_api.AnalyzeCompileFailure(
         context, None, None))
Exemple #18
0
 def testAnalyzeCompileFailureBailoutUnsupportedProject(self):
     context = Context(luci_project_name='unsupported')
     self.assertFalse(compile_api.AnalyzeCompileFailure(
         context, None, None))
Exemple #19
0
 def testAnalyzeTestFailureBailoutChromium(self):
   context = Context(luci_project_name='chromium')
   self.assertFalse(test_analysis.AnalyzeTestFailure(context, None, None))
Exemple #20
0
    def setUp(self):
        super(CompileFailureRerunAnalysisTest, self).setUp()
        self.build_id = 8000000000123
        self.build_number = 123
        self.builder = BuilderID(project='chromium',
                                 bucket='ci',
                                 builder='linux-rel')
        self.build = Build(id=self.build_id,
                           builder=self.builder,
                           number=self.build_number,
                           status=common_pb2.FAILURE)
        self.build.input.gitiles_commit.host = 'gitiles.host.com'
        self.build.input.gitiles_commit.project = 'project/name'
        self.build.input.gitiles_commit.ref = 'ref/heads/master'
        self.build.input.gitiles_commit.id = 'git_sha_123'
        self.build.create_time.FromDatetime(datetime(2019, 4, 9))
        self.build.start_time.FromDatetime(datetime(2019, 4, 9, 0, 1))
        self.build.end_time.FromDatetime(datetime(2019, 4, 9, 1))

        self.context = Context(luci_project_name='chromium',
                               gitiles_host='gitiles.host.com',
                               gitiles_project='project/name',
                               gitiles_ref='ref/heads/master',
                               gitiles_id='git_sha')

        build_entity = LuciFailedBuild.Create(
            luci_project=self.context.luci_project_name,
            luci_bucket=self.build.builder.bucket,
            luci_builder=self.build.builder.builder,
            build_id=self.build_id,
            legacy_build_number=self.build_number,
            gitiles_host=self.context.gitiles_host,
            gitiles_project=self.context.gitiles_project,
            gitiles_ref=self.context.gitiles_ref,
            gitiles_id=self.context.gitiles_id,
            commit_position=6000005,
            status=20,
            create_time=datetime(2019, 3, 28),
            start_time=datetime(2019, 3, 28, 0, 1),
            end_time=datetime(2019, 3, 28, 1),
            build_failure_type=StepTypeEnum.COMPILE)
        build_entity.put()

        self.compile_failure = CompileFailure.Create(
            failed_build_key=build_entity.key,
            step_ui_name='compile',
            output_targets=['a.o'],
            first_failed_build_id=self.build_id,
            failure_group_build_id=None)
        self.compile_failure.put()

        self.analysis = CompileFailureAnalysis.Create(
            luci_project=self.context.luci_project_name,
            luci_bucket=self.build.builder.bucket,
            luci_builder=self.build.builder.builder,
            build_id=self.build_id,
            gitiles_host=self.context.gitiles_host,
            gitiles_project=self.context.gitiles_project,
            gitiles_ref=self.context.gitiles_ref,
            last_passed_gitiles_id='left_sha',
            last_passed_commit_position=6000000,
            first_failed_gitiles_id=self.context.gitiles_id,
            first_failed_commit_position=6000005,
            rerun_builder_id='chromium/findit/findit-variables',
            compile_failure_keys=[self.compile_failure.key])
        self.analysis.Save()