Test d'intégration pour ES - Ahp06/Monitoring GitHub Wiki
Pour programmer les tests d’intégration il est possible de lancer un elasticsearch en mémoire en utilisant la classe Node et en lui passant des paramètres. Cependant pour les versions > 5.x, déclarer le « transport.type » est obligatoire et ne pas être local, j’utilise donc un plugin, ici Netty4.
static class PluginNode extends Node {
public PluginNode(Settings settings) {
super(InternalSettingsPreparer.prepareEnvironment(settings,null),
Collections.singletonList(Netty4Plugin.class));
}
}
Settings settings = Settings.builder()
.put("cluster.name","elasticsearch_integration")
.put("bootstrap.memory_lock",true)
.put("path.home", "target")
.put("transport.type", "netty4")
.put("http.enabled", false)
.put("http.type", "netty4")
.build();
Node elasticSearchNode = new PluginNode(settings);
elasticSearchNode.start();
client = elasticSearchNode.client();
Remarque importante:
Lors des tests je me suis rendu compte que si je manipulais la base de données aucun changement ne survenais. Il faut rafraichir l’index :
public static void refresh() {
getClient().admin().indices()
.prepareRefresh("update")
.execute()
.actionGet();
}
D’autres manières existent pour tester une application utilisant elasticsearch :
- https://www.elastic.co/guide/en/elasticsearch/reference/6.x/integration-tests.html (Utilisation de la classe ESIntegTestCase)
- La team elasticsearch a écrit un script ANT pour télécharger elasticsearch, lancer une Node (et éventuellement installer des plugins supplémentaires) puis stopper la Node à la fin des tests : http://david.pilato.fr/blog/2016/10/18/elasticsearch-real-integration-tests-updated-for-ga/
- Proposition de deux plugins pour lancer des tests d’intégration : https://blog.jetoile.fr/2017/07/tester-avec-elasticsearch.html
Personnellement je n’ai pas apprécié l’approche officielle que propose Elasticsearch. J’ai aussi testé d’utiliser le script ANT mais j’ai été obligé de le modifier à certains endroits pour avoir quelque chose de fonctionnel, j’ai donc finalement opté pour une solution plus simple que j’ai évoqué précédemment.