Add facility to index in random order
Tests are more reproducible if documents are indexed in random order with random flushes/refreshes etc. in order to catch corner cases where doc Ids are used for tie-breaking and tests rely on a certain order.
This commit is contained in:
parent
eaa6bebe54
commit
bd466fe39d
|
@ -31,6 +31,7 @@ import org.elasticsearch.action.admin.indices.flush.FlushResponse;
|
|||
import org.elasticsearch.action.admin.indices.optimize.OptimizeResponse;
|
||||
import org.elasticsearch.action.admin.indices.refresh.RefreshResponse;
|
||||
import org.elasticsearch.action.get.GetResponse;
|
||||
import org.elasticsearch.action.index.IndexRequestBuilder;
|
||||
import org.elasticsearch.action.index.IndexResponse;
|
||||
import org.elasticsearch.action.support.broadcast.BroadcastOperationRequestBuilder;
|
||||
import org.elasticsearch.action.support.broadcast.BroadcastOperationResponse;
|
||||
|
@ -53,9 +54,8 @@ import org.elasticsearch.indices.IndexTemplateMissingException;
|
|||
import org.junit.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
||||
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertNoFailures;
|
||||
|
@ -386,4 +386,25 @@ public abstract class AbstractSharedClusterTest extends ElasticsearchTestCase {
|
|||
return actionGet;
|
||||
}
|
||||
|
||||
// TODO move this into a base class for integration tests
|
||||
public void indexRandom(String index, boolean forceRefresh, IndexRequestBuilder...builders) throws InterruptedException, ExecutionException {
|
||||
Random random = getRandom();
|
||||
List<IndexRequestBuilder> list = Arrays.asList(builders);
|
||||
Collections.shuffle(list, random);
|
||||
for (IndexRequestBuilder indexRequestBuilder : list) {
|
||||
indexRequestBuilder.execute().actionGet();
|
||||
if (frequently()) {
|
||||
if (rarely()) {
|
||||
client().admin().indices().prepareFlush(index).execute().get();
|
||||
} else if (rarely()) {
|
||||
client().admin().indices().prepareOptimize(index).setMaxNumSegments(between(1, 10)).setFlush(random.nextBoolean()).execute().get();
|
||||
}
|
||||
client().admin().indices().prepareRefresh(index).execute().get();
|
||||
}
|
||||
}
|
||||
if (forceRefresh) {
|
||||
client().admin().indices().prepareRefresh(index).execute().get();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -118,10 +118,11 @@ public class SimpleQueryTests extends AbstractSharedClusterTest {
|
|||
client().admin().indices().prepareCreate("test")
|
||||
.addMapping("type1", "field1", "type=string,analyzer=whitespace")
|
||||
.setSettings(ImmutableSettings.settingsBuilder().put("index.number_of_shards", 1)).execute().actionGet();
|
||||
|
||||
client().prepareIndex("test", "type1", "1").setSource("field1", "the quick brown fox").execute().actionGet();
|
||||
client().prepareIndex("test", "type1", "2").setSource("field1", "the quick lazy huge brown fox jumps over the tree").execute().actionGet();
|
||||
client().prepareIndex("test", "type1", "3").setSource("field1", "quick lazy huge brown", "field2", "the quick lazy huge brown fox jumps over the tree").setRefresh(true).execute().actionGet();
|
||||
indexRandom("test", true,
|
||||
client().prepareIndex("test", "type1", "3").setSource("field1", "quick lazy huge brown pidgin", "field2", "the quick lazy huge brown fox jumps over the tree"),
|
||||
client().prepareIndex("test", "type1", "1").setSource("field1", "the quick brown fox"),
|
||||
client().prepareIndex("test", "type1", "2").setSource("field1", "the quick lazy huge brown fox jumps over the tree")
|
||||
);
|
||||
|
||||
SearchResponse searchResponse = client().prepareSearch().setQuery(QueryBuilders.commonTerms("field1", "the quick brown").cutoffFrequency(3).lowFreqOperator(Operator.OR)).execute().actionGet();
|
||||
assertThat(searchResponse.getHits().totalHits(), equalTo(3l));
|
||||
|
@ -163,7 +164,6 @@ public class SimpleQueryTests extends AbstractSharedClusterTest {
|
|||
assertThat(searchResponse.getHits().totalHits(), equalTo(1l));
|
||||
assertThat(searchResponse.getHits().getHits()[0].getId(), equalTo("2"));
|
||||
|
||||
|
||||
searchResponse = client().prepareSearch().setQuery(QueryBuilders.commonTerms("field1", "the quick brown").cutoffFrequency(3).analyzer("standard")).execute().actionGet();
|
||||
assertThat(searchResponse.getHits().totalHits(), equalTo(3l));
|
||||
// standard drops "the" since its a stopword
|
||||
|
@ -205,8 +205,9 @@ public class SimpleQueryTests extends AbstractSharedClusterTest {
|
|||
.addMapping("type1", "field1", "type=string,omit_term_freq_and_positions=true")
|
||||
.setSettings(ImmutableSettings.settingsBuilder().put("index.number_of_shards", 1)).get();
|
||||
|
||||
client().prepareIndex("test", "type1", "1").setSource("field1", "quick brown fox", "field2", "quick brown fox").get();
|
||||
client().prepareIndex("test", "type1", "2").setSource("field1", "quick lazy huge brown fox", "field2", "quick lazy huge brown fox").setRefresh(true).get();
|
||||
indexRandom("test", true,
|
||||
client().prepareIndex("test", "type1", "1").setSource("field1", "quick brown fox", "field2", "quick brown fox"),
|
||||
client().prepareIndex("test", "type1", "2").setSource("field1", "quick lazy huge brown fox", "field2", "quick lazy huge brown fox"));
|
||||
|
||||
|
||||
SearchResponse searchResponse = client().prepareSearch().setQuery(QueryBuilders.matchQuery("field2", "quick brown").type(MatchQueryBuilder.Type.PHRASE).slop(0)).execute().actionGet();
|
||||
|
@ -283,16 +284,12 @@ public class SimpleQueryTests extends AbstractSharedClusterTest {
|
|||
.startObject("_type").field("index", index).endObject()
|
||||
.endObject().endObject())
|
||||
.execute().actionGet();
|
||||
|
||||
client().prepareIndex("test", "type1", "1").setSource("field1", "value1").execute().actionGet();
|
||||
client().prepareIndex("test", "type2", "1").setSource("field1", "value1").execute().actionGet();
|
||||
client().admin().indices().prepareFlush().execute().actionGet();
|
||||
|
||||
client().prepareIndex("test", "type1", "2").setSource("field1", "value1").execute().actionGet();
|
||||
client().prepareIndex("test", "type2", "2").setSource("field1", "value1").execute().actionGet();
|
||||
client().prepareIndex("test", "type2", "3").setSource("field1", "value1").execute().actionGet();
|
||||
|
||||
client().admin().indices().prepareRefresh().execute().actionGet();
|
||||
indexRandom("test", true,
|
||||
client().prepareIndex("test", "type1", "1").setSource("field1", "value1"),
|
||||
client().prepareIndex("test", "type2", "1").setSource("field1", "value1"),
|
||||
client().prepareIndex("test", "type1", "2").setSource("field1", "value1"),
|
||||
client().prepareIndex("test", "type2", "2").setSource("field1", "value1"),
|
||||
client().prepareIndex("test", "type2", "3").setSource("field1", "value1"));
|
||||
|
||||
assertThat(client().prepareCount().setQuery(filteredQuery(matchAllQuery(), typeFilter("type1"))).execute().actionGet().getCount(), equalTo(2l));
|
||||
assertThat(client().prepareCount().setQuery(filteredQuery(matchAllQuery(), typeFilter("type2"))).execute().actionGet().getCount(), equalTo(3l));
|
||||
|
|
Loading…
Reference in New Issue