0001-atos_genesys-add-a-configurable-timeout-and-report-t.patch
passerelle/apps/atos_genesys/migrations/0005_resource_http_timeout.py | ||
---|---|---|
1 |
# Generated by Django 2.2.28 on 2022-05-25 11:23 |
|
2 | ||
3 |
from django.db import migrations, models |
|
4 | ||
5 | ||
6 |
class Migration(migrations.Migration): |
|
7 | ||
8 |
dependencies = [ |
|
9 |
('atos_genesys', '0004_text_to_jsonb'), |
|
10 |
] |
|
11 | ||
12 |
operations = [ |
|
13 |
migrations.AddField( |
|
14 |
model_name='resource', |
|
15 |
name='http_timeout', |
|
16 |
field=models.PositiveIntegerField(default=60, verbose_name='HTTP timeout'), |
|
17 |
), |
|
18 |
] |
passerelle/apps/atos_genesys/models.py | ||
---|---|---|
38 | 38 | |
39 | 39 |
webservice_base_url = models.URLField(_('Webservice Base URL')) |
40 | 40 |
cod_rgp = models.CharField(_('Code RGP'), max_length=64, default='RGP_PUB') |
41 |
http_timeout = models.PositiveIntegerField(_('HTTP timeout'), default=60) |
|
41 | 42 | |
42 | 43 |
class Meta: |
43 | 44 |
verbose_name = _('ATOS Genesys') |
... | ... | |
68 | 69 |
return rows |
69 | 70 | |
70 | 71 |
def _xml_request_base(self, url, *args, **kwargs): |
72 |
kwargs.setdefault('timeout', self.http_timeout) |
|
71 | 73 |
try: |
72 | 74 |
response = self.requests.get(url, *args, **kwargs) |
73 | 75 |
response.raise_for_status() |
76 |
except (requests.ConnectionError, requests.Timeout) as e: |
|
77 |
raise APIError('genesys is down', data={'exception': str(e)}) |
|
74 | 78 |
except requests.RequestException as e: |
75 | 79 |
raise APIError('HTTP request failed', data={'exception': str(e)}) |
76 | 80 |
try: |
tests/test_atos_genesys.py | ||
---|---|---|
2 | 2 | |
3 | 3 |
import os |
4 | 4 | |
5 |
import mock |
|
5 | 6 |
import pytest |
7 |
import requests |
|
6 | 8 |
from django.utils.http import urlencode |
7 | 9 | |
8 | 10 |
import tests.utils |
... | ... | |
216 | 218 |
assert response.json['data']['text'] == '%s - John DOE' % link2.id_per |
217 | 219 | |
218 | 220 | |
221 |
def test_ws_dossiers_timeout_error(app, genesys): |
|
222 |
Link.objects.create(resource=genesys, name_id='zob', id_per='1234') |
|
223 |
url = tests.utils.generic_endpoint_url('atos-genesys', 'dossiers', slug=genesys.slug) |
|
224 |
with mock.patch('passerelle.utils.Request.request') as request: |
|
225 |
request.side_effect = requests.Timeout |
|
226 |
response = app.get( |
|
227 |
url |
|
228 |
+ '?' |
|
229 |
+ urlencode( |
|
230 |
{ |
|
231 |
'NameID': 'zob', |
|
232 |
} |
|
233 |
) |
|
234 |
) |
|
235 |
assert response.json['err_desc'] == 'genesys is down' |
|
236 | ||
237 | ||
219 | 238 |
def test_row_locked_cache(genesys, freezer): |
220 | 239 |
import time |
221 | 240 | |
222 |
- |