java - que - Elasticsearch: se encontrĂ³ el infierno del tarro en el classpath de prueba
que significa classpath en java (1)
Quiero realizar pruebas unitarias en Elasticsearch para las que estoy usando Java-test-framework
Estoy usando Elasticsearch-1.6.0
y refiriéndome a este enlace para obtener ayuda https://www.elastic.co/guide/en/elasticsearch/reference/1.6/using-elasticsearch-test-classes.html https://github.com/elastic/elasticsearch/blob/master/core/src/test/java/org/elasticsearch/action/search/SearchRequestBuilderTests.java
aquí está el código
class CampaignESTest extends ESTestCase {
def getCLient():MockTransportClient={
val settings = Settings.builder()
.put(Environment.PATH_HOME_SETTING.getKey(), Files.createTempDir().toString())
.build();
val client = new MockTransportClient(settings);
client
}
}
class CampaignTestSearch extends PlaySpec{
val client=new CampaignESTest
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()
}
Estoy recibiendo estas excepciones
Exception encountered when attempting to run a suite with class name: org.scalatest.DeferredAbortedSuite *** ABORTED ***
[info] java.lang.ExceptionInInitializerError:
[info] at org.elasticsearch.test.ESTestCase.<clinit>(ESTestCase.java:138)
[info] at testcontrollers.campaign.CampaignTestSearch.<init>(CampaignTestSearch.scala:40)
[info] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[info] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
[info] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[info] at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
[info] at java.lang.Class.newInstance(Class.java:442)
[info] at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:468)
[info] at sbt.ForkMain$Run$2.call(ForkMain.java:296)
[info] at sbt.ForkMain$Run$2.call(ForkMain.java:286)
[info] ...
[info] Cause: java.lang.RuntimeException: found jar hell in test classpath
[info] at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:90)
[info] at org.elasticsearch.test.ESTestCase.<clinit>(ESTestCase.java:138)
[info] at testcontrollers.campaign.CampaignTestSearch.<init>(CampaignTestSearch.scala:40)
[info] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[info] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
[info] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[info] at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
[info] at java.lang.Class.newInstance(Class.java:442)
[info] at org.scalatest.tools.Framework$ScalaTestTask.execute(Framework.scala:468)
[info] at sbt.ForkMain$Run$2.call(ForkMain.java:296)
[info] ...
[info] Cause: java.nio.file.NoSuchFileException: /home/testproject/target/web/classes/test
[info] at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
[info] at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
[info] at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
[info] at sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
[info] at sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:144)
[info] at sun.nio.fs.LinuxFileSystemProvider.readAttributes(LinuxFileSystemProvider.java:99)
[info] at java.nio.file.Files.readAttributes(Files.java:1737)
[info] at java.nio.file.FileTreeWalker.getAttributes(FileTreeWalker.java:219)
[info] at java.nio.file.FileTreeWalker.visit(FileTreeWalker.java:276)
[info] at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:322)
obteniendo una excepción en esta línea
val client=new CampaignESTest
en la clase CampaignTestSearch
Aquí están las dependencias en el archivo build.sbt
libraryDependencies ++= Seq(filters,
"org.scalatest" %% "scalatest" % "2.2.6" % "test"withSources() withJavadoc(),
"org.scalatestplus" %% "play" % "1.4.0-M3" % "test",
"com.esotericsoftware.kryo" % "kryo" % "2.10",
"org.mongodb" %% "casbah" % "2.8.0",
"org.slf4j" % "slf4j-api" % "1.6.4",
"org.elasticsearch" % "elasticsearch" % "1.6.0",
"org.elasticsearch.test" % "framework" % "5.0.0" % "test",
"org.apache.lucene" % "lucene-test-framework" % "4.10.4" % "test",
"com.carrotsearch.randomizedtesting" % "randomizedtesting-runner" % "1.6.0" % "test",
"org.apache.lucene" % "lucene-codecs" % "4.10.4" % "test",
"org.apache.logging.log4j" % "log4j-core" % "2.8.2",
"org.apache.logging.log4j" % "log4j-slf4j-impl" % "2.8.2" ,
"org.apache.logging.log4j" % "log4j-api" % "2.8.2",
"com.typesafe.akka" %% "akka-actor" % "2.3.6",
"com.typesafe.akka" % "akka-testkit_2.11" % "2.3.6",
"ch.qos.logback" % "logback-core" % "1.0.9",
"com.github.nscala-time" %% "nscala-time" % "2.0.0",
"com.hazelcast" % "hazelcast" % "3.5",
"com.hazelcast" % "hazelcast-client" % "3.5",
"com.twitter" % "chill-bijection_2.11" % "0.7.0",
"com.github.slugify" % "slugify" % "2.1.3" ,
"org.mindrot" % "jbcrypt" % "0.3m",
"org.codehaus.groovy" % "groovy-all" % "2.4.0",
"org.apache.lucene" % "lucene-expressions" % "4.10.4",
"com.restfb" % "restfb" % "1.19.0",
"org.twitter4j" % "twitter4j-core" % "4.0.0",
"org.scribe" % "scribe" % "1.3.5",
"com.google.code.gson" % "gson" % "2.6.2",
"com.google.oauth-client" % "google-oauth-client" % "1.20.0",
"com.google.api.client" % "google-api-client-auth-oauth2" % "1.2.0-alpha",
"com.google.api-client" % "google-api-client" % "1.20.0",
"com.google.http-client" % "google-http-client-jackson" % "1.20.0",
"com.google.apis" % "google-api-services-oauth2" % "v2-rev120-1.20.0",
"com.google.oauth-client" % "google-oauth-client-appengine" % "1.20.0",
"com.google.oauth-client" % "google-oauth-client-java6" % "1.20.0",
"com.google.oauth-client" % "google-oauth-client-jetty" % "1.20.0",
"com.google.oauth-client" % "google-oauth-client-servlet" % "1.20.0",
"com.google.apis" % "google-api-services-calendar" % "v3-rev120-1.19.1",
"com.google.inject" % "guice" % "3.0",
"org.mockito" % "mockito-all" % "1.10.19")
¿Cómo se resolverán estas excepciones? También probé la solución aquí. Bit de Excepción de Tiempo de Ejecución de Java Jar hell cuando intento crear una clase JarHell
en el JarHell
org/elasticsearch/bootstarp
, no me permite crearla diciendo que el tipo ya existe. También intenté buscar en la Clase pero no lo hice. encontrado, por favor guía
Como observa @Val, un marco de prueba para ES v5 no funcionará con ES v1.
¿Por qué no actualizar a una versión más reciente de ES?
Como recuerdo, el viejo v1 tiene algunas fallas de seguridad serias. Plus ES 5 tiene mejor rendimiento, etc.
La otra cosa que puede hacer es desacoplar sus pruebas de la versión exacta de ES, mediante el uso de una biblioteca http como Jest o ESJC .