Exemplo n.º 1
0
    def test_problem_penalized(self):
        """Ensure that we penalize a target for having problems."""
        data_types.FuzzTarget(engine='libFuzzer',
                              binary='problematic_fuzzer',
                              project='test-project').put()
        data_types.FuzzTargetJob(
            fuzz_target_name='libFuzzer_problematic_fuzzer',
            engine='libFuzzer',
            job='dummy_job',
            weight=0.1).put()

        self.mock._query_helper.return_value = [
            {
                'fuzzer': 'libFuzzer_problematic_fuzzer',
                'job': 'dummy_job',
                'new_weight': 0.25,
            },
        ]

        fuzzer_and_job_weights.update_target_weights_for_engine(
            None, 'libFuzzer', [_TEST_SPECIFICATION])
        expected_match = fuzzer_and_job_weights.SpecificationMatch(
            new_weight=0.25, reason=_TEST_SPECIFICATION.reason)
        self.mock.update_weight_for_target.assert_called_with(
            'libFuzzer_problematic_fuzzer', 'dummy_job', expected_match)
Exemplo n.º 2
0
    def test_new_fuzzer(self):
        """Tests to ensure that the new fuzzer query works properly."""
        data_types.FuzzTarget(engine='libFuzzer',
                              binary='old_fuzzer',
                              project='test-project').put()
        data_types.FuzzTargetJob(fuzz_target_name='libFuzzer_old_fuzzer',
                                 engine='libFuzzer',
                                 job='dummy_job',
                                 weight=1.0).put()

        data_types.FuzzTarget(engine='libFuzzer',
                              binary='new_fuzzer',
                              project='test-project').put()
        data_types.FuzzTargetJob(fuzz_target_name='libFuzzer_new_fuzzer',
                                 engine='libFuzzer',
                                 job='dummy_job',
                                 weight=1.0).put()

        self.mock._query_helper.return_value = [
            {
                'fuzzer': 'libFuzzer_new_fuzzer',
                'job': 'dummy_job',
                'new_weight': 5.0,
                'first_time': '<irrelavent for test>',
            },
        ]

        fuzzer_and_job_weights.update_target_weights_for_engine(
            None, 'libFuzzer',
            [fuzzer_and_job_weights.NEW_FUZZER_SPECIFICATION])
        expected_match = fuzzer_and_job_weights.SpecificationMatch(
            new_weight=5.0,
            reason=fuzzer_and_job_weights.NEW_FUZZER_SPECIFICATION.reason)
        self.mock.update_weight_for_target.assert_called_with(
            'libFuzzer_new_fuzzer', 'dummy_job', expected_match)
Exemplo n.º 3
0
    def test_weight_increase(self):
        """Ensure that weight increases are possible."""
        data_types.FuzzTarget(engine='libFuzzer',
                              binary='very_good_fuzzer',
                              project='test-project').put()
        data_types.FuzzTargetJob(fuzz_target_name='libFuzzer_very_good_fuzzer',
                                 engine='libFuzzer',
                                 job='asan',
                                 weight=1.0).put()

        # Report that the issue is corrected.
        self.mock._query_helper.return_value = [
            {
                'fuzzer': 'libFuzzer_very_good_fuzzer',
                'job': 'asan',
                'new_weight': 2.00,
            },
        ]

        specification = fuzzer_and_job_weights.QuerySpecification(
            query_format='ignored',
            formatter=fuzzer_and_job_weights._past_day_formatter,
            reason='increase weight for test')
        match = fuzzer_and_job_weights.SpecificationMatch(
            new_weight=2.0, reason=specification.reason)
        fuzzer_and_job_weights.update_target_weights_for_engine(
            None, 'libFuzzer', [specification])
        self.mock.update_weight_for_target.assert_called_with(
            'libFuzzer_very_good_fuzzer', 'asan', match)
Exemplo n.º 4
0
    def test_weight_increase(self):
        """Ensure that weight increases are possible."""
        data_types.FuzzTarget(engine="libFuzzer",
                              binary="very_good_fuzzer",
                              project="test-project").put()
        data_types.FuzzTargetJob(
            fuzz_target_name="libFuzzer_very_good_fuzzer",
            engine="libFuzzer",
            job="asan",
            weight=1.0,
        ).put()

        # Report that the issue is corrected.
        self.mock._query_helper.return_value = [{
            "fuzzer": "libFuzzer_very_good_fuzzer",
            "job": "asan",
            "new_weight": 2.00
        }]

        specification = fuzzer_and_job_weights.QuerySpecification(
            query_format="ignored",
            formatter=fuzzer_and_job_weights._past_day_formatter,
            reason="increase weight for test",
        )
        match = fuzzer_and_job_weights.SpecificationMatch(
            new_weight=2.0, reason=specification.reason)
        fuzzer_and_job_weights.update_target_weights_for_engine(
            None, "libFuzzer", [specification])
        self.mock.update_weight_for_target.assert_called_with(
            "libFuzzer_very_good_fuzzer", "asan", match)
Exemplo n.º 5
0
    def test_reported_fuzzer_has_weight_restored(self):
        """Ensure that a target reported fixed has its weight restored."""
        data_types.FuzzTarget(engine="libFuzzer",
                              binary="good_fuzzer",
                              project="test-project").put()
        data_types.FuzzTargetJob(
            fuzz_target_name="libFuzzer_good_fuzzer",
            engine="libFuzzer",
            job="asan",
            weight=0.1,
        ).put()

        # Report that the issue is corrected.
        self.mock._query_helper.return_value = [{
            "fuzzer": "libFuzzer_good_fuzzer",
            "job": "asan",
            "new_weight": 1.00
        }]

        fuzzer_and_job_weights.update_target_weights_for_engine(
            None, "libFuzzer", [_TEST_SPECIFICATION])
        self.mock.update_weight_for_target.assert_called_with(
            "libFuzzer_good_fuzzer",
            "asan",
            fuzzer_and_job_weights.RESTORE_DEFAULT_MATCH,
        )
Exemplo n.º 6
0
    def test_target_ignored_if_not_ran(self):
        """Ensure that we don't reset a target weight if it did not run."""
        data_types.FuzzTarget(engine='libFuzzer',
                              binary='good_fuzzer',
                              project='test-project').put()
        data_types.FuzzTargetJob(fuzz_target_name='libFuzzer_good_fuzzer',
                                 engine='libFuzzer',
                                 job='asan',
                                 weight=0.1).put()

        # Do not report any runs.
        self.mock._query_helper.return_value = []

        fuzzer_and_job_weights.update_target_weights_for_engine(
            None, 'libFuzzer', [_TEST_SPECIFICATION])
        self.assertFalse(self.mock.update_weight_for_target.called)
Exemplo n.º 7
0
    def test_new_fuzzer(self):
        """Tests to ensure that the new fuzzer query works properly."""
        data_types.FuzzTarget(engine="libFuzzer",
                              binary="old_fuzzer",
                              project="test-project").put()
        data_types.FuzzTargetJob(
            fuzz_target_name="libFuzzer_old_fuzzer",
            engine="libFuzzer",
            job="dummy_job",
            weight=1.0,
        ).put()

        data_types.FuzzTarget(engine="libFuzzer",
                              binary="new_fuzzer",
                              project="test-project").put()
        data_types.FuzzTargetJob(
            fuzz_target_name="libFuzzer_new_fuzzer",
            engine="libFuzzer",
            job="dummy_job",
            weight=1.0,
        ).put()

        self.mock._query_helper.return_value = [{
            "fuzzer":
            "libFuzzer_new_fuzzer",
            "job":
            "dummy_job",
            "new_weight":
            5.0,
            "first_time":
            "<irrelavent for test>",
        }]

        fuzzer_and_job_weights.update_target_weights_for_engine(
            None, "libFuzzer",
            [fuzzer_and_job_weights.NEW_FUZZER_SPECIFICATION])
        expected_match = fuzzer_and_job_weights.SpecificationMatch(
            new_weight=5.0,
            reason=fuzzer_and_job_weights.NEW_FUZZER_SPECIFICATION.reason,
        )
        self.mock.update_weight_for_target.assert_called_with(
            "libFuzzer_new_fuzzer", "dummy_job", expected_match)
Exemplo n.º 8
0
    def test_reported_fuzzer_has_weight_restored(self):
        """Ensure that a target reported fixed has its weight restored."""
        data_types.FuzzTarget(engine='libFuzzer',
                              binary='good_fuzzer',
                              project='test-project').put()
        data_types.FuzzTargetJob(fuzz_target_name='libFuzzer_good_fuzzer',
                                 engine='libFuzzer',
                                 job='asan',
                                 weight=0.1).put()

        # Report that the issue is corrected.
        self.mock._query_helper.return_value = [
            {
                'fuzzer': 'libFuzzer_good_fuzzer',
                'job': 'asan',
                'new_weight': 1.00,
            },
        ]

        fuzzer_and_job_weights.update_target_weights_for_engine(
            None, 'libFuzzer', [_TEST_SPECIFICATION])
        self.mock.update_weight_for_target.assert_called_with(
            'libFuzzer_good_fuzzer', 'asan',
            fuzzer_and_job_weights.RESTORE_DEFAULT_MATCH)
Exemplo n.º 9
0
    def test_problem_penalized(self):
        """Ensure that we penalize a target for having problems."""
        data_types.FuzzTarget(engine="libFuzzer",
                              binary="problematic_fuzzer",
                              project="test-project").put()
        data_types.FuzzTargetJob(
            fuzz_target_name="libFuzzer_problematic_fuzzer",
            engine="libFuzzer",
            job="dummy_job",
            weight=0.1,
        ).put()

        self.mock._query_helper.return_value = [{
            "fuzzer": "libFuzzer_problematic_fuzzer",
            "job": "dummy_job",
            "new_weight": 0.25,
        }]

        fuzzer_and_job_weights.update_target_weights_for_engine(
            None, "libFuzzer", [_TEST_SPECIFICATION])
        expected_match = fuzzer_and_job_weights.SpecificationMatch(
            new_weight=0.25, reason=_TEST_SPECIFICATION.reason)
        self.mock.update_weight_for_target.assert_called_with(
            "libFuzzer_problematic_fuzzer", "dummy_job", expected_match)