Projet

Général

Profil

0001-atos_genesys-add-a-configurable-timeout-and-report-t.patch

Benjamin Dauvergne, 25 mai 2022 13:35

Télécharger (3,54 ko)

Voir les différences:

Subject: [PATCH] atos_genesys: add a configurable timeout and report timeout
 errors (#65701)

 .../migrations/0005_resource_http_timeout.py  | 18 ++++++++++++++++++
 passerelle/apps/atos_genesys/models.py        |  4 ++++
 tests/test_atos_genesys.py                    | 19 +++++++++++++++++++
 3 files changed, 41 insertions(+)
 create mode 100644 passerelle/apps/atos_genesys/migrations/0005_resource_http_timeout.py
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
-