Bug #39391
cmis py3: pas bon les bytes dans StringIO
0%
Description
Je n'ai plus la trace mais en py3 on essaie de passer des bytes dans un StringIO, crash ici :
@wrap_cmis_error def create_doc(self, file_name, file_path, file_byte_content): folder = self._get_or_create_folder(file_path) return folder.createDocument(file_name, contentFile=StringIO(file_byte_content))
Les tests unitaires court-circuitent ce chemin de code.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Emmanuel Cazenave il y a environ 4 ans
Emmanuel Cazenave a écrit :
Les tests unitaires court-circuitent ce chemin de code.
Et donc ça pourrait être l'occasion de revoir les tests unitaires pour qu'ils ne fassent plus ce court-circuit (je dis ça en passant mais si c'est trop galère, ça peut-être l'objet d'un ticket à part).
Mis à jour par Nicolas Roche il y a environ 4 ans
- Fichier 0001-cmis-allow-to-upload-binary-documents-39391.patch 0001-cmis-allow-to-upload-binary-documents-39391.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Comment savoir si ça ne va pas crasher plus loin ?
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Nicolas Roche a écrit :
Comment savoir si ça ne va pas crasher plus loin ?
Suffit de mocker de la réponse HTTP plutôt que le retour de createDocument.
Mis à jour par Nicolas Roche il y a environ 4 ans
Mais ensuite, ça pourrai encore crasher à l'envoi.
(je peux tester en vrai quelque-part, pour savoir quoi mettre dans le mock ?)
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Nicolas Roche a écrit :
Mais ensuite, ça pourrai encore crasher à l'envoi.
(je peux tester en vrai quelque-part, pour savoir quoi mettre dans le mock ?)
Je ne vois pas comment, si ça passe requests, c'est fini, ça marche. Utilise httmock, il y a des exemples ailleurs dans le code de passerelle.
tests/conftest.py:2:from httmock import urlmatch, HTTMock, response tests/test_api_entreprise.py:23:from httmock import urlmatch, HTTMock, response tests/test_api_particulier.py:20:from httmock import urlmatch, HTTMock, response tests/test_availability.py:4:from httmock import all_requests, HTTMock tests/test_cartads_cs.py:9:from httmock import HTTMock tests/test_dpark.py:9:import httmock tests/test_lille_urban_card.py:3:from httmock import HTTMock tests/test_mdph13.py:26:import httmock tests/test_planitech.py:6:from httmock import urlmatch, HTTMock tests/test_proxylogger.py:8:from httmock import HTTMock tests/test_requests.py:6:from httmock import urlmatch, HTTMock, response tests/test_strasbourg_eu.py:3:from httmock import all_requests, HTTMock tests/utils.py:4:import httmock tests/wcs/conftest.py:32:import httmock
Mis à jour par Valentin Deniaud il y a environ 4 ans
Nicolas Roche a écrit :
(je peux tester en vrai quelque-part, pour savoir quoi mettre dans le mock ?)
Voui https://dev.entrouvert.org/projects/sysadmin/wiki/CMIS_-_Apache_Chemistry (merci Manu)
Mis à jour par Valentin Deniaud il y a environ 4 ans
Cependant (et parce que mes tests sont rouges dans #39416 à cause de ce bug),
Emmanuel Cazenave a écrit :
Les tests unitaires court-circuitent ce chemin de code.
Pas vraiment, comme le montre le test de Nico, le chemin est couvert mais mal, et ça n'a pas à voir avec un mock de la réponse du serveur CMIS.
Donc l'amélioration des tests en mockant les vraies réponses devrait être faite dans un autre ticket (ou pas du tout).
Nico, je ack si tu me remplaces la condition sur les bytes par un bon vieux force_str :)
Mis à jour par Nicolas Roche il y a environ 4 ans
- Lié à Development #39597: cmis : utiliser httmock dans les tests pour avoir une couverture 'plus profonde' ajouté
Mis à jour par Nicolas Roche il y a environ 4 ans
- Fichier 0001-cmis-allow-to-upload-binary-documents-39391.patch 0001-cmis-allow-to-upload-binary-documents-39391.patch ajouté
Merci pour les info pour tester "en vrai".
Je relaye la proposition de Benjamin de compléter les tests dans #39597, afin de ne pas bloquer Valentin.
Patch qui prend simplement en compte le qui qu'on s'attend ici à recevoir du binaire :
data['file_byte_content'] = base64.b64decode(file_['content'])
or
$ pydoc base64 decode(input, output) Decode a file; input and output are binary files.
Mis à jour par Valentin Deniaud il y a environ 4 ans
- Statut changé de Solution proposée à Solution validée
Parfait.
Mis à jour par Nicolas Roche il y a environ 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 1480f03881764a6a3a488d5c3a823c5f109f167a Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Thu Feb 6 14:54:32 2020 +0100 cmis: allow to upload binary documents (#39391)
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
cmis: allow to upload binary documents (#39391)