Projet

Général

Profil

Bug #53697

échec de test_esirius.test_pre_request[xxx]

Ajouté par Frédéric Péters il y a presque 3 ans. Mis à jour il y a presque 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
03 mai 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Oui

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

Fichiers


Demandes liées

Lié à Passerelle - Development #53594: TypeError: Object of type builtin_function_or_method is not JSON serializableFermé30 avril 2021

Actions

Révisions associées

Révision 59186c7c (diff)
Ajouté par Nicolas Roche il y a presque 3 ans

esirius: ignore DES timestamp within tests (#53697)

Historique

#1

Mis à jour par Frédéric Péters il y a presque 3 ans

  • Description mis à jour (diff)
#2

Mis à jour par Frédéric Péters il y a presque 3 ans

  • Lié à Development #53594: TypeError: Object of type builtin_function_or_method is not JSON serializable ajouté
#3

Mis à jour par Nicolas Roche il y a presque 3 ans

  • Assigné à changé de Benjamin Dauvergne à 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

Mis à jour par Nicolas Roche il y a presque 3 ans

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

Mis à jour par Benjamin Dauvergne il y a presque 3 ans

  • Planning changé de Non à Oui

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

#7

Mis à jour par Benjamin Dauvergne il y a presque 3 ans

  • Statut changé de Solution proposée à Solution validée
#8

Mis à jour par Nicolas Roche il y a presque 3 ans

  • Statut changé de Solution validée à 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

Mis à jour par Frédéric Péters il y a presque 3 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF