asticsearch 6 ESIntegTestCase "свойство кодовой базы уже установлено" - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь перейти на ES 6.2 с 2.3.4.

Ранее мы тестировали интеграционный код с помощью NodeBuilder и запускали локальный узел ES.Я предпочел бы поменять это для использования ESIntegTestCase, если это возможно.

Однако, когда я пытаюсь запустить интеграционный тест, я получаю следующую ошибку:

at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:164) at org.elasticsearch.test.ESTestCase.<clinit>(ESTestCase.java:190) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at com.carrotsearch.randomizedtesting.RandomizedRunner$2.run(RandomizedRunner.java:592) Caused by: java.lang.IllegalStateException: codebase property already set: codebase.metrics-core -> file:/Users/me/.m2/repository/io/dropwizard/metrics/metrics-core/3.1.0/metrics-core-3.1.0.jar, cannot set to file:/Users/me/.m2/repository/com/yammer/metrics/metrics-core/2.2.0/metrics-core-2.2.0.jar at org.elasticsearch.bootstrap.Security.readPolicy(Security.java:236) at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:139) ... 4 more

Что это значит, и как я могу это исправить?

Мой тестовый класс помечен: @RunWith(com.carrotsearch.randomizedtesting.RandomizedRunner.class) и расширяет ESIntegTestCase, если это вообще помогает.

Спасибо залюбая помощь, которую может предложить каждый!

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Если при разработке плагина все еще требуется встроенный ES, то, возможно, установка системного свойства -Dtests.gradle=false может обойти эту проблему.

, поскольку BootstrapForTesting.java L175 содержит:

if (System.getProperty("tests.gradle") == null) {
  addClassCodebase(codebases, "plugin-classloader", "org.elasticsearch.plugins.ExtendedPluginsClassLoader");
  addClassCodebase(codebases, "elasticsearch-secure-sm", "org.elasticsearch.secure_sm.SecureSM");
}
0 голосов
/ 14 июня 2018

Согласно этой проблеме: https://github.com/elastic/elasticsearch/issues/21544 ESIntegTestCase также больше не должен использоваться, если вы не тестируете плагин или что-то в этом роде (см. Публикацию ответов здесь: https://discuss.elastic.co/t/how-do-i-deal-with-this-particular-jar-hell-issue/135662/4).

См. Здесьдля получения дополнительной информации: https://discuss.elastic.co/t/codebase-property-already-set-when-running-esintegtestcase/135659/2

Лучшая лучшая методология интеграционного тестирования с использованием эластичного поиска, которую я нашел сейчас, упоминается в публикации обсуждения: используйте testcontainers -asticsearch (https://github.com/dadoonet/testcontainers-java-module-elasticsearch)

Вам нужен докерустановлен на машине, на которой выполняются тесты, но он автоматически вытянет нужный образ докера, запустит контейнер и снова снесет его в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...