3.5. JunitHelper

3.5.1. MongoDb or Web Server Junit Support

Si dans un Web Server Junit, il est nécessaire d’activer un service utilisant un port, et ceci afin de favoriser un parallélisme maximal des tests unitaires, il est demandé de procéder comme suit :

 private static JunitHelper junitHelper;
 private static int databasePort;
 private static int serverPort;

 // dans le @BeforeClass
 // Créer un objet JunitHelper
 junitHelper = new JunitHelper();

 // Pour MongoDB (exemple)
 databasePort = junitHelper.findAvailablePort();
 final MongodStarter starter = MongodStarter.getDefaultInstance();
 // On utilise le port
 mongodExecutable = starter.prepare(new MongodConfigBuilder()
     .version(Version.Main.PRODUCTION)
     .net(new Net(databasePort, Network.localhostIsIPv6()))
     .build());
 mongod = mongodExecutable.start();

 // Pour le serveur web (ici Logbook)
 // On initialise le mongoDbAccess pour le service
 mongoDbAccess =
     MongoDbAccessFactory.create(
         new DbConfigurationImpl(DATABASE_HOST, databasePort,
             "vitam-test"));
 // On alloue un port pour le serveur Web
 serverPort = junitHelper.findAvailablePort();

 // On lit le fichier de configuration par défaut présent dans le src/test/resources
 File logbook = PropertiesUtils.findFile(LOGBOOK_CONF);
 // On extraie la configuration
 LogbookConfiguration realLogbook = PropertiesUtils.readYaml(logbook, LogbookConfiguration.class);
 // On change le port
 realLogbook.setDbPort(databasePort);
 // On sauvegarde le fichier (dans un nouveau fichier différent) (static File)
 newLogbookConf = File.createTempFile("test", LOGBOOK_CONF, logbook.getParentFile());
 PropertiesUtils.writeYaml(newLogbookConf, realLogbook);

 // On utilise le port pour RestAssured
 RestAssured.port = serverPort;
 RestAssured.basePath = REST_URI;

 // On démarre le serveur
 try {
    vitamServer = LogbookApplication.startApplication(new String[] {
       // On utilise le fichier de configuration ainsi créé
        newLogbookConf.getAbsolutePath(),
        Integer.toString(serverPort)});
    ((BasicVitamServer) vitamServer).start();
 } catch (FileNotFoundException | VitamApplicationServerException e) {
    LOGGER.error(e);
    throw new IllegalStateException(
        "Cannot start the Logbook Application Server", e);
}

// Dans le @AfterClass
// On arrête le serveur
try {
    ((BasicVitamServer) vitamServer).stop();
} catch (final VitamApplicationServerException e) {
    LOGGER.error(e);
}
mongoDbAccess.close();
junitHelper.releasePort(serverPort);
// On arrête MongoDb
mongod.stop();
mongodExecutable.stop();
junitHelper.releasePort(databasePort);
// On efface le fichier temporaire
newLogbookConf.delete();