diff --git a/src/test/java/org/elasticsearch/indices/analysis/PreBuiltAnalyzerIntegrationTests.java b/src/test/java/org/elasticsearch/indices/analysis/PreBuiltAnalyzerIntegrationTests.java index cd438754d73..3d994edbf82 100644 --- a/src/test/java/org/elasticsearch/indices/analysis/PreBuiltAnalyzerIntegrationTests.java +++ b/src/test/java/org/elasticsearch/indices/analysis/PreBuiltAnalyzerIntegrationTests.java @@ -28,6 +28,7 @@ import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.test.ElasticsearchIntegrationTest; +import org.elasticsearch.test.ElasticsearchTestCase; import org.junit.Test; import java.lang.reflect.Field; @@ -40,7 +41,7 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; @ElasticsearchIntegrationTest.ClusterScope(scope = ElasticsearchIntegrationTest.Scope.SUITE) -@ElasticsearchIntegrationTest.CompatibilityVersion(version = Version.V_1_2_0_ID) // we throw an exception if we create an index with _field_names that is 1.3 +@ElasticsearchTestCase.CompatibilityVersion(version = Version.V_1_2_0_ID) // we throw an exception if we create an index with _field_names that is 1.3 public class PreBuiltAnalyzerIntegrationTests extends ElasticsearchIntegrationTest { @Override diff --git a/src/test/java/org/elasticsearch/test/ElasticsearchIntegrationTest.java b/src/test/java/org/elasticsearch/test/ElasticsearchIntegrationTest.java index 78a5b784f74..b09eef5d437 100644 --- a/src/test/java/org/elasticsearch/test/ElasticsearchIntegrationTest.java +++ b/src/test/java/org/elasticsearch/test/ElasticsearchIntegrationTest.java @@ -188,13 +188,6 @@ public abstract class ElasticsearchIntegrationTest extends ElasticsearchTestCase */ public static final String SETTING_INDEX_SEED = "index.tests.seed"; - /** - * Property that allows to adapt the tests behaviour to older features/bugs based on the input version - */ - public static final String TESTS_COMPATIBILITY = "tests.compatibility"; - - private static final Version COMPATIBILITY_VERSION = Version.fromString(compatibilityVersionProperty()); - /** * Threshold at which indexing switches from frequently async to frequently bulk. */ @@ -267,7 +260,7 @@ public abstract class ElasticsearchIntegrationTest extends ElasticsearchTestCase } else { long masterSeed = SeedUtils.parseSeed(RandomizedContext.current().getRunnerSeedAsString()); int numClientNodes; - if (COMPATIBILITY_VERSION.before(Version.V_1_2_0)) { + if (globalCompatibilityVersion().before(Version.V_1_2_0)) { numClientNodes = 0; } else { numClientNodes = InternalTestCluster.DEFAULT_NUM_CLIENT_NODES; @@ -1651,44 +1644,4 @@ public abstract class ElasticsearchIntegrationTest extends ElasticsearchTestCase @Ignore public @interface SuiteScopeTest { } - - - /** - * If a test is annotated with {@link org.elasticsearch.test.ElasticsearchIntegrationTest.CompatibilityVersion} - * all randomized settings will only contain settings or mappings which are compatible with the specified version ID. - */ - @Retention(RetentionPolicy.RUNTIME) - @Target({ElementType.TYPE}) - @Ignore - public @interface CompatibilityVersion { - int version(); - } - - /** - * Retruns the tests compatibility version. - */ - public Version compatibilityVersion() { - return compatibiltyVersion(getClass()); - } - - private Version compatibiltyVersion(Class clazz) { - if (clazz == Object.class || clazz == ElasticsearchIntegrationTest.class) { - return COMPATIBILITY_VERSION; - } - CompatibilityVersion annotation = clazz.getAnnotation(CompatibilityVersion.class); - if (annotation != null) { - return Version.smallest(Version.fromId(annotation.version()), COMPATIBILITY_VERSION); - } - return compatibiltyVersion(clazz.getSuperclass()); - } - - private static String compatibilityVersionProperty() { - final String version = System.getProperty(TESTS_COMPATIBILITY); - if (Strings.hasLength(version)) { - return version; - } - return System.getProperty(TESTS_BACKWARDS_COMPATIBILITY_VERSION); - } - - } diff --git a/src/test/java/org/elasticsearch/test/ElasticsearchTestCase.java b/src/test/java/org/elasticsearch/test/ElasticsearchTestCase.java index cdf28192286..545ca6925a7 100644 --- a/src/test/java/org/elasticsearch/test/ElasticsearchTestCase.java +++ b/src/test/java/org/elasticsearch/test/ElasticsearchTestCase.java @@ -42,10 +42,15 @@ import org.elasticsearch.test.store.MockDirectoryHelper; import org.junit.After; import org.junit.AfterClass; import org.junit.BeforeClass; +import org.junit.Ignore; import java.io.Closeable; import java.io.File; import java.io.IOException; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.net.URI; @@ -74,6 +79,13 @@ public abstract class ElasticsearchTestCase extends AbstractRandomizedTest { public static final String JAVA_SECURTY_POLICY = System.getProperty("java.security.policy"); + /** + * Property that allows to adapt the tests behaviour to older features/bugs based on the input version + */ + private static final String TESTS_COMPATIBILITY = "tests.compatibility"; + + private static final Version GLOABL_COMPATIBILITY_VERSION = Version.fromString(compatibilityVersionProperty()); + public static final boolean ASSERTIONS_ENABLED; static { boolean enabled = false; @@ -165,7 +177,16 @@ public abstract class ElasticsearchTestCase extends AbstractRandomizedTest { } private static XContentType randomXContentType() { - return randomFrom(XContentType.values()); + if (globalCompatibilityVersion().onOrAfter(Version.V_1_2_0)) { + return randomFrom(XContentType.values()); + } else { + // CBOR was added in 1.2.0 earlier version can't derive the format + XContentType type = randomFrom(XContentType.values()); + while(type == XContentType.CBOR) { + type = randomFrom(XContentType.values()); + } + return type; + } } @AfterClass @@ -309,4 +330,54 @@ public abstract class ElasticsearchTestCase extends AbstractRandomizedTest { public static String[] generateRandomStringArray(int maxArraySize, int maxStringSize) { return generateRandomStringArray(maxArraySize, maxStringSize, false); } + + + /** + * If a test is annotated with {@link org.elasticsearch.test.ElasticsearchTestCase.CompatibilityVersion} + * all randomized settings will only contain settings or mappings which are compatible with the specified version ID. + */ + @Retention(RetentionPolicy.RUNTIME) + @Target({ElementType.TYPE}) + @Ignore + public @interface CompatibilityVersion { + int version(); + } + + /** + * Returns a global compatibility version that is set via the + * {@value #TESTS_COMPATIBILITY} or {@value #TESTS_BACKWARDS_COMPATIBILITY_VERSION} system property. + * If both are unset the current version is used as the global compatibility version. This + * compatibility version is used for static randomization. For per-suite compatibility version see + * {@link #compatibilityVersion()} + */ + public static Version globalCompatibilityVersion() { + return GLOABL_COMPATIBILITY_VERSION; + } + + /** + * Retruns the tests compatibility version. + */ + public Version compatibilityVersion() { + return compatibiltyVersion(getClass()); + } + + private Version compatibiltyVersion(Class clazz) { + if (clazz == Object.class || clazz == ElasticsearchIntegrationTest.class) { + return globalCompatibilityVersion(); + } + CompatibilityVersion annotation = clazz.getAnnotation(CompatibilityVersion.class); + if (annotation != null) { + return Version.smallest(Version.fromId(annotation.version()), compatibiltyVersion(clazz.getSuperclass())); + } + return compatibiltyVersion(clazz.getSuperclass()); + } + + private static String compatibilityVersionProperty() { + final String version = System.getProperty(TESTS_COMPATIBILITY); + if (Strings.hasLength(version)) { + return version; + } + return System.getProperty(TESTS_BACKWARDS_COMPATIBILITY_VERSION); + } + }