Archive for November, 2015

Diffy : faire des tests sans les eacute;crire ?

Friday, November 27th, 2015

pnbsp; pLes systèmes sont de plus en plus complexe et les tests de non régression suivent le même chemin. Twitter propose donc une solution qui ne demande qu’une installation minimale pour detecter un maximum de bug. C’est le genre de chose que vous lisez et vous vous demandez pourquoi vous ne l’avez jamais fait avant p“emAs the complexity of a system grows, it very quickly becomes impossible to get adequate coverage using hand-written tests, and there’s a need for more advanced automated techniques that require minimal effort from developers. Diffy is one such approach we use/em,” explique Puneet Khanduri, membre de l’équipe de développent Twitter dans un post. h3Pourquoi ?/h3 pLorsque l’on développe, notre code évolue en permanence. De plus, de nos jours, avec des architectures comme SOA, on se retrouve avec de très grands nombres de services, très souvent en croissance rapide. Il devient donc difficile de savoir si, tous marchent correctement. pLa réponse traditionnelle à ce problème passe généralement par l’écriture de tests unitaires. Malheureusement, cela prend du temps, la portée en est fréquemment très limité, le nombre de ces tests croit par ailleurs de façon exponentielle et devient très vite ingérable. p“emwriting good tests can take more time than writing the code itself/em.” nous dit Puneet Khanduri pTwitter propose une nouvelle approche avec Diffy. pAlors, qui y-a-t-il de différent ? Souvenez-vous, il vous est surement déjà arrivé de faire ce que l’on appelle communément des « Y » pour copier des données (souvent de prod) vers une nouvelle version. Diffy industrialise et automatise cette idée. h3Comment ça marche Diffy ?/h3 pDiffy va nous permettre de faire tourner l’ancien et le nouveau code et de comparer les résultats. C’est de ce côté là que se trouve la grande nouveauté. pEn général, quand on fait un « Y », on fait des tests par échantillons sur le résultat, en général sur ce qui est en BDD ou dans des fichiers. Diffy, lui utilise le résultat des requêtes. En effet, il va faire proxy et/ou multicast des requêtes en entrée, mais aussi récupérer les résultats et les comparer et rapporter les régressions. A la base, si le résultat est le même, le service est bon. Mais à l’usage on va se rendre compte que ce n’est pas si simple. En effet, pour tous un tas de raison (comme des timestamps, des sessionids, des randoms, des races conditions, etc.), il arrive que pour une même requête le résultat soit différent, on obtient alors beaucoup de faux positif. pC’est là qu’intervient la proposition de Twitter : appliquer une annulation de bruit. pComment ça se passe ? pL’idée de Twitter, et de, non pas, faire tourner 2 versions, mais 3 versions : la nouvelle bien sûr, mais aussi 2 anciennes. pa href=”http://vald70.free.fr/wordpress/wp-content/diffy.png”img title=”diffy” style=”border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px” border=”0″ alt=”diffy” src=”http://vald70.free.fr/wordpress/wp-content/diffy-thumb.png” width=”234″ height=”244″/a/p pLe postulat est que les différences de résultats fournis par les deux anciennes correspondent au bruit de fond. Et les différences entre la nouvelle et une ancienne à nos régressions. Bien sûr, il faut rajouter à cela un peu de statistique pour limiter le nombre de faux positif./p pOn peut donc se trouver dans plusieurs cas : p* les deux instances v1 renvoient la même réponse, et la nouvelle v2, une réponse différente. C’est le cas le plus simple, il est remonté directement dans les rapport.a href=”http://vald70.free.fr/wordpress/wp-content/diff-v1.png”img title=”diff_v1″ style=”border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px” border=”0″ alt=”diff_v1″ src=”http://vald70.free.fr/wordpress/wp-content/diff-v1-thumb.png” width=”210″ height=”244″/a p* cas le plus courant : toutes les version on des différences, par exemple un sessionid. Dans un premier temps Diffy va remonter un warning indiquent un possible bruit de fond. Et vous allez pouvoir l’exclure des rapports.a href=”http://vald70.free.fr/wordpress/wp-content/diffy-noise.png”img title=”diffy_noise” style=”border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px” border=”0″ alt=”diffy_noise” src=”http://vald70.free.fr/wordpress/wp-content/diffy-noise-thumb.png” width=”222″ height=”244″/a pPour le moment, il manque encore des fonctionnalités, par exemple si votre réponse peux changer en fonction de certains paramètres il va être difficile de la classifier en bruit ou en normal ! pMais, pour 80% des ca,s cela offre une grande avancé dans les tests. pPour tester : ples sources du projet : a title=”https://github.com/twitter/diffy” href=”https://github.com/twitter/diffy”https://github.com/twitter/diffy/a, avec pour les afficionados de Docker, des exemples pour lancer vos tests sous Docker !

recrée un fichier VMX

Tuesday, November 3rd, 2015

pnbsp;/p pIl se peut que pour diverses raison le fichier VMX d’une machine virtuelle vmware soit corrompus./p pSi vous avez encore en votre possession les fichiers de log il y a un moyen de reconstituer ce fichier avec un minimum de manipulation./p pstrongprérequis/strong : /p p* un accès SSH sur l’hôte ESXi/p p* un script shell !/p pfont face=”Source Code Pro”#!/bin/bash/font/p pfont face=”Source Code Pro”#VMXFILENAME=$(sed -n ’s/^.*Config file: \(.\+\)$/\1/p’ vmware.log)brecho -e “#\041/usr/bin/vmware” gt; ${VMXFILENAME}brecho ‘.encoding = “UTF-8″‘ gt;gt; ${VMXFILENAME}brsed -n ‘/DICT — CONFIGURATION/,/DICT —/ s/^.*DICT \+\(.\+\) = \(.\+\)$/\1 = “\2″/p’ vmware.log gt;gt; ${VMXFILENAME}/font/p pstrongméthode/strong :/p p* se placer dans le répertoire de la VM/p p* exécuter le script : /p pex: font face=”Source Code Pro”/vmfs/volumes/513397ea—143299f0—1e26—000c29428399/vm3#nbsp; sh recreatevmx.sh/font/p pfont face=”Source Code Pro”* re-enregister la VM :/font/p p#vim-cmd solo/registervm font face=”Source Code Pro”/vmfs/volumes/513397ea—143299f0—1e26—000c29428399/vm3//fontvm3.vmx/p pstrongnote/strong: /p pil est possible que l’UUID est changé si vous avez fait des manip sur la data store./p pvous pouvez ajouter les lignes suivantes au script pour en tenir compte :/p pcodefont face=”Source Code Pro”NEWUUID=$(sed -n “s/^.*UUID: Writing uuid.location value: ‘\(.\+\)’.*$/\1/p” vmware.log)/font/code/p pfont face=”Source Code Pro”if [ "${NEWUUID}" ] then sed -i “s/uuid.location = .*$/uuid.location = \”${NEWUUID}\”/” ${VMXFILENAME} fi/font/p