<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MilamberSpace - JMeter &#187; LDAP</title>
	<atom:link href="http://blog.milamberspace.net/index.php/tag/ldap/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.milamberspace.net</link>
	<description>Apache JMeter (surtout) mais aussi GNU/Linux, OpenSource, l&#039;Informatique, etc.</description>
	<lastBuildDate>Sat, 04 Feb 2012 20:56:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Convertir les mots de passe en clair en mots de passe SHA-1 dans un serveur LDAP avec JMeter</title>
		<link>http://blog.milamberspace.net/index.php/2009/08/21/convertir-les-mots-de-passe-en-clair-en-mots-de-passe-sha-1-dans-un-serveur-ldap-avec-jmeter-494.html</link>
		<comments>http://blog.milamberspace.net/index.php/2009/08/21/convertir-les-mots-de-passe-en-clair-en-mots-de-passe-sha-1-dans-un-serveur-ldap-avec-jmeter-494.html#comments</comments>
		<pubDate>Fri, 21 Aug 2009 07:54:08 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[LDAP]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[SHA]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=494</guid>
		<description><![CDATA[Voici un complément à ce premier tutoriel sur JMeter et un serveur LDAP, où les mots de passe qui ont été insérés dans le serveur LDAP l&#8217;ont été en clairs. C&#8217;est à dire que si vous disposez d&#8217;un accès au serveur LDAP (et/ou que le serveur LDAP a une configuration pas très sécurisée) vous pouvez [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un complément à <a href="http://blog.milamberspace.net/index.php/2009/07/30/charger-un-serveur-ldap-depuis-une-base-de-donnees-avec-jmeter-468.html">ce premier tutoriel sur JMeter et un serveur LDAP</a>, où les mots de passe qui ont été insérés dans le serveur LDAP l&#8217;ont été en clairs. C&#8217;est à dire que si vous disposez d&#8217;un accès au serveur LDAP (et/ou que le serveur LDAP a une configuration pas très sécurisée) vous pouvez voir les mots de passe en clair de tout le monde. Ah, ce n&#8217;est pas terrible, pas de problème, reprenons JMeter pour effectuer une conversion en SHA-1 des mots de passe.</p>
<p><em>(Attention cela n&#8217;empêche pas de mieux sécuriser son serveur LDAP pour par exemple interdire la consultation du champ du mot de passe dans le LDAP par tout autre utilisateur que lui-même)</em></p>
<p><span style="text-decoration: underline;"><strong>Les objectifs de ce nouveau tutoriel sont :</strong></span></p>
<ul>
<li>Montrer comment parcourir les enregistrements d&#8217;un LDAP avec JMeter
<ul>
<li>Pour cela avec un <strong>contrôleur Pour chaque</strong></li>
</ul>
</li>
<li>Faire une action conditionnelle avec un <strong>contrôleur Si</strong>, en fonction d&#8217;une valeur de variable</li>
<li>Monter la manipulation de données (variables JMeter) dans une utilisation avec <strong>Pré-processeur BeanShell</strong></li>
</ul>
<p>La capture suivante l&#8217;arbre JMeter de ce tutoriel.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Arbre JMeter pour test LDAP conversion SHA" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-01.png" alt="" width="328" height="425" /></p>
<p><span id="more-494"></span>On commence bien entendu par ajouter un élément <strong>Groupes d&#8217;unités</strong> (en 1-1-1) pour permettre par la suite l&#8217;exécution du scénario. Ensuite on attaque avec l&#8217;ajout de la première<strong> Requête LDAP étendue</strong>, elle va se charger de la connexion avec le serveur LDAP.</p>
<p><img class="aligncenter" style="border: 1px solid black;" title="Requête LDAP de connexion JMeter" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-02.png" alt="" width="430" height="362" /></p>
<p style="text-align: left;">Le type de test est « <em><strong>Unité liée </strong></em>» (bind en anglais) correspondant à une connexion sur le serveur LDAP.</p>
<p style="text-align: left;">On complète les champs suivants :</p>
<ul>
<li><strong>Nom du serveur</strong>, par le nom ou l&#8217;adresse IP du serveur LDAP</li>
<li><strong>Port</strong>, en général le port 389</li>
<li><strong>DN</strong> : nom du suffixe d&#8217;annuaire</li>
<li><strong>Identifiant</strong>, par le « login » de connexion à l&#8217;annuaire LDAP.</li>
<li><strong>Mot de passe </strong>associé</li>
</ul>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Requête LDAP de recherche avec JMeter" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-03.png" alt="" width="466" height="441" /></p>
<p>La <strong>requête LDAP</strong> suivante va permettre de faire la recherche dans le LDAP de la liste des utilisateurs. On sélectionne le périmètre de recherche au niveau du champ <strong><em>Search base</em></strong>, en indiquant « <em>ou=Users</em> » (qui sera suffixé par <em>dn=milamberspace,dn=net</em>), le filtre de recherche (<strong><em>Search Filter</em></strong>) est «<em> (uid=*)</em> », où l&#8217;étoile indique « tous ». Cette requête LDAP signifie donc :<em> &laquo;&nbsp;On cherche toutes les fiches de l&#8217;annuaire du groupe d&#8217;utilisateurs ou=Users,dn=milamberspace,dn=net.</em>&nbsp;&raquo;</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Extracteur dexpression régulière JMeter" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-04.png" alt="" width="507" height="238" /></p>
<p><strong>L&#8217;extracteur d&#8217;expression régulière</strong>, ajouté en tant que fils de la requête LDAP de sélection des fiches utilisateurs, va permettre de créer une grande liste des UID (identifiants des utilisateurs) provenant des résultats de recherche. La <em>RegExp</em> va créer un ensemble de variables JMeter ayant le format suivant « <em>VAR_UID_xx </em>» où <strong>xx</strong> correspond à un indice de liste.<br />
<span style="text-decoration: underline;">On note que c&#8217;est la valeur « -1 » dans le champ «<strong><em> Correspond au num.</em></strong> » qui permet d&#8217;indiquer à JMeter qu&#8217;il faut créer une liste de variables VAR_UID_xx pour toutes les occurrences trouvées avec l&#8217;expression régulière.</span></p>
<p>Histoire de vous aider à matérialiser la chose, la capture suivante montre les fameuses variables VAR_UID_xx qui vont être créées lors de l&#8217;exécution.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Variables générées" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-17.png" alt="" width="492" height="577" /></p>
<p style="text-align: left;">On reviens aux éléments du scénario avec le<strong> contrôleur Pour chaque</strong> :</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Contrôleur Pour chaque" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-05.png" alt="" width="338" height="152" /></p>
<p>Ce <strong>contrôleur Pour chaque </strong>qui va permettre de parcourir la liste des variables <em>VAR_UID_xx</em> récupérées dans la requête précédente. Pour chaque valeur de variable, on va faire le traitement suivant :</p>
<ol>
<li>Une requête LDAP de recherche pour récupérer le mot de passe en clair</li>
<li>Si besoin, une requête LDAP de mise à jour afin de remplacement ce mot de passe par sa version SHA-1 (empreinte SHA)</li>
<li>Si besoin, une requête LDAP de recherche pour s&#8217;assurer que la mise à jour s&#8217;est bien passée.</li>
</ol>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Requête LDAP recherche" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-06.png" alt="" width="546" height="437" /></p>
<p>Donc pour la requête de recherche du mot de passe d&#8217;un utilisateur donné, on va remplacer l&#8217;étoile dans le champ <strong><em>Search Filter</em></strong> par la valeur de la variable <em>${UID}</em> qui correspondra à l&#8217;utilisateur courant dans la <strong>boucle Pour chaque</strong>.</p>
<p>Le champ<em><strong> Size Limit </strong></em>sera placé à 1 <em>(on ne cherche que 1 seul élément. Enfin c&#8217;est pas vraiment obligatoire de remplir ce champ, on est censé toujours avoir 1 élément en retour)</em>. On place la limite de temps de réponse à 10 000 ms, et surtout on place « <em>userPassword</em> » dans le champ <strong><em>Attributes</em></strong> afin que le serveur LDAP nous revoie seulement la valeur de ce champ pour l&#8217;utilisateur.</p>
<p>On n&#8217;oubliera pas de cocher la case &laquo;&nbsp;<em><strong>Examiner les résultats de recherche ?</strong>&nbsp;&raquo; </em>afin de l&#8217;on puisse avoir, dans les données de réponses, les valeurs demandées (ici le <em>userPassword</em>).</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Extracteur dexpression régulière userPassword" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-07.png" alt="" width="507" height="233" /></p>
<p>Ensuite, commence une série de trois <strong>extracteurs d&#8217;expression régulière</strong>. Le premier va permettre la récupération du mot de passe, ce dernier se situe entre deux balises userPassword dans la réponse.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Extracteur dexpression régulière UID" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-08.png" alt="" width="470" height="236" /></p>
<p>La deuxième est pour récupérer l&#8217;identifiant de l&#8217;utilisateur en cours. Ce n&#8217;est pas obligatoire, mais cela permet de vérifier si on a eut le bon utilisateur.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Extracteur dexpression régulière SHA" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-09.png" alt="" width="562" height="234" /></p>
<p>La troisième est pour récupérer le mot de passe au format SHA dans le cas où l&#8217;utilisateur a déjà un mot de passe au format SHA. Donc cela voudra dire qu&#8217;il ne faut pas convertir son mot de passe.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Contrôleur Si JMeter" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-10.png" alt="" width="594" height="130" /></p>
<p>Le <strong>contrôleur Si</strong> va justement permettre de déterminer si c&#8217;est nécessaire ou non de faire la conversion. Pour cela on compare si la variable cible de l<strong>&#8216;extracteur d&#8217;expression régulière</strong> <em>MOT_DE_PASSE_SHA </em>a reçu la valeur par défaut (ici il s&#8217;agit d&#8217;un texte arbitraire qui est stocké dans la variable ${MDP_NON_SHA}).</p>
<p>Donc si c&#8217;est la valeur par défaut, c&#8217;est que le mot de passe n&#8217;est pas en SHA, il convient donc de procéder à la conversion.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Requête LDAP de modification JMeter" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-11.png" alt="" width="699" height="278" /></p>
<p>Cette <strong>requête LDAP </strong>est donc celle de la modification. On choisi le type de test « <em>Modification test </em>», et dans le tableau, on définit l&#8217;attribut <em>userPassword</em>, sa nouvelle valeur (voir ci-dessous) et le code d&#8217;opération « <em>replace</em> ».</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Pré-processeur BeanShell pour conversion SHA JMeter" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-12.png" alt="" width="507" height="625" /></p>
<p>Le <strong>Pré-Processeur BeanShell </strong>est rattaché en tant que fils à la <strong>requête LDAP</strong> de modification. C&#8217;est lui qui va faire la conversion du mot de passe en clair vers un mot de passe en SHA, le tout en code de programmation Java. Il permet donc de créer (définir) la nouvelle valeur du mot de passe qui sera insérée par la requête de modification.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Requête LDAP de recherche / vérification JMeter" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-13.png" alt="" width="539" height="429" /></p>
<p>La requête suivante est pour faire une nouvelle recherche de l&#8217;utilisateur courant. On va, en effet, re-demander son mot de passe afin de vérifier qu&#8217;il a bien été changé.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Vérification par assertion" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-14.png" alt="" width="615" height="312" /></p>
<p>La vérification du bon changement, est assurée par un élément <strong>Assertion Réponse</strong>. Le motif à tester est le nouveau mot de passe (le SHA), et attention, le type de correspondance est « <em>Commence par</em> ». La traduction en français induit en erreur, car en fait, cela « <em>ne commence pas par</em> » mais plutôt « <em>Contient (sans expression régulière)</em> », car dans le nouveau mot de passe, il peut y avoir des caractères spéciaux d&#8217;expressions régulières qui risquent d&#8217;être mal interprétés avec le type « Contient ». <em>(je vais proposer une nouvelle traduction pour la prochaine version de JMeter)</em></p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Requête LDAP de déconnexion JMeter" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-15.png" alt="" width="643" height="189" /></p>
<p>La dernière <strong>requête LDAP</strong> est celle de la déconnexion (Délier les unités).</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Exécution du test" src="/wp-content/images/jmeter22-img-ldap/jmeter-ldap-16.png" alt="" width="813" height="461" /></p>
<p>Et voilà, il ne reste plus qu&#8217;à faire une exécution du test (une et une seule), tout en vérifiant dans l&#8217;arbre de résultat que tout s&#8217;est bien passé.</p>
<p>Le récepteur d&#8217;Assertion, dans l&#8217;arbre JMeter, permettra, quant à lui de capter d&#8217;éventuels problèmes lors de l&#8217;exécution. Il est préférable de cocher la case « <em>Uniquement (les) Erreurs</em> » dans ce récepteur, afin de ne voir que les problèmes survenus.</p>
<p>Voilà pour ce deuxième billet sur JMeter et les LDAP. Bon courage.</p>
<p>./</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2009/08/21/convertir-les-mots-de-passe-en-clair-en-mots-de-passe-sha-1-dans-un-serveur-ldap-avec-jmeter-494.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Charger un serveur LDAP depuis une base de données avec JMeter</title>
		<link>http://blog.milamberspace.net/index.php/2009/07/30/charger-un-serveur-ldap-depuis-une-base-de-donnees-avec-jmeter-468.html</link>
		<comments>http://blog.milamberspace.net/index.php/2009/07/30/charger-un-serveur-ldap-depuis-une-base-de-donnees-avec-jmeter-468.html#comments</comments>
		<pubDate>Thu, 30 Jul 2009 07:58:41 +0000</pubDate>
		<dc:creator>Milamber</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Test fonctionnel]]></category>
		<category><![CDATA[Contrôleur Pour chaque]]></category>
		<category><![CDATA[JDBC]]></category>
		<category><![CDATA[LDAP]]></category>

		<guid isPermaLink="false">http://blog.milamberspace.net/?p=468</guid>
		<description><![CDATA[Voici un tutoriel pour réaliser un script JMeter qui va lire dans une base de données (ici MySQL) via JDBC, une table d&#8217;utilisateurs (nom et prénom), puis se connecter sur un serveur LDAP (ici openLDAP) afin d&#8217;ajouter chaque utilisateur dans le LDAP. Ce tutoriel a pour objectifs : Rappeler l&#8217;utilisation de Requête JDBC pour accéder [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un tutoriel pour réaliser un script JMeter qui va lire dans une base de données (ici MySQL) via JDBC, une table d&#8217;utilisateurs (nom et prénom), puis se connecter sur un serveur LDAP (ici openLDAP) afin d&#8217;ajouter chaque utilisateur dans le LDAP.</p>
<p><span style="text-decoration: underline;">Ce tutoriel a pour objectifs :</span></p>
<ol>
<li> Rappeler l&#8217;utilisation de <strong>Requête JDBC</strong> pour accéder à une base de données, et récupérer dans un ensemble de variables les résultats de requête JDBC</li>
<li> Montrer comment effectuer l&#8217;ajout d&#8217;une fiche Utilisateur dans un serveur LDAP via une <strong>Requête LDAP étendue</strong> de JMeter</li>
<li> Montrer le fonctionnement du <strong>Contrôleur Pour chaque </strong>dans JMeter</li>
<li> Montrer un petit exemple de <strong>Pré-Processeur BeanShell</strong></li>
</ol>
<p>Voici le plan de de test final.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Plan de test LDAP / Base avec JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap01.png" alt="" width="347" height="377" /></p>
<p><span id="more-468"></span><span style="text-decoration: underline;">On observe deux sections :</span></p>
<ol>
<li><strong>Base de données : </strong>qui est un <strong>Contrôleur Simple</strong> regroupant les éléments nécessaires à la partie JDBC afin d&#8217;accéder à la base et faire la requête SQL qui va permettre de récupérer les utilisateurs à créer.</li>
<li><strong>LDAP : </strong>qui est aussi un<strong> Contrôleur Simple</strong> regroupant les éléments permettant la connexion au serveur LDAP et effectuer la requête d&#8217;ajout dans le LDAP des utilisateurs.</li>
</ol>
<p>Concernant la partie Base de données, je vous revois vers <a href="http://blog.milamberspace.net/index.php/2009/06/12/jmeter-utilisation-de-lelement-jdbc-comme-source-de-donnees-pour-un-test-de-charge-partie-1-311.html">ce billet</a> pour avoir plus de détails sur sa mise en place. Ci-dessous, je vais seulement commenter certains éléments de cette partie.</p>
<p>L&#8217;élément <strong>Requête JDBC</strong> correspond à la requête SQL que JMeter va effectuer pour obtenir une liste de noms et de prénoms qui seront utilisés dans la section LDAP.</p>
<ul>
<li> Le champ <em>Nom de liaison</em> fait référence au &#8216;pool&#8217; JDBC configuré dans l&#8217;élément <strong>Configuration de connexion JDBC</strong></li>
<li> Le type de requête est <em>Select Statement, </em>on fait donc une requête SQL commençant par SELECT :
<ul>
<li> <em>SELECT ID, NOM, PRENOM from BOXERS</em></li>
</ul>
</li>
<li> Dans le champ N<em>oms des variables</em>, on donne les variables (JMeter) qui vont recevoir les données. Pour nous, cela sera <em>VAR_ID, VAR_NOM, VAR_PRENOM</em>.</li>
</ul>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Requête JDBC" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap03.png" alt="" width="473" height="342" /></p>
<p style="text-align: left;">A l&#8217;exécution, la requête SQL retournera une liste de noms et les placera dans les variables correspondantes, avec un suffixe <strong>_X</strong> où <em>X</em> est le numéro de la ligne retournée.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Requête JDBC" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap02.png" alt="" width="627" height="457" /></p>
<p>Pour la section suivante, LDAP, on utilisera donc ces variables pour faire l&#8217;ajout dans le LDAP.</p>
<p>Ainsi voici la partie LDAP : le premier élément est une <strong>Requête LDAP étendue</strong> qui va permettre de faire la connexion avec le serveur LDAP.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Conexion LDAP avec JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap10.png" alt="" width="640" height="357" /></p>
<p>Pour cela, on choisi le type de test « <em>Unité liée </em>», et on complète les différents champs nécessaires :</p>
<ul>
<li> <strong>Nom du serveur</strong> (ou adresse IP)</li>
<li> <strong>Port</strong> <strong>:</strong> 389 (correspondant au port par défaut pour le protocole ldap)</li>
<li> <strong>DN :</strong> nom du suffixe de l&#8217;annuaire</li>
<li> <strong>Identifiant</strong> <strong>:</strong> un compte disposant des droits pour modifier l&#8217;annuaire (ici c&#8217;est l&#8217;administrateur LDAP)</li>
<li> <strong>Mot de passe</strong> associé au compte ci-dessus</li>
<li> <strong>Délai d&#8217;attente de connexion :</strong> paramètre optionnel qui permet de faire échouer l&#8217;échantillon (de connexion) si jamais la connexion n&#8217;est pas ouverte</li>
<li> La case à cocher permet de faire une connexion via le protocole LDAPS (via SSL donc) <em>(accompagné par le port 636 en général)</em></li>
</ul>
<p>Ensuite, on en profite pour faire l&#8217;opération inverse de la connexion : la Déconnexion. Pour cela, on choisit tout simplement le type de test « <em>Délier les unités</em> ». Cette requête sera placée en fin du scénario.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Déconnexion LDAP avec JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap11.png" alt="" width="641" height="180" /></p>
<p>Passons aux éléments qui vont nous permettre d&#8217;ajouter les fiches annuaires dans le LDAP.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Contrôleur Pour chaque (foreach) JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap12.png" alt="" width="342" height="162" /></p>
<p>Le contrôleur ci-dessus, <strong>Pour chaque </strong>va tout simplement <em>(efficacement je dirais)</em>, parcourir une à une les variables <em>VAR_NOM_x </em>où <em>x</em> est le numéro de ligne des résultats de la requête SQL précédente. À chaque itération, il va affecter à la variable <em>NOM</em> la valeur de <em>VAR_NOM_x</em>. <em>(on notera la correspondance entre VAR_NOM de la requête JDBC Select et le VAR_NOM_x du contrôleur)</em></p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Compteur JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap13.png" alt="" width="274" height="227" /></p>
<p>Ici, on ajoute un <strong>Compteur </strong>JMeter qui nous permet de connaître (suivre) le numéro de ligne, afin que nous puissions l&#8217;utiliser dans la prochaine requête pour générer des variables.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Ajout LDAP avec JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap14.png" alt="" width="639" height="432" /></p>
<p>Nous voilà dans la requête « costaude », il s&#8217;agit d&#8217;une <strong>Requête LDAP étendue</strong> qui va traiter l&#8217;ajout. Ainsi, on choisit le type de test « <em>Add test </em>».</p>
<p>Puis le champ <em>Entry DN</em> nous permet d&#8217;indiquer l&#8217;identifiant unique de la fiche dans l&#8217;annuaire.</p>
<p>Le tableau suivant, permet d&#8217;ajouter les couples « clé: valeur » suivant le principe du fichier LDIF (importation de comptes LDAP).</p>
<p>On notera les points suivants :</p>
<ul>
<li><em>${__V(VAR_PRENOM_${CPT})}</em> permet de générer la variable « <em>${VAR_PRENOM_x} </em>pour chaque itération du <strong>Contrôleur Pour chaque</strong></li>
<li><em>${NEW_NOM}</em> et <em>${NEW_PRENOM}</em> sont des variables définies dans un <strong>Pré-processeur BeanShell</strong> (ci-dessous)</li>
</ul>
<p>Dans la requête d&#8217;ajout, il est important de ne pas oublier les éléments « <em>objectclass</em> » qui vont définir la structure de la fiche annuaire.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Pré-processeur BeanShell JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap16.png" alt="" width="510" height="519" /></p>
<p>En fils de la requête d&#8217;ajout, on place donc un <strong>Pré-processeur BeanShell</strong>, qui va permettre d&#8217;effectuer quelques actions (ou préparations) sur les données avant leur utilisation.</p>
<p>Tout d&#8217;abord, on récupère la variable <em>CPT</em> (via <em>vars.get(&nbsp;&raquo;GET&nbsp;&raquo;)</em>), puis avec une concaténation, on récupére la valeur de la variable <em>VAR_PRENOM_x</em>. On supprime les points et enlève les guillemets <em>(car certains noms dans la base des boxers ont des pseudonymes entre guillemets)</em>. Puis on refait la même chose avec le NOM.</p>
<p>Pour finir, on génère l&#8217;adresse email via un petit passage en minuscule et une concaténation du domaine de messagerie.</p>
<p>A chaque fois, on utilise le <em>vars.put</em> pour déposer des nouvelles variables dans JMeter.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Assertion Réponse JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap15.png" alt="" width="433" height="321" /></p>
<p>Ensuite, avec l&#8217;élément suivant, une <strong>Assertion Réponse</strong>, j&#8217;anticipe sur l&#8217;exécution et la vérification que tout s&#8217;est bien passé. En effet, si l&#8217;exécution de la requête d&#8217;ajout LDAP fonctionne correctement, le résultat contient «<em> &lt;responsemessage&gt;Success&lt;/responsemessage&gt; </em>». L&#8217;assertion sur ce texte va nous permettre de détecter rapidement les cas en erreur <em>(si il y en a)</em>.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Requête LDAP de recherche avec JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap17.png" alt="" width="645" height="432" /></p>
<p>Après la requête d&#8217;ajout, on place une requête de recherche dans le LDAP (type de test : <em>Search test</em>). C&#8217;est optionnel, c&#8217;est juste pour faire une seconde vérification du bon ajout.</p>
<p>On notera :</p>
<ul>
<li>Le champ <strong>Search Filter </strong>qui est ici le « <em>uid</em> » inséré</li>
<li>Le champ <strong>Scope</strong> est positionné à <em>Effectuer une recherche &#8216;onelevel&#8217;</em> (on ne recherche pas dans les sous-éléments de l&#8217;arbre LDAP)</li>
<li>Le champ <strong>Size limit</strong> pour limiter à 1 le résultat retourné (on fait une recherche unitaire)</li>
<li>Le champ <strong>Limite de temps</strong> à 10000 (ms) pour faire échouer l&#8217;échantillon si le serveur LDAP est trop long à répondre</li>
<li>Le champ <strong>Attributes</strong> (optionnel) qui permet de choisir les champs à récupérer, ici le CN, SN et Mail</li>
<li>Et pour finir, la case à cocher <strong>Examiner les résultats de recherche ?</strong> va permettre d&#8217;avoir dans les résultats du test, les valeurs des champs récupérés afin notamment de faire (par exemple) une assertion.</li>
</ul>
<p>Ensuite <em>(enfin)</em> on peut passer à l&#8217;exécution du scénario JMeter.</p>
<p>Pour cela, on grade la configuration par défaut du <strong>Groupes d&#8217;unités</strong>, à savoir : 1 unité qui monte en charge en 1 seconde et qui faire 1 itération (1-1-1).</p>
<p><em>(c&#8217;est le <strong>Contrôleur Pour chaque</strong> qui se charge des itérations sur les utilisateurs)</em></p>
<p><span style="text-decoration: underline;">Voici l&#8217;arbre de résultats :</span></p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Résultats de lexécution LDAP dans JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap18.png" alt="" width="679" height="298" /></p>
<p>Si tout s&#8217;est bien passé, tout est <em>vert</em>. Dans les données de réponses, on voit les résultats des requêtes LDAP, avec la valeur <em>Success</em>.</p>
<p>On peut également vérifier dans les données de réponses que <em>par exemple</em> la génération des adresses email s&#8217;est bien déroulée.</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Vérification du pré-processeur dans la requête LDAP avec JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap19.png" alt="" width="667" height="444" /></p>
<p>Un récepteur <strong>Résultats d&#8217;assertion</strong>, configuré pour afficher <em>uniquement</em> les erreurs, permet de voir les utilisateurs qui ont eu un problème lors de l&#8217;exécution. Ici, il y a eu des soucis visiblement sur les noms de boxers qui ont un caractère accentué&#8230;</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 1px solid black;" title="Rapport dassertion JMeter" src="/wp-content/images/jmeter21-img-ldap/jmeter-ldap20.png" alt="" width="749" height="271" /></p>
<p>Et voilà, avec ce tutoriel, on découvre que JMeter sait faire d&#8217;autre chose qu&#8217;un test de charge Web.</p>
<p>Vous noterez que ce type de scénario, fait de JMeter une sorte d&#8217;<a href="http://fr.wikipedia.org/wiki/ETL">ETL (Extract-Transform-Load)</a>. Ainsi, on peut même imaginer d&#8217;adapter ce scénario pour maintenir une synchronisation entre une base de données et un LDAP, le tout en exécutant JMeter en <a href="http://blog.milamberspace.net/index.php/2009/02/01/jmeter-pourquoi-executer-son-test-de-charges-en-mode-non-gui-sans-interface-graphique-192.html">mode non-gui</a> dans une tâche programmée ou un cron.</p>
<p>Je prépare une suite à ce tutoriel concernant la conversion automatisée des mots de passe stockés ici en clair dans le LDAP, vers des mots de passe stockés en SHA-1.</p>
<p><em>Bons scénarios.</em></p>
<p><em><br />
</em></p>
<p><strong>En annexes :</strong><br />
<strong> A/ </strong>Un petit SELECT de ma base de données (histoire de montrer sa structure)</p>
<pre>mysql&gt; select * from BOXERS limit 10;
 +----+----------+------------+
 | ID | PRENOM   | NOM        |
 +----+----------+------------+
 |  1 | Muhammad | Ali        |
 |  2 | Lou      | Ambers     |
 |  3 | Vito     | Antuofermo |
 |  4 | Jorge    | Arce       |
 |  5 | Alexis   | Arguello   |
 |  6 | Henry    | Armstrong  |
 |  7 | Abe      | Attell     |
 |  8 | Monte    | Attell     |
 |  9 | Yuri     | Arbachakov |
 | 10 | Satoshi  | Aragaki    |
 +----+----------+------------+
 10 rows in set (0.03 sec)</pre>
<p><strong>B/ </strong>Le format LDIF d&#8217;exemple <em>(qui permet de connaître les champs à ajouter dans la requête LDAP d&#8217;ajout, mais entendu, il faut l&#8217;adapter pour que cela colle avec le vôtre (serveur LDAP))</em></p>
<pre>dn: uid=milamber,ou=Users,dc=milamberspace,dc=net
objectclass: organizationalPerson
objectclass: person
objectclass: top
objectclass: inetOrgPerson
uid: milamber
userPassword: jmeter2009
cn: milamber
mail: milamber@milamberspace.net
displayname: Milamber
givenname: Milamber
sn: Milamber</pre>
<p>./</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.milamberspace.net/index.php/2009/07/30/charger-un-serveur-ldap-depuis-une-base-de-donnees-avec-jmeter-468.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

