Projet

Général

Profil

0001-oxyd-use-self.requests-to-increase-logging-21464.patch

Nicolas Roche, 03 octobre 2019 16:22

Télécharger (6,33 ko)

Voir les différences:

Subject: [PATCH] oxyd: use self.requests to increase logging (#21464)

 passerelle/apps/choosit/models.py |  2 +-
 passerelle/apps/mobyt/models.py   |  2 +-
 passerelle/apps/oxyd/models.py    |  2 +-
 tests/test_api_access.py          | 49 +++++++++++++++++++++++++------
 tests/utils.py                    |  4 +--
 5 files changed, 45 insertions(+), 14 deletions(-)
passerelle/apps/choosit/models.py
91 91
            }
92 92
            data = {'data': json.dumps(params)}
93 93
            try:
94
                r = requests.post(self.URL, data=data)
94
                r = self.requests.post(self.URL, data=data)
95 95
            except requests.RequestException as e:
96 96
                results.append('Choosit error: %s' % e)
97 97
            else:
passerelle/apps/mobyt/models.py
65 65
            'qty': self.quality,
66 66
        }
67 67
        try:
68
            r = requests.post(self.URL, data=params)
68
            r = self.requests.post(self.URL, data=params)
69 69
        except requests.RequestException, e:
70 70
            raise APIError('MobyT error: POST failed, %s' % e)
71 71
        if r.content[:2] != "OK":
passerelle/apps/oxyd/models.py
67 67
                'flash': '0',
68 68
            }
69 69
            try:
70
                r = requests.post(self.URL, params)
70
                r = self.requests.post(self.URL, params)
71 71
            except requests.RequestException as e:
72 72
                results.append('OXYD error: POST failed, %s' % e)
73 73
            else:
tests/test_api_access.py
6 6
from django.core.urlresolvers import reverse
7 7

  
8 8
import pytest
9
import utils
9 10

  
10 11
from django.test import override_settings
11 12

  
......
184 185
    assert resp.json['err'] == 1
185 186
    assert resp.json['err_desc'] == 'Payload error: missing "message" in JSON payload'
186 187

  
187
def test_logged_request_max_size(app, oxyd, settings):
188
def test_logged_requests_and_responses_max_size(app, oxyd, settings):
188 189
    endpoint_url = reverse('generic-endpoint',
189 190
            kwargs={'connector': 'oxyd', 'slug': oxyd.slug, 'endpoint': 'send'})
190 191
    api = ApiUser.objects.create(username='public',
......
197 198
                    resource_type=obj_type,
198 199
                    resource_pk=oxyd.pk,
199 200
    )
200
    resp = app.post_json(endpoint_url, params={'foo': 'bar'})
201
    assert ResourceLog.objects.all()[0].message[-9:] == '"bar"}\') '
202

  
203
    # for empty payload the connector returns an APIError with
204
    assert 'Error occurred' in ResourceLog.objects.all()[1].message
201
    payload = {
202
        'message': 'hello',
203
        'from': '+33699999999',
204
        'to': ['+33688888888', '+33677777777'],
205
    }
206
    headers = {'Content-Type': 'foo/bar'}
207
    response = oxyd.TEST_DEFAULTS['test_vectors'][0]
208
    oxyd.set_log_level('DEBUG')  # log request payload and response headers/content
209
    settings.LOGGED_CONTENT_TYPES_MESSAGES = 'foo/bar'  # response content to log
210

  
211
    assert settings.LOGGED_REQUEST_MAX_SIZE == 5000
212
    assert settings.LOGGED_RESPONSES_MAX_SIZE == 4096
213
    with utils.mock_url(oxyd.URL, response, headers=headers):
214
        result = app.post_json(endpoint_url, params=payload)
215
    assert len(ResourceLog.objects.all()) == 4
216

  
217
    # initial POST query
218
    assert len(ResourceLog.objects.all()[0].extra['connector_payload']) == 84
219

  
220
    # connector POST queries
221
    assert len(ResourceLog.objects.all()[1].extra['request_payload']) == 57
222
    assert len(ResourceLog.objects.all()[2].extra['request_payload']) == 57
223
    assert len(ResourceLog.objects.all()[1].extra['response_content']) == 244
224
    assert len(ResourceLog.objects.all()[2].extra['response_content']) == 244
225

  
226
    # connector reply
227
    assert len(ResourceLog.objects.all()[3].extra['body']) == 86
205 228

  
206 229
    # troncate logs
207
    settings.LOGGED_REQUEST_MAX_SIZE = 6
208
    resp = app.post_json(endpoint_url, params={'foo': 'bar'})
209
    assert ResourceLog.objects.all()[2].message[-8:] == '"foo"\') '
230
    settings.LOGGED_REQUEST_MAX_SIZE = 10
231
    settings.LOGGED_RESPONSES_MAX_SIZE = 20
232
    with utils.mock_url(oxyd.URL, response, headers=headers):
233
        result = app.post_json(endpoint_url, params=payload)
234
    assert len(ResourceLog.objects.all()) == 8
235
    assert len(ResourceLog.objects.all()[4].extra['connector_payload']) == 10
236
    assert len(ResourceLog.objects.all()[5].extra['request_payload']) == 12
237
    assert len(ResourceLog.objects.all()[6].extra['request_payload']) == 12
238
    assert len(ResourceLog.objects.all()[5].extra['response_content']) == 22
239
    assert len(ResourceLog.objects.all()[6].extra['response_content']) == 22
240
    assert len(ResourceLog.objects.all()[7].extra['body']) == 12
tests/utils.py
30 30
        return json.loads(self.content)
31 31

  
32 32

  
33
def mock_url(url=None, response='', status_code=200):
33
def mock_url(url=None, response='', status_code=200, headers=None):
34 34
    urlmatch_kwargs = {}
35 35
    if url:
36 36
        parsed = urlparse.urlparse(url)
......
44 44

  
45 45
    @httmock.urlmatch(**urlmatch_kwargs)
46 46
    def mocked(url, request):
47
        return httmock.response(status_code, response, request=request)
47
        return httmock.response(status_code, response, headers, request=request)
48 48
    return httmock.HTTMock(mocked)
49 49

  
50 50

  
51
-