17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Programmation</strong> dirigée par les tests<br />

CHAPITRE 12<br />

Le code contenu dans le patch peut ensuite être modifié, voire varier en fonction des<br />

appels, afin de flouer tout code appelant.<br />

Modification de classes<br />

Il est parfois nécessaire de modifier une classe entière. C’est le cas par exemple de la<br />

quasi-totalité des classes qui implémentent des clients réseaux. Si l’on teste une<br />

application qui est en charge d’envoyer des e-mails, il est nécessaire de créer une<br />

fausse classe smtplib.SMTP complète, appelée fake pour simuler l’envoi des e-mails.<br />

La construction d’un fake doit se faire de manière itérative, afin de ne coder que ce<br />

qui est vraiment nécessaire à la simulation. La première étape consiste à créer une<br />

classe totalement vide et un test qui envoie un e-mail. Au moment de la relance des<br />

tests, l’interpréteur affichera toutes les erreurs dues à la non-disponibilité de la ressource<br />

réseau, à savoir le serveur SMTP.<br />

Le fake pourra alors être complété en fonction des erreurs, au fur et à mesure des<br />

essais, jusqu’à ce que la simulation fonctionne.<br />

Version 1<br />

#!/usr/bin/python<br />

# -*- coding: utf8 -*import<br />

smtplib<br />

class FakeSMTP:<br />

pass<br />

# mise en place du bouchon<br />

original_SMTP = smtplib.SMTP<br />

smtplib.SMTP = FakeSMTP<br />

# séquence classique d'appel à SMTP<br />

sender = smtplib.SMTP('mon.serveur.smtp')<br />

message = 'mon message bidon'<br />

destinataires = ['alfred@mlksnc.com', 'marie@zertceo.com']<br />

sender.sendmail('bill@hou.com', destinataires, message)<br />

sender.quit()<br />

# retrait du patch<br />

smtplib.SMTP = original_SMTP<br />

L’exécution de ce code provoque une erreur de constructeur.<br />

397

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!