diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasChildQueryBuilderTests.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasChildQueryBuilderTests.java index f764364380fcf..546677a2be4f4 100644 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasChildQueryBuilderTests.java +++ b/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasChildQueryBuilderTests.java @@ -88,9 +88,9 @@ protected Collection> getPlugins() { } @Override - protected Settings indexSettings() { + protected Settings createTestIndexSettings() { return Settings.builder() - .put(super.indexSettings()) + .put(super.createTestIndexSettings()) .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT) .build(); } diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasParentQueryBuilderTests.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasParentQueryBuilderTests.java index 63d94f39b2231..6d6822007eee3 100644 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasParentQueryBuilderTests.java +++ b/modules/parent-join/src/test/java/org/elasticsearch/join/query/HasParentQueryBuilderTests.java @@ -73,9 +73,9 @@ protected Collection> getPlugins() { } @Override - protected Settings indexSettings() { + protected Settings createTestIndexSettings() { return Settings.builder() - .put(super.indexSettings()) + .put(super.createTestIndexSettings()) .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT) .build(); } diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentIdQueryBuilderTests.java b/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentIdQueryBuilderTests.java index 5a128f4d305fb..83441ef92d2b4 100644 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentIdQueryBuilderTests.java +++ b/modules/parent-join/src/test/java/org/elasticsearch/join/query/ParentIdQueryBuilderTests.java @@ -62,9 +62,9 @@ protected Collection> getPlugins() { } @Override - protected Settings indexSettings() { + protected Settings createTestIndexSettings() { return Settings.builder() - .put(super.indexSettings()) + .put(super.createTestIndexSettings()) .put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT) .build(); } diff --git a/server/src/test/java/org/elasticsearch/index/query/SimpleQueryStringBuilderTests.java b/server/src/test/java/org/elasticsearch/index/query/SimpleQueryStringBuilderTests.java index a2d6e3ab361b7..6cde10308c6e7 100644 --- a/server/src/test/java/org/elasticsearch/index/query/SimpleQueryStringBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/index/query/SimpleQueryStringBuilderTests.java @@ -233,7 +233,7 @@ public void testFieldsCannotBeSetToNull() { public void testDefaultFieldParsing() throws IOException { assumeTrue("5.x behaves differently, so skip on non-6.x indices", - indexVersionCreated.onOrAfter(Version.V_6_0_0_alpha1)); + indexSettings().getIndexVersionCreated().onOrAfter(Version.V_6_0_0_alpha1)); String query = randomAlphaOfLengthBetween(1, 10).toLowerCase(Locale.ROOT); String contentString = "{\n" + diff --git a/test/framework/src/main/java/org/elasticsearch/test/AbstractBuilderTestCase.java b/test/framework/src/main/java/org/elasticsearch/test/AbstractBuilderTestCase.java index fccec5f784f8b..0a11325311dd8 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/AbstractBuilderTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/test/AbstractBuilderTestCase.java @@ -19,6 +19,9 @@ package org.elasticsearch.test; +import com.carrotsearch.randomizedtesting.RandomizedTest; +import com.carrotsearch.randomizedtesting.SeedUtils; + import org.apache.lucene.index.IndexReader; import org.apache.lucene.util.Accountable; import org.elasticsearch.Version; @@ -84,6 +87,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.function.Function; import java.util.stream.Stream; @@ -124,14 +128,12 @@ public abstract class AbstractBuilderTestCase extends ESTestCase { ALIAS_TO_CONCRETE_FIELD_NAME.put(GEO_POINT_ALIAS_FIELD_NAME, GEO_POINT_FIELD_NAME); } - protected static Version indexVersionCreated; - private static ServiceHolder serviceHolder; private static ServiceHolder serviceHolderWithNoType; private static int queryNameId = 0; private static Settings nodeSettings; private static Index index; - private static Index indexWithNoType; + private static long nowInMillis; protected static Index getIndex() { return index; @@ -152,7 +154,7 @@ public static void beforeClass() { .build(); index = new Index(randomAlphaOfLengthBetween(1, 10), randomAlphaOfLength(10)); - indexWithNoType = new Index(randomAlphaOfLengthBetween(1, 10), randomAlphaOfLength(10)); + nowInMillis = randomNonNegativeLong(); } @Override @@ -173,15 +175,19 @@ protected static String createUniqueRandomName() { return queryName; } - protected Settings indexSettings() { + protected Settings createTestIndexSettings() { // we have to prefer CURRENT since with the range of versions we support it's rather unlikely to get the current actually. - indexVersionCreated = randomBoolean() ? Version.CURRENT + Version indexVersionCreated = randomBoolean() ? Version.CURRENT : VersionUtils.randomVersionBetween(random(), Version.V_6_0_0, Version.CURRENT); return Settings.builder() .put(IndexMetaData.SETTING_VERSION_CREATED, indexVersionCreated) .build(); } + protected static IndexSettings indexSettings() { + return serviceHolder.idxSettings; + } + protected static String expectedFieldName(String builderFieldName) { return ALIAS_TO_CONCRETE_FIELD_NAME.getOrDefault(builderFieldName, builderFieldName); } @@ -195,14 +201,24 @@ public static void afterClass() throws Exception { } @Before - public void beforeTest() throws IOException { + public void beforeTest() throws Exception { if (serviceHolder == null) { - serviceHolder = new ServiceHolder(nodeSettings, indexSettings(), getPlugins(), this, true); + assert serviceHolderWithNoType == null; + // we initialize the serviceHolder and serviceHolderWithNoType just once, but need some + // calls to the randomness source during its setup. In order to not mix these calls with + // the randomness source that is later used in the test method, we use the master seed during + // this setup + long masterSeed = SeedUtils.parseSeed(RandomizedTest.getContext().getRunnerSeedAsString()); + RandomizedTest.getContext().runWithPrivateRandomness(masterSeed, (Callable) () -> { + serviceHolder = new ServiceHolder(nodeSettings, createTestIndexSettings(), getPlugins(), nowInMillis, + AbstractBuilderTestCase.this, true); + serviceHolderWithNoType = new ServiceHolder(nodeSettings, createTestIndexSettings(), getPlugins(), nowInMillis, + AbstractBuilderTestCase.this, false); + return null; + }); } + serviceHolder.clientInvocationHandler.delegate = this; - if (serviceHolderWithNoType == null) { - serviceHolderWithNoType = new ServiceHolder(nodeSettings, indexSettings(), getPlugins(), this, false); - } serviceHolderWithNoType.clientInvocationHandler.delegate = this; } @@ -305,13 +321,15 @@ private static class ServiceHolder implements Closeable { private final BitsetFilterCache bitsetFilterCache; private final ScriptService scriptService; private final Client client; - private final long nowInMillis = randomNonNegativeLong(); + private final long nowInMillis; ServiceHolder(Settings nodeSettings, Settings indexSettings, Collection> plugins, + long nowInMillis, AbstractBuilderTestCase testCase, boolean registerType) throws IOException { + this.nowInMillis = nowInMillis; Environment env = InternalSettingsPreparer.prepareEnvironment(nodeSettings); PluginsService pluginsService; pluginsService = new PluginsService(nodeSettings, null, env.modulesFile(), env.pluginsFile(), plugins);