0

Je suis cela tutorielscomment une utilisation embarquée ElasticSearch pour les tests d'intégration

  1. https://orrsella.com/2014/10/28/embedded-elasticsearch-server-for-scala-integration-tests/

Tout ce que je suis en train de suivre le lien parce que je me sers ElasticSearch 1.6.0 mais il utilise NodeClient et je veux à utiliser transportClient mais je reçois exception

org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [] 
[info] at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:305) 
[info] at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:200) 
[info] at org.elasticsearch.client.transport.support.InternalTransportIndicesAdminClient.execute(InternalTransportIndicesAdminClient.java:86) 
[info] at org.elasticsearch.client.support.AbstractIndicesAdminClient.create(AbstractIndicesAdminClient.java:367) 
[info] at org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder.doExecute(CreateIndexRequestBuilder.java:250) 
[info] at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:91) 
[info] at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:65) 
[info] at testcontrollers.campaign.ElasticsearchServer.createAndWaitForIndex(ElasticsearchServer.scala:40) 
[info] at testcontrollers.campaign.CampaignTestSearch.<init>(CampaignTestSearch.scala:41) 
[info] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 

voici le code

class ElasticsearchServer { 
    val log = LoggerFactory.getLogger(this.getClass) 
    private val clusterName = "testcluster" 
    private val dataDir = Files.createTempDirectory("elasticsearch_test_data_").toFile 
    private val settings = ImmutableSettings.settingsBuilder 
    .put("path.data", dataDir.toString) 
    .put("cluster.name", clusterName) 
    .put("node.local",true) 
    .build 

    def client: TransportClient ={ 
    val client=new TransportClient(settings) 
    .addTransportAddress(new InetSocketTransportAddress("127.0.0.1", 9300)) 
    client 
    } 
    def stop(): Unit = { 
    client.close(); 

    try { 
     FileUtils.forceDelete(dataDir) 
    } catch { 
     case e: Exception => // dataDir cleanup failed 
    } 
    } 

    def createAndWaitForIndex(index: String): Unit = { 
     client.admin.indices.prepareCreate(index).execute.actionGet() 
     client.admin.cluster.prepareHealth(index).setWaitForActiveShards(1).execute.actionGet() 
    } 
} 

class CampaignTestSearch extends PlaySpec{ 
    val server = new ElasticsearchServer 
    server.createAndWaitForIndex("arteciatetestdb") 
val client=server.client 

val response = client.prepareSearch("dbtest") 
     .setTypes(CAMPAIGN_COLLECTION_NAME) 
     .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) 
     .addFields("uuid","campaignName","artworkID","activationDate","_source") 
     .setQuery(query) 
     .execute() 
     .actionGet() 
    } 

Répondre

1

D'abord, vous devez garder à l'esprit que les nouvelles versions de ElasticSearch ont abandonné le soutien à l'utiliser intégré, pour des raisons qui sont décrites dans this blog post. Dans cette optique, dans de nombreuses versions d'elasticsearch, vous pouvez utiliser la classe de support ESIntegTestCase et faire en sorte que votre classe de test d'intégration l'étende afin de prendre en charge la recherche élastique intégrée lors des tests. Vous pouvez en lire plus à ce sujet au their official documentation.

A partir de leurs documents officiels:

public class Mytests extends ESIntegTestCase { 

    @Override 
    protected Settings nodeSettings(int nodeOrdinal) { 
     return Settings.builder().put(super.nodeSettings(nodeOrdinal)) 
      .put("node.mode", "network") 
      .build(); 
    } 

} 

En version 1.x il y avait une classe nommée ElasticsearchTestCase qui donnerait un soutien pour les tests unitaires avec élastique, vérifiez this link on their official repository pour un exemple complet sur la façon de l'utiliser.

+0

Je ne peux pas mettre à niveau vers les versions les plus récentes de ES en ce moment il y a du travail pour la version ES 1.6.0 que j'utilise actuellement – swaheed

+0

oui, mais la classe de test avait un nom différent, veuillez vérifier ma réponse mise à jour ci-dessus avec un lien vers leur repo officiel avec un exemple. –