Project

General

Profile

Bug #53697

échec de test_esirius.test_pre_request[xxx]

Added by Frédéric Péters 14 days ago. Updated 13 days ago.

Status:
Solution déployée
Priority:
Normal
Assignee:
Target version:
-
Start date:
03 May 2021
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
Yes

Description

Suite à #53594,

https://jenkins.entrouvert.org/job/passerelle/2126/

connector = <ESirius: >, secret_key = 'xxx'

    @pytest.mark.parametrize('secret_key', ['xxx', ''])
    def test_pre_request(connector, secret_key):
        @httmock.urlmatch(netloc='esirius.example.net', path='/an/uri/', method='GET')
        def esirius_mock(url, request):
            assert request.headers['Accept'] == 'application/json; charset=utf-8'
            assert bool(request.headers.get('token_info_caller')) == bool(secret_key)
            if secret_key:
                assert request.headers['token_info_caller'][:42] == b'f3G6sjRZETBam6vcdrAxmvJQTX5hh6OjZ8XlUO6SMo'
            return httmock.response(200)

        connector.secret_key = secret_key
        connector.save()
        with httmock.HTTMock(esirius_mock):
>           connector.request('an/uri/', method='get', params="somes")

tests/test_esirius.py:122: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
passerelle/apps/esirius/models.py:152: in request
    response = self.requests.request(method=method, url=url, headers=headers, params=params, json=json)
passerelle/utils/__init__.py:300: in request
    response = super(Request, self).request(method, url, **kwargs)
/tmp/tox-jenkins/passerelle/py3-django111-black-coverage/lib/python3.7/site-packages/requests/sessions.py:542: in request
    resp = self.send(prep, **send_kwargs)
passerelle/utils/__init__.py:317: in send
    response = super(Request, self).send(request, **kwargs)
/tmp/tox-jenkins/passerelle/py3-django111-black-coverage/lib/python3.7/site-packages/httmock.py:163: in _fake_send
    response = self.intercept(request, **kwargs)
/tmp/tox-jenkins/passerelle/py3-django111-black-coverage/lib/python3.7/site-packages/httmock.py:221: in intercept
    res = first_of(self.handlers, url, request)
/tmp/tox-jenkins/passerelle/py3-django111-black-coverage/lib/python3.7/site-packages/httmock.py:141: in first_of
    res = handler(*args, **kwargs)
/tmp/tox-jenkins/passerelle/py3-django111-black-coverage/lib/python3.7/site-packages/httmock.py:100: in inner
    return func(self_or_url, url_or_request, *args, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

url = SplitResult(scheme='https', netloc='esirius.example.net', path='/an/uri/', query='somes', fragment='')
request = <PreparedRequest [GET]>

    @httmock.urlmatch(netloc='esirius.example.net', path='/an/uri/', method='GET')
    def esirius_mock(url, request):
        assert request.headers['Accept'] == 'application/json; charset=utf-8'
        assert bool(request.headers.get('token_info_caller')) == bool(secret_key)
        if secret_key:
>           assert request.headers['token_info_caller'][:42] == b'f3G6sjRZETBam6vcdrAxmvJQTX5hh6OjZ8XlUO6SMo'
E           AssertionError: assert b'f3G6sjRZETB...6OjILg+vGd6TG' == b'f3G6sjRZETB...6OjZ8XlUO6SMo'
E             At index 32 diff: b'I' != b'Z'
E             Use -v to get the full diff

Files


Related issues

Related to Passerelle - Development #53594: TypeError: Object of type builtin_function_or_method is not JSON serializableSolution déployée30 Apr 2021

Actions

Associated revisions

Revision 59186c7c (diff)
Added by Nicolas Roche 13 days ago

esirius: ignore DES timestamp within tests (#53697)

History

#1

Updated by Frédéric Péters 14 days ago

  • Description updated (diff)
#2

Updated by Frédéric Péters 14 days ago

  • Related to Development #53594: TypeError: Object of type builtin_function_or_method is not JSON serializable added
#3

Updated by Nicolas Roche 13 days ago

  • Assignee changed from Benjamin Dauvergne to Nicolas Roche

Ça me semble lié à la version de cryptodome : ça passe avec

$ pip install pycryptodomex==3.9.9

alors que sinon ça ne passe plus, même si je reviens au commit qui introduit le connecteur.

Dans le test je coupe la partie de la chaîne crypté liée à l'heure du chiffrement (pour avoir un test reproductible sans avoir à utiliser freeze pour autant).
Il semblerait que cette partie prend 10 octets de plus, j'essaye de comprendre pourquoi...

#4

Updated by Nicolas Roche 13 days ago

Je n'ai réussi pas trouver le commit qui explique la régression sur le test.
J'imagine juste quelque chose comme https://github.com/Legrandin/pycryptodome/commit/853054937e29e6cd3dc61228be1dc768b688460b#diff-fe8b2c4039525ca3fead7acd9867edecb9f87d92764718533fa68f2f2e81d1f5

Dans les tests il y en a un autre qui valide le token complet (test_token : avec une date fixée par freeze) et donc cette erreur ne montre pas une régression.
Le test qui plante ici ne teste que la partie supposée fixe du token.
Il est redondant et on pourrait même le retirer.

#5

Updated by Benjamin Dauvergne 13 days ago

  • Planning changed from No to Yes

Tu ne veux pas juste décoder le token et vérifier ce qui doit l'être ? Ça me semble plus sûr.

#7

Updated by Benjamin Dauvergne 13 days ago

  • Status changed from Solution proposée to Solution validée
#8

Updated by Nicolas Roche 13 days ago

  • Status changed from Solution validée to Résolu (à déployer)

(quelqu'un l'a déjà poussé pour moi)

commit 59186c7cf9bb9c6adaeca379dea8947f75ee98ee
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Tue May 4 09:56:32 2021 +0200

    esirius: ignore DES timestamp within tests (#53697)

#9

Updated by Frédéric Péters 13 days ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF