Ejemplo n.º 1
0
    def test_call_with_mocks(self, requests_mock, incr_mock, timer_mock):
        ml_results = {'some': 'results'}
        requests_mock.return_value = self.create_response(data=ml_results)
        assert len(ScannerResult.objects.all()) == self.default_results_count

        returned_results = call_mad_api(self.results, self.upload.pk)

        assert requests_mock.called
        requests_mock.assert_called_with(
            url=settings.MAD_API_URL,
            json={'scanners': {'customs': self.customs_result.results}},
            timeout=settings.MAD_API_TIMEOUT,
        )
        assert (
            len(ScannerResult.objects.all()) == self.default_results_count + 1
        )
        last_result = ScannerResult.objects.latest()
        assert last_result.upload == self.upload
        assert last_result.scanner == MAD
        assert last_result.results == ml_results
        assert returned_results == self.results[0]
        assert incr_mock.called
        assert incr_mock.call_count == 1
        incr_mock.assert_has_calls([mock.call('devhub.mad.success')])
        assert timer_mock.called
        timer_mock.assert_called_with('devhub.mad')
Ejemplo n.º 2
0
    def test_call_with_mocks(self, requests_mock, incr_mock, timer_mock):
        ml_results = {
            'ensemble': 0.56,
            'scanners': {'customs': {'score': 0.123}},
        }
        requests_mock.return_value = self.create_response(data=ml_results)
        assert len(ScannerResult.objects.all()) == self.default_results_count
        assert self.customs_result.score == -1.

        returned_results = call_mad_api(self.results, self.upload.pk)

        assert requests_mock.called
        requests_mock.assert_called_with(
            url=settings.MAD_API_URL,
            json={'scanners': {'customs': self.customs_result.results}},
            timeout=settings.MAD_API_TIMEOUT,
        )
        assert (
            len(ScannerResult.objects.all()) == self.default_results_count + 1
        )
        mad_result = ScannerResult.objects.latest()
        assert mad_result.upload == self.upload
        assert mad_result.scanner == MAD
        assert mad_result.results == ml_results
        assert returned_results == self.results[0]
        assert incr_mock.called
        assert incr_mock.call_count == 1
        incr_mock.assert_has_calls([mock.call('devhub.mad.success')])
        assert timer_mock.called
        timer_mock.assert_called_with('devhub.mad')
        # The customs and mad results should be updated with the scores
        # returned in the ML response.
        self.customs_result.refresh_from_db()
        assert self.customs_result.score == Decimal('0.123')
        assert mad_result.score == Decimal('0.56')
Ejemplo n.º 3
0
    def test_does_not_run_when_scan_map_is_small(self, requests_mock):
        self.create_switch('enable-mad', active=True)
        self.customs_result.update(results={'scanMap': {'a': 1}})

        returned_results = call_mad_api(self.results, self.upload.pk)

        assert not requests_mock.called
        assert returned_results == self.results[0]
Ejemplo n.º 4
0
    def test_does_not_run_when_results_contain_errors(self, requests_mock):
        self.create_switch('enable-mad', active=True)
        self.results[0].update({'errors': 1})

        returned_results = call_mad_api(self.results, self.upload.pk)

        assert not requests_mock.called
        assert returned_results == self.results[0]
Ejemplo n.º 5
0
    def test_does_not_run_when_other_results_have_errors(self, requests_mock):
        self.create_switch('enable-mad', active=True)
        self.results.append({**amo.VALIDATOR_SKELETON_EXCEPTION_WEBEXT})
        assert len(self.results) == 2

        returned_results = call_mad_api(self.results, self.upload.pk)

        assert not requests_mock.called
        assert returned_results == self.results[1]
Ejemplo n.º 6
0
    def test_skip_non_webextensions(self):
        upload = self.get_upload('search.xml')
        results = {
            **amo.VALIDATOR_SKELETON_RESULTS,
            'metadata': {'is_webextension': False},
        }

        returned_results = call_mad_api([results], upload.pk)

        assert len(ScannerResult.objects.all()) == self.default_results_count
        assert returned_results == results
Ejemplo n.º 7
0
    def test_handles_non_200_http_responses(self, requests_mock, incr_mock):
        requests_mock.return_value = self.create_response(
            status_code=504, data={'message': 'http timeout'})

        returned_results = call_mad_api(self.results, self.upload.pk)

        assert requests_mock.called
        assert len(ScannerResult.objects.all()) == self.default_results_count
        assert returned_results == self.results[0]
        assert incr_mock.called
        assert incr_mock.call_count == 1
        incr_mock.assert_has_calls([mock.call('devhub.mad.failure')])
Ejemplo n.º 8
0
    def test_handles_non_json_responses(self, requests_mock, incr_mock):
        response = mock.Mock(status_code=200)
        response.json.side_effect = ValueError('not json')
        requests_mock.return_value = response

        returned_results = call_mad_api(self.results, self.upload.pk)

        assert requests_mock.called
        assert len(ScannerResult.objects.all()) == self.default_results_count
        assert returned_results == self.results[0]
        assert incr_mock.called
        assert incr_mock.call_count == 1
        incr_mock.assert_has_calls([mock.call('devhub.mad.failure')])
Ejemplo n.º 9
0
    def test_does_not_run_when_switch_is_off(self, requests_mock):
        self.create_switch('enable-mad', active=False)

        call_mad_api(self.results, self.upload.pk)

        assert not requests_mock.called