Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)