def testUpdateCompileFailuresWithFirstFailureInfoPrevBuildInfraFailure( self, mock_prev_builds, mock_get_build): """Test for previous build failed with different steps.""" mock_step1 = Step() mock_step1.name = 'compile' mock_step1.status = common_pb2.INFRA_FAILURE build_122_id = 8000000000122 build_122 = Build(id=build_122_id, builder=self.builder, number=self.build_number - 1, status=common_pb2.FAILURE) build_122.steps.extend([mock_step1]) build_121_id = 8000000000121 build_121 = Build(id=build_121_id, builder=self.builder, number=self.build_number - 2, status=common_pb2.SUCCESS) build_121.input.gitiles_commit.id = 'git_sha_121' build_121_info = { 'id': build_121_id, 'number': self.build_number - 2, 'commit_id': 'git_sha_121' } mock_prev_builds.return_value = SearchBuildsResponse( builds=[build_122, build_121]) mock_get_build.return_value = build_122 detailed_compile_failures = { 'compile': { 'failures': { frozenset(['target1', 'target2']): { 'rule': 'CXX', 'first_failed_build': self.build_info, 'last_passed_build': None, }, }, 'first_failed_build': self.build_info, 'last_passed_build': None, }, } pre_compile_analysis.UpdateCompileFailuresWithFirstFailureInfo( self.context, self.build, detailed_compile_failures) expected_failures = { 'compile': { 'failures': { frozenset(['target1', 'target2']): { 'rule': 'CXX', 'first_failed_build': self.build_info, 'last_passed_build': build_121_info, }, }, 'first_failed_build': self.build_info, 'last_passed_build': build_121_info, }, } self.assertEqual(expected_failures, detailed_compile_failures)
def testUpdateCompileFailuresWithFirstFailureInfoDifferentFirstFailure( self, mock_prev_builds, mock_get_build, mock_prev_failures): """Test for targets in current build failed from different builds.""" mock_step = Step() mock_step.name = 'compile' mock_step.status = common_pb2.FAILURE build_122_id = 8000000000122 build_122 = Build(id=build_122_id, builder=self.builder, number=self.build_number - 1, status=common_pb2.FAILURE) build_122.steps.extend([mock_step]) build_122.input.gitiles_commit.id = 'git_sha_122' build_122_info = { 'id': build_122_id, 'number': self.build_number - 1, 'commit_id': 'git_sha_122' } mock_step1 = Step() mock_step1.name = 'compile' mock_step1.status = common_pb2.FAILURE build_121_id = 8000000000121 build_121 = Build(id=build_121_id, builder=self.builder, number=self.build_number - 2, status=common_pb2.FAILURE) build_121.steps.extend([mock_step1]) build_121.input.gitiles_commit.id = 'git_sha_121' build_121_info = { 'id': build_121_id, 'number': self.build_number - 2, 'commit_id': 'git_sha_121' } mock_step2 = Step() mock_step2.name = 'compile' mock_step2.status = common_pb2.FAILURE build_120_id = 8000000000121 build_120 = Build(id=build_120_id, builder=self.builder, number=self.build_number - 3, status=common_pb2.FAILURE) build_120.steps.extend([mock_step2]) build_120.input.gitiles_commit.id = 'git_sha_120' build_120_info = { 'id': build_120_id, 'number': self.build_number - 3, 'commit_id': 'git_sha_120' } mock_prev_builds.return_value = SearchBuildsResponse( builds=[build_122, build_121, build_120]) mock_get_build.side_effect = [build_122, build_121, build_120] # Failed compiling target3 but successfully compiled target1&2. failures_122 = { 'compile': { 'failures': { frozenset(['target3']): { 'rule': 'ACTION', 'first_failed_build': build_122_info, 'last_passed_build': None, }, }, 'first_failed_build': build_122_info, 'last_passed_build': None, }, } # Has the same failed targets as current build. failures_121 = { 'compile': { 'failures': { frozenset(['target3']): { 'rule': 'ACTION', 'first_failed_build': build_121_info, 'last_passed_build': None, }, frozenset(['target1', 'target2']): { 'rule': 'CXX', 'first_failed_build': build_121_info, 'last_passed_build': None, }, }, 'first_failed_build': build_121_info, 'last_passed_build': None, }, } # Failed compile step, but only different targets. failures_120 = { 'compile': { 'failures': { frozenset(['target4']): { 'rule': 'CC', 'first_failed_build': build_120_info, 'last_passed_build': None, }, }, 'first_failed_build': build_120_info, 'last_passed_build': None, }, } mock_prev_failures.side_effect = [ failures_122, failures_121, failures_120 ] detailed_compile_failures = { 'compile': { 'failures': { frozenset(['target1', 'target2']): { 'rule': 'CXX', 'first_failed_build': self.build_info, 'last_passed_build': None, }, frozenset(['target3']): { 'rule': 'ACTION', 'first_failed_build': self.build_info, 'last_passed_build': None, }, }, 'first_failed_build': self.build_info, 'last_passed_build': None, }, } pre_compile_analysis.UpdateCompileFailuresWithFirstFailureInfo( self.context, self.build, detailed_compile_failures) expected_failures = { 'compile': { 'failures': { frozenset(['target1', 'target2']): { 'rule': 'CXX', 'first_failed_build': self.build_info, 'last_passed_build': build_122_info, }, frozenset(['target3']): { 'rule': 'ACTION', 'first_failed_build': build_121_info, 'last_passed_build': build_120_info, }, }, 'first_failed_build': build_121_info, 'last_passed_build': build_120_info, }, } self.assertEqual(expected_failures, detailed_compile_failures)