Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/api/views/test_stat.py
# Copyright (C) 2015-2019 The Software Heritage developers | # Copyright (C) 2015-2019 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU Affero General Public License version 3, or any later version | # License: GNU Affero General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
from rest_framework.test import APITestCase | |||||
from unittest.mock import patch | |||||
from swh.storage.exc import StorageDBError, StorageAPIError | from swh.storage.exc import StorageDBError, StorageAPIError | ||||
from swh.web.common.exc import BadInputExc | from swh.web.common.exc import BadInputExc | ||||
from swh.web.common.utils import reverse | from swh.web.common.utils import reverse | ||||
from swh.web.tests.testcase import WebTestCase | |||||
class StatApiTestCase(WebTestCase, APITestCase): | |||||
@patch('swh.web.api.views.stat.service') | |||||
def test_api_1_stat_counters_raise_error(self, mock_service): | |||||
def test_api_1_stat_counters_raise_error(api_client, mocker): | |||||
mock_service = mocker.patch('swh.web.api.views.stat.service') | |||||
mock_service.stat_counters.side_effect = BadInputExc( | mock_service.stat_counters.side_effect = BadInputExc( | ||||
'voluntary error to check the bad request middleware.') | 'voluntary error to check the bad request middleware.') | ||||
url = reverse('api-1-stat-counters') | url = reverse('api-1-stat-counters') | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 400, rv.data) | assert rv.status_code == 400, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
self.assertEqual(rv.data, { | assert rv.data == { | ||||
'exception': 'BadInputExc', | 'exception': 'BadInputExc', | ||||
'reason': 'voluntary error to check the bad request middleware.'}) | 'reason': 'voluntary error to check the bad request middleware.'} | ||||
@patch('swh.web.api.views.stat.service') | |||||
def test_api_1_stat_counters_raise_from_db(self, mock_service): | |||||
def test_api_1_stat_counters_raise_from_db(api_client, mocker): | |||||
mock_service = mocker.patch('swh.web.api.views.stat.service') | |||||
mock_service.stat_counters.side_effect = StorageDBError( | mock_service.stat_counters.side_effect = StorageDBError( | ||||
'Storage exploded! Will be back online shortly!') | 'Storage exploded! Will be back online shortly!') | ||||
url = reverse('api-1-stat-counters') | url = reverse('api-1-stat-counters') | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 503, rv.data) | assert rv.status_code == 503, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
self.assertEqual(rv.data, { | assert rv.data == { | ||||
'exception': 'StorageDBError', | 'exception': 'StorageDBError', | ||||
'reason': | 'reason': | ||||
'An unexpected error occurred in the backend: ' | 'An unexpected error occurred in the backend: ' | ||||
'Storage exploded! Will be back online shortly!'}) | 'Storage exploded! Will be back online shortly!'} | ||||
@patch('swh.web.api.views.stat.service') | |||||
def test_api_1_stat_counters_raise_from_api(self, mock_service): | |||||
def test_api_1_stat_counters_raise_from_api(api_client, mocker): | |||||
mock_service = mocker.patch('swh.web.api.views.stat.service') | |||||
mock_service.stat_counters.side_effect = StorageAPIError( | mock_service.stat_counters.side_effect = StorageAPIError( | ||||
'Storage API dropped dead! Will resurrect from its ashes asap!' | 'Storage API dropped dead! Will resurrect from its ashes asap!' | ||||
) | ) | ||||
url = reverse('api-1-stat-counters') | url = reverse('api-1-stat-counters') | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 503, rv.data) | assert rv.status_code == 503, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
self.assertEqual(rv.data, { | assert rv.data == { | ||||
'exception': 'StorageAPIError', | 'exception': 'StorageAPIError', | ||||
'reason': | 'reason': | ||||
'An unexpected error occurred in the api backend: ' | 'An unexpected error occurred in the api backend: ' | ||||
'Storage API dropped dead! Will resurrect from its ashes asap!' | 'Storage API dropped dead! Will resurrect from its ashes asap!' | ||||
}) | } | ||||
def test_api_1_stat_counters(self): | |||||
def test_api_1_stat_counters(api_client, archive_data): | |||||
url = reverse('api-1-stat-counters') | url = reverse('api-1-stat-counters') | ||||
rv = self.client.get(url) | rv = api_client.get(url) | ||||
self.assertEqual(rv.status_code, 200, rv.data) | assert rv.status_code == 200, rv.data | ||||
self.assertEqual(rv['Content-Type'], 'application/json') | assert rv['Content-Type'] == 'application/json' | ||||
self.assertEqual(rv.data, self.storage.stat_counters()) | assert rv.data == archive_data.stat_counters() |