Tests Unitaires avec LDAP
Mocker les appels de méthodes dans des classes interrogeant un annuaire LDAP peut être rébarbatif. On peut penser à configurer le TU pour interroger une annuaire existant. Cependant le maintient des données du test devient plus difficile. ApacheDS founit un ensemble d'annotation permettant - de créer un annuaire LDAP pour la durée de vie du test - de l'alimenter avec des données
Le détail présenté ici fonctionne avec la version 2.0.0-M10. Il est possible que cela ne fonctionne pas avec d'autres versions (supérieures ou inférieures)
Dépendances maven
Les dépendances maven à utiliser sont les suivantes
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-server-integ</artifactId>
<version>2.0.0-M10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-core-integ</artifactId>
<version>2.0.0-M10</version>
<scope>test</scope>
</dependency>
De plus il est nécessaire de déclarer un plugin dans la section <build>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<inherited>true</inherited>
<extensions>true</extensions>
</plugin>
Création de l'instance
La classe de test doit être annotée avec les annotations suivantes :
@RunWith(FrameworkRunner.class)
@CreateDS(name = "pe",
partitions = {
@CreatePartition(name = "my-root", suffix = "o=my-root",
contextEntry = @ContextEntry(entryLdif = "dn: o=my-root\n"
+ "objectclass: top\n"
+ "objectclass: organization\n"
+ "o: my-root\n\n"),
indexes = {
@CreateIndex(attribute = "objectclass"), @CreateIndex(attribute = "o"),
@CreateIndex(attribute = "ou") })
})
@CreateLdapServer(transports = @CreateTransport(protocol = "LDAP", address = "localhost", port = 11389))
L'annotation @CreateLdapServer
créé une instance de l'annuaire écoutant sur le port 11389.
Les autres annotations permettent de créer une partition pour stocker les données.
ApacheDS founit aussi une classe abstraite org.apache.directory.server.core.integ.AbstractLdapTestUnit
permettant d'interroger directement l'instance créé pour par exemple contrôler son contenu.
Importation des données
Des fichiers LDIF peuvent être importés avant l'exécution des méthodes de tests en utilisant l'annotation @ApplyLdifFiles
@Test
@ApplyLdifFiles({ "schema.ldif", "donnees.ldif" })
public void testLdap() throws Exception {}
Malheureusement très peu de doc existe sur le net...
Un projet exemple se trouve ici.