I am in the process of rewriting our integration tests to work with Elasticsearch 2.2.0.
I have an abstract test case class which extends org.elasticsearch.test.ESIntegTestCase
:
@ESIntegTestCase.ClusterScope(scope = ESIntegTestCase.Scope.SUITE, numDataNodes = 1)
@ThreadLeakScope(ThreadLeakScope.Scope.NONE)
public abstract class AbstractApplicationTest extends ESIntegTestCase {
...
@Override
protected Settings nodeSettings(int nodeOrdinal) {
return Settings.settingsBuilder()
.put(super.nodeSettings(nodeOrdinal))
.put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1)
.put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 1)
.put(Node.HTTP_ENABLED, true)
.put("script.groovy.sandbox.enabled", true)
.put("script.engine.groovy.inline.search", true)
.put("script.engine.groovy.inline.update", "true")
.put("script.inline", true)
.put("script.update", true)
.put("script.indexed", true)
.put("script.default_lang", "groovy")
.build();
}
@Override
protected Collection<Class<? extends Plugin>> nodePlugins() {
return pluginList(GroovyPlugin.class, DeleteByQueryPlugin.class, AnalysisICUPlugin.class);
}
@Before
public void setUpElastic() throws Exception {
// add the index and the mappings
prepareCreate("bokun")
.setSettings(Settings.builder().loadFromSource(loadFromClasspath("indices/settings.json")))
.addMapping(AccommodationSearchIndex.INDEX_ACCOMMODATION_TYPE, loadFromClasspath("indices/accommodation.json"))
.addMapping(AccommodationSearchIndex.INDEX_ROOM_TYPE, loadFromClasspath("indices/room.json"))
...
.execute().actionGet();
ensureYellow();
}
...
}
My test case class extends this abstract class. It has 6 tests, and constantly 3-4 of them fail with the "timed out waiting for yellow" message during the call ensureYellow()
above.
The test case scope is ESIntegTestCase.Scope.SUITE
, which means that a cluster will be created for each SUITE rather than test, and then I am creating the index and adding mappings before each test. I assume that after each test the index is deleted, as this page states: Integration tests | Elasticsearch Guide [8.11] | Elastic
By default the tests are run with unique cluster per test suite. Of course all indices and templates are deleted between each test.
Does anyone know what I am doing wrong here?
P.S. I am using SBT to run my tests.