[TEST] Expose tests.filter for elasticsearch tests.

`-Dtests.filter` allows to pass filter expressions to the elasticsearch
tests. This allows to filter test annotaged with TestGroup annotations
like @Slow, @Nightly, @Backwards, @Integration with a boolean expresssion like:

 * to run only backwards tests run:
     `mvn -Dtests.bwc.version=X.Y.Z -Dtests.filter="@backwards"`
 * to run all integration tests but skip slow tests run:
     `mvn -Dtests.filter="@integration and not @slow"
 * to take defaults into account ie run all test as well as backwards:
     `mvn -Dtests.filter="default and @backwards"

This feature is a more powerful alternative to flags like
`-Dtests.nighly=true|false` etc.

Closes #6703
This commit is contained in:
Simon Willnauer 2014-07-03 10:52:29 +02:00
parent 53f2301eea
commit 9ddfaf3aaf
14 changed files with 63 additions and 22 deletions

View File

@ -62,6 +62,29 @@ Run any test methods that contain 'esi' (like: ...r*esi*ze...).
mvn test "-Dtests.method=*esi*" mvn test "-Dtests.method=*esi*"
------------------------------- -------------------------------
You can also filter tests by certain annotations ie:
* `@Slow` - tests that are know to take a long time to execute
* `@Nightly` - tests that only run in nightly builds (disabled by default)
* `@Integration` - integration tests
* `@Backwards` - backwards compatibility tests (disabled by default)
* `@AwaitsFix` - tests that are waiting for a bugfix (disabled by default)
* `@BadApple` - tests that are known to fail randomly (disabled by default)
Those annotation names can be combined into a filter expression like:
------------------------------------------------
mvn test -Dtests.filter="@nightly and not @slow"
------------------------------------------------
to run all nightly test but not the ones that are slow. `tests.filter` supports
the boolean operators `and, or, not` and grouping ie:
---------------------------------------------------------------
mvn test -Dtests.filter="@nightly and not(@slow or @backwards)"
---------------------------------------------------------------
=== Seed and repetitions. === Seed and repetitions.
Run with a given seed (seed is a hex-encoded long). Run with a given seed (seed is a hex-encoded long).
@ -184,14 +207,14 @@ To run backwards compatibiilty tests untar or unzip a release and run the tests
with the following command: with the following command:
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
mvn test -Dtests.bwc=true -Dtests.bwc.version=x.y.z -Dtests.bwc.path=/path/to/elasticsearch mvn test -Dtests.filter="@backwards" -Dtests.bwc.version=x.y.z -Dtests.bwc.path=/path/to/elasticsearch
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
If the elasticsearch release is placed under `./backwards/elasticsearch-x.y.z` the path If the elasticsearch release is placed under `./backwards/elasticsearch-x.y.z` the path
can be omitted: can be omitted:
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
mvn test -Dtests.bwc=true -Dtests.bwc.version=x.y.z mvn test -Dtests.filter="@backwards" -Dtests.bwc.version=x.y.z
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
To setup the bwc test environment execute the following steps (provided you are To setup the bwc test environment execute the following steps (provided you are

View File

@ -501,6 +501,7 @@
<tests.network>${tests.network}</tests.network> <tests.network>${tests.network}</tests.network>
<tests.cluster>${tests.cluster}</tests.cluster> <tests.cluster>${tests.cluster}</tests.cluster>
<tests.heap.size>${tests.heap.size}</tests.heap.size> <tests.heap.size>${tests.heap.size}</tests.heap.size>
<tests.filter>${tests.filter}</tests.filter>
<es.node.local>${env.ES_TEST_LOCAL}</es.node.local> <es.node.local>${env.ES_TEST_LOCAL}</es.node.local>
<es.node.mode>${es.node.mode}</es.node.mode> <es.node.mode>${es.node.mode}</es.node.mode>
<es.logger.level>${es.logger.level}</es.logger.level> <es.logger.level>${es.logger.level}</es.logger.level>

View File

@ -21,6 +21,7 @@ package org.apache.lucene.search.postingshighlight;
import org.apache.lucene.search.highlight.DefaultEncoder; import org.apache.lucene.search.highlight.DefaultEncoder;
import org.apache.lucene.search.highlight.SimpleHTMLEncoder; import org.apache.lucene.search.highlight.SimpleHTMLEncoder;
import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.BytesRef;
import org.elasticsearch.test.ElasticsearchTestCase;
import org.junit.Test; import org.junit.Test;
import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.equalTo;
@ -28,7 +29,7 @@ import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.MatcherAssert.assertThat;
public class CustomPassageFormatterTests { public class CustomPassageFormatterTests extends ElasticsearchTestCase {
@Test @Test
public void testSimpleFormat() { public void testSimpleFormat() {

View File

@ -77,12 +77,12 @@ public abstract class AbstractRandomizedTest extends RandomizedTest {
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE) @Target(ElementType.TYPE)
@TestGroup(enabled = false, sysProperty = TESTS_BACKWARDS_COMPATIBILITY) @TestGroup(enabled = false, sysProperty = TESTS_BACKWARDS_COMPATIBILITY)
public @interface BackwardsCompatibilityTest { public @interface Backwards {
} }
/** /**
* Key used to set the path for the elasticsearch executable used to run backwards compatibility tests from * Key used to set the path for the elasticsearch executable used to run backwards compatibility tests from
* via the commandline -D{@value #TESTS_BACKWARDS_COMPATIBILITY_PATH} * via the commandline -D{@value #TESTS_BACKWARDS_COMPATIBILITY}
*/ */
public static final String TESTS_BACKWARDS_COMPATIBILITY = "tests.bwc"; public static final String TESTS_BACKWARDS_COMPATIBILITY = "tests.bwc";
@ -101,7 +101,7 @@ public abstract class AbstractRandomizedTest extends RandomizedTest {
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE) @Target(ElementType.TYPE)
@TestGroup(enabled = true, sysProperty = SYSPROP_INTEGRATION) @TestGroup(enabled = true, sysProperty = SYSPROP_INTEGRATION)
public @interface IntegrationTests { public @interface Integration {
} }
// -------------------------------------------------------------------- // --------------------------------------------------------------------

View File

@ -20,6 +20,7 @@ package org.elasticsearch.common.lucene;
import org.apache.lucene.util.Version; import org.apache.lucene.util.Version;
import org.elasticsearch.common.logging.ESLogger; import org.elasticsearch.common.logging.ESLogger;
import org.elasticsearch.common.logging.ESLoggerFactory; import org.elasticsearch.common.logging.ESLoggerFactory;
import org.elasticsearch.test.ElasticsearchTestCase;
import org.junit.Test; import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.MatcherAssert.assertThat;
@ -28,7 +29,7 @@ import static org.hamcrest.core.IsEqual.equalTo;
/** /**
* *
*/ */
public class LuceneTest { public class LuceneTest extends ElasticsearchTestCase {
/* /*

View File

@ -19,6 +19,7 @@
package org.elasticsearch.common.util; package org.elasticsearch.common.util;
import org.elasticsearch.test.ElasticsearchTestCase;
import org.junit.Test; import org.junit.Test;
import java.util.Arrays; import java.util.Arrays;
@ -30,7 +31,7 @@ import static org.hamcrest.Matchers.is;
/** /**
* *
*/ */
public class ArrayUtilsTests { public class ArrayUtilsTests extends ElasticsearchTestCase {
@Test @Test
public void binarySearch() throws Exception { public void binarySearch() throws Exception {

View File

@ -22,6 +22,7 @@ import org.elasticsearch.Version;
import org.elasticsearch.cluster.metadata.IndexMetaData; import org.elasticsearch.cluster.metadata.IndexMetaData;
import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.indices.analysis.PreBuiltCharFilters; import org.elasticsearch.indices.analysis.PreBuiltCharFilters;
import org.elasticsearch.test.ElasticsearchTestCase;
import org.junit.Test; import org.junit.Test;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
@ -30,7 +31,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
/** /**
* *
*/ */
public class PreBuiltCharFilterFactoryFactoryTests { public class PreBuiltCharFilterFactoryFactoryTests extends ElasticsearchTestCase {
@Test @Test
public void testThatDifferentVersionsCanBeLoaded() { public void testThatDifferentVersionsCanBeLoaded() {

View File

@ -24,12 +24,15 @@ import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.store.RAMDirectory;
import org.elasticsearch.common.lucene.Lucene; import org.elasticsearch.common.lucene.Lucene;
import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.mapper.DocumentMapper; import org.elasticsearch.index.mapper.DocumentMapper;
import org.elasticsearch.index.mapper.ParsedDocument; import org.elasticsearch.index.mapper.ParsedDocument;
import org.elasticsearch.index.mapper.MapperTestUtils; import org.elasticsearch.index.mapper.MapperTestUtils;
import org.elasticsearch.test.ElasticsearchLuceneTestCase;
import org.elasticsearch.test.ElasticsearchTestCase;
import org.junit.Test; import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.MatcherAssert.assertThat;
@ -38,11 +41,12 @@ import static org.hamcrest.Matchers.equalTo;
/** /**
* *
*/ */
public class DoubleIndexingDocTest { public class DoubleIndexingDocTest extends ElasticsearchLuceneTestCase {
@Test @Test
public void testDoubleIndexingSameDoc() throws Exception { public void testDoubleIndexingSameDoc() throws Exception {
IndexWriter writer = new IndexWriter(new RAMDirectory(), new IndexWriterConfig(Lucene.VERSION, Lucene.STANDARD_ANALYZER)); Directory dir = newDirectory();
IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(random(), TEST_VERSION_CURRENT, Lucene.STANDARD_ANALYZER));
String mapping = XContentFactory.jsonBuilder().startObject().startObject("type") String mapping = XContentFactory.jsonBuilder().startObject().startObject("type")
.startObject("properties").endObject() .startObject("properties").endObject()
@ -85,5 +89,8 @@ public class DoubleIndexingDocTest {
topDocs = searcher.search(mapper.mappers().smartName("field5").mapper().termQuery("3", null), 10); topDocs = searcher.search(mapper.mappers().smartName("field5").mapper().termQuery("3", null), 10);
assertThat(topDocs.totalHits, equalTo(2)); assertThat(topDocs.totalHits, equalTo(2));
writer.close();
reader.close();
dir.close();
} }
} }

View File

@ -33,6 +33,7 @@ import org.elasticsearch.index.fieldvisitor.CustomFieldsVisitor;
import org.elasticsearch.index.mapper.DocumentMapper; import org.elasticsearch.index.mapper.DocumentMapper;
import org.elasticsearch.index.mapper.ParsedDocument; import org.elasticsearch.index.mapper.ParsedDocument;
import org.elasticsearch.index.mapper.MapperTestUtils; import org.elasticsearch.index.mapper.MapperTestUtils;
import org.elasticsearch.test.ElasticsearchTestCase;
import org.junit.Test; import org.junit.Test;
import java.util.*; import java.util.*;
@ -43,7 +44,7 @@ import static org.hamcrest.Matchers.equalTo;
/** /**
* *
*/ */
public class StoredNumericValuesTest { public class StoredNumericValuesTest extends ElasticsearchTestCase{
@Test @Test
public void testBytesAndNumericRepresentation() throws Exception { public void testBytesAndNumericRepresentation() throws Exception {

View File

@ -28,6 +28,7 @@ import org.elasticsearch.index.store.DirectoryService;
import org.elasticsearch.index.store.Store; import org.elasticsearch.index.store.Store;
import org.elasticsearch.index.store.distributor.LeastUsedDistributor; import org.elasticsearch.index.store.distributor.LeastUsedDistributor;
import org.elasticsearch.index.store.ram.RamDirectoryService; import org.elasticsearch.index.store.ram.RamDirectoryService;
import org.elasticsearch.test.ElasticsearchTestCase;
import org.junit.Test; import org.junit.Test;
import java.io.IOException; import java.io.IOException;
@ -35,8 +36,9 @@ import java.io.IOException;
import static org.elasticsearch.common.settings.ImmutableSettings.Builder.EMPTY_SETTINGS; import static org.elasticsearch.common.settings.ImmutableSettings.Builder.EMPTY_SETTINGS;
import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
public class MergePolicySettingsTest { public class MergePolicySettingsTest extends ElasticsearchTestCase {
protected final ShardId shardId = new ShardId(new Index("index"), 1); protected final ShardId shardId = new ShardId(new Index("index"), 1);
@ -87,19 +89,19 @@ public class MergePolicySettingsTest {
IndexSettingsService service = new IndexSettingsService(new Index("test"), EMPTY_SETTINGS); IndexSettingsService service = new IndexSettingsService(new Index("test"), EMPTY_SETTINGS);
try { try {
new LogDocMergePolicyProvider(createStore(build(-0.1)), service).newMergePolicy().getNoCFSRatio(); new LogDocMergePolicyProvider(createStore(build(-0.1)), service).newMergePolicy().getNoCFSRatio();
assertThat("exception expected", false); fail("exception expected");
} catch (ElasticsearchIllegalArgumentException ex) { } catch (ElasticsearchIllegalArgumentException ex) {
} }
try { try {
new LogDocMergePolicyProvider(createStore(build(1.1)), service).newMergePolicy().getNoCFSRatio(); new LogDocMergePolicyProvider(createStore(build(1.1)), service).newMergePolicy().getNoCFSRatio();
assertThat("exception expected", false); fail("exception expected");
} catch (ElasticsearchIllegalArgumentException ex) { } catch (ElasticsearchIllegalArgumentException ex) {
} }
try { try {
new LogDocMergePolicyProvider(createStore(build("Falsch")), service).newMergePolicy().getNoCFSRatio(); new LogDocMergePolicyProvider(createStore(build("Falsch")), service).newMergePolicy().getNoCFSRatio();
assertThat("exception expected", false); fail("exception expected");
} catch (ElasticsearchIllegalArgumentException ex) { } catch (ElasticsearchIllegalArgumentException ex) {
} }

View File

@ -20,6 +20,7 @@
package org.elasticsearch.search.aggregations.support; package org.elasticsearch.search.aggregations.support;
import org.elasticsearch.search.aggregations.AggregationExecutionException; import org.elasticsearch.search.aggregations.AggregationExecutionException;
import org.elasticsearch.test.ElasticsearchTestCase;
import org.junit.Test; import org.junit.Test;
import java.util.ArrayList; import java.util.ArrayList;
@ -32,7 +33,7 @@ import static org.junit.Assert.fail;
/** /**
* *
*/ */
public class PathTests { public class PathTests extends ElasticsearchTestCase {
@Test @Test
public void testInvalidPaths() throws Exception { public void testInvalidPaths() throws Exception {

View File

@ -20,6 +20,7 @@ package org.elasticsearch.snapshots;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import org.elasticsearch.action.support.IndicesOptions; import org.elasticsearch.action.support.IndicesOptions;
import org.elasticsearch.test.ElasticsearchTestCase;
import org.junit.Test; import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.MatcherAssert.assertThat;
@ -27,7 +28,7 @@ import static org.hamcrest.Matchers.containsInAnyOrder;
/** /**
*/ */
public class SnapshotUtilsTests { public class SnapshotUtilsTests extends ElasticsearchTestCase {
@Test @Test
public void testIndexNameFiltering() { public void testIndexNameFiltering() {
assertIndexNameFiltering(new String[]{"foo", "bar", "baz"}, new String[]{}, new String[]{"foo", "bar", "baz"}); assertIndexNameFiltering(new String[]{"foo", "bar", "baz"}, new String[]{}, new String[]{"foo", "bar", "baz"});

View File

@ -18,6 +18,7 @@
*/ */
package org.elasticsearch.test; package org.elasticsearch.test;
import org.apache.lucene.util.AbstractRandomizedTest;
import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.discovery.DiscoveryModule; import org.elasticsearch.discovery.DiscoveryModule;
@ -43,12 +44,12 @@ import java.io.IOException;
* <p> * <p>
* Note: this base class is still experimental and might have bugs or leave external processes running behind. * Note: this base class is still experimental and might have bugs or leave external processes running behind.
* </p> * </p>
* Backwards compatibility tests are disabled by default via {@link BackwardsCompatibilityTest} annotation. * Backwards compatibility tests are disabled by default via {@link org.apache.lucene.util.AbstractRandomizedTest.Backwards} annotation.
* The following system variables control the test execution: * The following system variables control the test execution:
* <ul> * <ul>
* <li> * <li>
* <tt>{@value #TESTS_BACKWARDS_COMPATIBILITY}</tt> enables / disables * <tt>{@value #TESTS_BACKWARDS_COMPATIBILITY}</tt> enables / disables
* tests annotated with {@link BackwardsCompatibilityTest} (defaults to * tests annotated with {@link org.apache.lucene.util.AbstractRandomizedTest.Backwards} (defaults to
* <tt>false</tt>) * <tt>false</tt>)
* </li> * </li>
* <li> * <li>
@ -66,7 +67,7 @@ import java.io.IOException;
* *
*/ */
// the transportClientRatio is tricky here since we don't fully control the cluster nodes // the transportClientRatio is tricky here since we don't fully control the cluster nodes
@ElasticsearchBackwardsCompatIntegrationTest.BackwardsCompatibilityTest @AbstractRandomizedTest.Backwards
@ElasticsearchIntegrationTest.ClusterScope(minNumDataNodes = 0, maxNumDataNodes = 2, scope = ElasticsearchIntegrationTest.Scope.SUITE, numClientNodes = 0, transportClientRatio = 0.0) @ElasticsearchIntegrationTest.ClusterScope(minNumDataNodes = 0, maxNumDataNodes = 2, scope = ElasticsearchIntegrationTest.Scope.SUITE, numClientNodes = 0, transportClientRatio = 0.0)
@Ignore @Ignore
public abstract class ElasticsearchBackwardsCompatIntegrationTest extends ElasticsearchIntegrationTest { public abstract class ElasticsearchBackwardsCompatIntegrationTest extends ElasticsearchIntegrationTest {

View File

@ -168,7 +168,7 @@ import static org.hamcrest.Matchers.equalTo;
* </p> * </p>
*/ */
@Ignore @Ignore
@AbstractRandomizedTest.IntegrationTests @AbstractRandomizedTest.Integration
public abstract class ElasticsearchIntegrationTest extends ElasticsearchTestCase { public abstract class ElasticsearchIntegrationTest extends ElasticsearchTestCase {
private static TestCluster GLOBAL_CLUSTER; private static TestCluster GLOBAL_CLUSTER;
/** /**