fold ESTestCase into ElasticsearchTestCase
This commit is contained in:
parent
84811a57d6
commit
aa381a2775
|
@ -1,3 +0,0 @@
|
|||
mvn test -Pdev -Dtests.seed=3BE26A0D85E40D93 -Dtests.class=org.elasticsearch.indices.state.OpenCloseIndexTests -Dtests.method="testOpenCloseWithDocs" -Des.logger.level=INFO -Dtests.heap.size=512m -Dtests.timezone=Atlantic/South_Georgia -Dtests.processors=8
|
||||
|
||||
mvn test -Pdev -Dtests.seed=3BE26A0D85E40D93 -Dtests.class=org.elasticsearch.indices.template.IndexTemplateFileLoadingTests -Dtests.method="testThatLoadingTemplateFromFileWorks" -Des.logger.level=INFO -Dtests.heap.size=512m -Dtests.locale=hu_HU -Dtests.timezone=Africa/Harare -Dtests.processors=8
|
|
@ -41,7 +41,7 @@ import org.apache.lucene.search.similarities.DefaultSimilarity;
|
|||
import org.apache.lucene.search.similarities.Similarity;
|
||||
import org.apache.lucene.store.Directory;
|
||||
import org.apache.lucene.util.TestUtil;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -56,7 +56,7 @@ import static org.hamcrest.Matchers.equalTo;
|
|||
|
||||
/**
|
||||
*/
|
||||
public class BlendedTermQueryTest extends ESTestCase {
|
||||
public class BlendedTermQueryTest extends ElasticsearchTestCase {
|
||||
|
||||
@Test
|
||||
public void testBooleanQuery() throws IOException {
|
||||
|
|
|
@ -30,7 +30,7 @@ import org.apache.lucene.store.Directory;
|
|||
import org.apache.lucene.util.BytesRef;
|
||||
import org.apache.lucene.util.UnicodeUtil;
|
||||
import org.elasticsearch.search.highlight.HighlightUtils;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -39,7 +39,7 @@ import java.util.*;
|
|||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.hamcrest.CoreMatchers.notNullValue;
|
||||
|
||||
public class CustomPostingsHighlighterTests extends ESTestCase {
|
||||
public class CustomPostingsHighlighterTests extends ElasticsearchTestCase {
|
||||
|
||||
@Test
|
||||
public void testDiscreteHighlightingPerValue() throws Exception {
|
||||
|
|
|
@ -28,7 +28,7 @@ import org.apache.lucene.search.highlight.DefaultEncoder;
|
|||
import org.apache.lucene.store.Directory;
|
||||
import org.apache.lucene.util.LuceneTestCase;
|
||||
import org.apache.lucene.util.TestUtil;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
|
@ -41,7 +41,7 @@ import java.util.Map;
|
|||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
|
||||
public class XPostingsHighlighterTests extends ESTestCase {
|
||||
public class XPostingsHighlighterTests extends ElasticsearchTestCase {
|
||||
|
||||
/*
|
||||
Tests changes needed to make possible to perform discrete highlighting.
|
||||
|
|
|
@ -25,7 +25,7 @@ import junit.framework.TestCase;
|
|||
|
||||
import org.apache.lucene.util.LuceneTestCase;
|
||||
import org.elasticsearch.common.io.PathUtils;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTokenStreamTestCase;
|
||||
import org.junit.Ignore;
|
||||
|
@ -104,7 +104,7 @@ public class NamingConventionTests extends ElasticsearchTestCase {
|
|||
}
|
||||
|
||||
private boolean isTestCase(Class<?> clazz) {
|
||||
return ElasticsearchTestCase.class.isAssignableFrom(clazz) || ESTestCase.class.isAssignableFrom(clazz) || ElasticsearchTokenStreamTestCase.class.isAssignableFrom(clazz) || LuceneTestCase.class.isAssignableFrom(clazz);
|
||||
return ElasticsearchTestCase.class.isAssignableFrom(clazz) || ElasticsearchTestCase.class.isAssignableFrom(clazz) || ElasticsearchTokenStreamTestCase.class.isAssignableFrom(clazz) || LuceneTestCase.class.isAssignableFrom(clazz);
|
||||
}
|
||||
|
||||
private Class<?> loadClass(String filename) throws ClassNotFoundException {
|
||||
|
@ -138,7 +138,7 @@ public class NamingConventionTests extends ElasticsearchTestCase {
|
|||
|
||||
String classesToSubclass = Joiner.on(',').join(
|
||||
ElasticsearchTestCase.class.getSimpleName(),
|
||||
ESTestCase.class.getSimpleName(),
|
||||
ElasticsearchTestCase.class.getSimpleName(),
|
||||
ElasticsearchTokenStreamTestCase.class.getSimpleName(),
|
||||
LuceneTestCase.class.getSimpleName());
|
||||
assertTrue("Not all subclasses of " + ElasticsearchTestCase.class.getSimpleName() +
|
||||
|
@ -161,7 +161,7 @@ public class NamingConventionTests extends ElasticsearchTestCase {
|
|||
|
||||
public static final class WrongName extends ElasticsearchTestCase {}
|
||||
|
||||
public static final class WrongNameTheSecond extends ESTestCase {}
|
||||
public static final class WrongNameTheSecond extends ElasticsearchTestCase {}
|
||||
|
||||
public static final class PlainUnit extends TestCase {}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ import org.elasticsearch.index.mapper.core.AbstractFieldMapper;
|
|||
import org.elasticsearch.index.mapper.core.TypeParsers;
|
||||
import org.elasticsearch.index.mapper.internal.AllFieldMapper;
|
||||
import org.elasticsearch.rest.action.termvectors.RestTermVectorsAction;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.Test;
|
||||
|
||||
|
@ -55,7 +55,7 @@ import java.util.Set;
|
|||
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
|
||||
public class TermVectorsUnitTests extends ESTestCase {
|
||||
public class TermVectorsUnitTests extends ElasticsearchTestCase {
|
||||
|
||||
@Test
|
||||
public void streamResponse() throws Exception {
|
||||
|
|
|
@ -26,7 +26,7 @@ import org.apache.lucene.search.IndexSearcher;
|
|||
import org.apache.lucene.search.TermQuery;
|
||||
import org.apache.lucene.store.MockDirectoryWrapper;
|
||||
import org.apache.lucene.util.Version;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -36,7 +36,7 @@ import java.util.Set;
|
|||
/**
|
||||
*
|
||||
*/
|
||||
public class LuceneTest extends ESTestCase {
|
||||
public class LuceneTest extends ElasticsearchTestCase {
|
||||
|
||||
|
||||
/*
|
||||
|
|
|
@ -31,10 +31,10 @@ import org.apache.lucene.store.Directory;
|
|||
import org.apache.lucene.util.IOUtils;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.shard.ShardId;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
|
||||
/** Simple tests for this filterreader */
|
||||
public class ElasticsearchDirectoryReaderTests extends ESTestCase {
|
||||
public class ElasticsearchDirectoryReaderTests extends ElasticsearchTestCase {
|
||||
|
||||
/** Test that core cache key (needed for NRT) is working */
|
||||
public void testCoreCacheKey() throws Exception {
|
||||
|
|
|
@ -36,7 +36,7 @@ import org.apache.lucene.util.BytesRef;
|
|||
import org.apache.lucene.util.IOUtils;
|
||||
import org.elasticsearch.common.lucene.search.Queries;
|
||||
import org.elasticsearch.common.util.BigArrays;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
@ -49,7 +49,7 @@ import static org.hamcrest.Matchers.is;
|
|||
|
||||
/**
|
||||
*/
|
||||
public class FreqTermsEnumTests extends ESTestCase {
|
||||
public class FreqTermsEnumTests extends ElasticsearchTestCase {
|
||||
|
||||
private String[] terms;
|
||||
private IndexWriter iw;
|
||||
|
|
|
@ -28,9 +28,9 @@ import org.apache.lucene.util.BitDocIdSet;
|
|||
import org.apache.lucene.util.Bits;
|
||||
import org.apache.lucene.util.FixedBitSet;
|
||||
import org.elasticsearch.common.lucene.docset.AndDocIdSet;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
|
||||
public class AndDocIdSetTests extends ESTestCase {
|
||||
public class AndDocIdSetTests extends ElasticsearchTestCase {
|
||||
|
||||
private static FixedBitSet randomBitSet(int numDocs) {
|
||||
FixedBitSet b = new FixedBitSet(numDocs);
|
||||
|
|
|
@ -34,7 +34,7 @@ import org.apache.lucene.util.BytesRef;
|
|||
import org.apache.lucene.util.FixedBitSet;
|
||||
import org.apache.lucene.util.TestUtil;
|
||||
import org.elasticsearch.common.lucene.Lucene;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
@ -49,7 +49,7 @@ import static org.hamcrest.core.IsEqual.equalTo;
|
|||
|
||||
/**
|
||||
*/
|
||||
public class XBooleanFilterTests extends ESTestCase {
|
||||
public class XBooleanFilterTests extends ElasticsearchTestCase {
|
||||
|
||||
private Directory directory;
|
||||
private LeafReader reader;
|
||||
|
|
|
@ -35,7 +35,7 @@ import org.elasticsearch.common.lucene.Lucene;
|
|||
import org.elasticsearch.index.mapper.internal.UidFieldMapper;
|
||||
import org.elasticsearch.index.mapper.internal.VersionFieldMapper;
|
||||
import org.elasticsearch.index.merge.policy.ElasticsearchMergePolicy;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.hamcrest.MatcherAssert;
|
||||
import org.junit.Test;
|
||||
|
||||
|
@ -46,7 +46,7 @@ import java.util.Map;
|
|||
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
public class VersionsTests extends ESTestCase {
|
||||
public class VersionsTests extends ElasticsearchTestCase {
|
||||
|
||||
public static DirectoryReader reopen(DirectoryReader reader) throws IOException {
|
||||
return reopen(reader, true);
|
||||
|
|
|
@ -90,7 +90,7 @@ import org.elasticsearch.index.translog.Translog;
|
|||
import org.elasticsearch.index.translog.TranslogSizeMatcher;
|
||||
import org.elasticsearch.index.translog.fs.FsTranslog;
|
||||
import org.elasticsearch.test.DummyShardLock;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.elasticsearch.threadpool.ThreadPool;
|
||||
import org.hamcrest.MatcherAssert;
|
||||
import org.junit.After;
|
||||
|
@ -118,7 +118,7 @@ import static org.hamcrest.Matchers.nullValue;
|
|||
|
||||
// TODO: this guy isn't ready for mock filesystems yet
|
||||
@SuppressFileSystems("*")
|
||||
public class InternalEngineTests extends ESTestCase {
|
||||
public class InternalEngineTests extends ElasticsearchTestCase {
|
||||
|
||||
protected final ShardId shardId = new ShardId(new Index("index"), 1);
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ import org.elasticsearch.index.store.distributor.LeastUsedDistributor;
|
|||
import org.elasticsearch.index.translog.Translog;
|
||||
import org.elasticsearch.index.translog.fs.FsTranslog;
|
||||
import org.elasticsearch.test.DummyShardLock;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.elasticsearch.threadpool.ThreadPool;
|
||||
import org.hamcrest.MatcherAssert;
|
||||
import org.junit.After;
|
||||
|
@ -85,7 +85,7 @@ import static org.hamcrest.Matchers.nullValue;
|
|||
/**
|
||||
* TODO: document me!
|
||||
*/
|
||||
public class ShadowEngineTests extends ESTestCase {
|
||||
public class ShadowEngineTests extends ElasticsearchTestCase {
|
||||
|
||||
protected final ShardId shardId = new ShardId(new Index("index"), 1);
|
||||
|
||||
|
|
|
@ -24,9 +24,9 @@ import org.apache.lucene.document.SortedDocValuesField;
|
|||
import org.apache.lucene.index.*;
|
||||
import org.apache.lucene.store.Directory;
|
||||
import org.apache.lucene.util.BytesRef;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
|
||||
public class ReplaceMissingTests extends ESTestCase {
|
||||
public class ReplaceMissingTests extends ElasticsearchTestCase {
|
||||
|
||||
public void test() throws Exception {
|
||||
Directory dir = newDirectory();
|
||||
|
|
|
@ -26,7 +26,7 @@ import org.apache.lucene.index.*;
|
|||
import org.apache.lucene.search.DocIdSetIterator;
|
||||
import org.apache.lucene.store.Directory;
|
||||
import org.apache.lucene.util.BytesRef;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Locale;
|
||||
|
@ -37,7 +37,7 @@ import static org.hamcrest.core.IsNull.notNullValue;
|
|||
|
||||
/**
|
||||
*/
|
||||
public class ParentChildFilteredTermsEnumTests extends ESTestCase {
|
||||
public class ParentChildFilteredTermsEnumTests extends ElasticsearchTestCase {
|
||||
|
||||
@Test
|
||||
public void testSimple_twoFieldEachUniqueValue() throws Exception {
|
||||
|
|
|
@ -36,10 +36,10 @@ import org.apache.lucene.util.TestUtil;
|
|||
import org.elasticsearch.common.Numbers;
|
||||
import org.elasticsearch.index.mapper.internal.UidFieldMapper;
|
||||
import org.elasticsearch.index.mapper.internal.VersionFieldMapper;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
|
||||
/** Tests upgrading old document versions from _uid payloads to _version docvalues */
|
||||
public class VersionFieldUpgraderTest extends ESTestCase {
|
||||
public class VersionFieldUpgraderTest extends ElasticsearchTestCase {
|
||||
|
||||
/** Simple test: one doc in the old format, check that it looks correct */
|
||||
public void testUpgradeOneDocument() throws Exception {
|
||||
|
|
|
@ -25,11 +25,11 @@ import org.apache.lucene.index.*;
|
|||
import org.apache.lucene.store.BaseDirectoryWrapper;
|
||||
import org.apache.lucene.util.IOUtils;
|
||||
import org.elasticsearch.common.lucene.index.ElasticsearchDirectoryReader;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class ShardUtilsTests extends ESTestCase {
|
||||
public class ShardUtilsTests extends ElasticsearchTestCase {
|
||||
|
||||
public void testExtractShardId() throws IOException {
|
||||
BaseDirectoryWrapper dir = newDirectory();
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
package org.elasticsearch.index.store;
|
||||
|
||||
import org.apache.lucene.store.*;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -29,7 +29,7 @@ import java.util.Set;
|
|||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
|
||||
public class DirectoryUtilsTest extends ESTestCase {
|
||||
public class DirectoryUtilsTest extends ElasticsearchTestCase {
|
||||
|
||||
@Test
|
||||
public void testGetLeave() throws IOException {
|
||||
|
|
|
@ -26,7 +26,7 @@ import org.apache.lucene.index.CorruptIndexException;
|
|||
import org.apache.lucene.store.IndexOutput;
|
||||
import org.apache.lucene.store.IOContext;
|
||||
import org.apache.lucene.store.Directory;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
|
||||
/**
|
||||
* Simple tests for LegacyVerification (old segments)
|
||||
|
@ -34,7 +34,7 @@ import org.elasticsearch.test.ESTestCase;
|
|||
* segments is not longer needed.
|
||||
*/
|
||||
@Deprecated
|
||||
public class LegacyVerificationTests extends ESTestCase {
|
||||
public class LegacyVerificationTests extends ElasticsearchTestCase {
|
||||
|
||||
public void testAdler32() throws Exception {
|
||||
Adler32 expected = new Adler32();
|
||||
|
|
|
@ -42,7 +42,7 @@ import org.elasticsearch.index.store.distributor.Distributor;
|
|||
import org.elasticsearch.index.store.distributor.LeastUsedDistributor;
|
||||
import org.elasticsearch.index.store.distributor.RandomWeightedDistributor;
|
||||
import org.elasticsearch.test.DummyShardLock;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.Test;
|
||||
|
||||
|
@ -57,7 +57,7 @@ import java.util.zip.Adler32;
|
|||
import static com.carrotsearch.randomizedtesting.RandomizedTest.*;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
public class StoreTest extends ESTestCase {
|
||||
public class StoreTest extends ElasticsearchTestCase {
|
||||
|
||||
@Test
|
||||
public void testRefCount() throws IOException {
|
||||
|
|
|
@ -31,7 +31,7 @@ import org.apache.lucene.search.BooleanClause;
|
|||
import org.apache.lucene.search.BooleanQuery;
|
||||
import org.apache.lucene.search.TermQuery;
|
||||
import org.apache.lucene.store.Directory;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -39,7 +39,7 @@ import java.io.StringReader;
|
|||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class XMoreLikeThisTests extends ESTestCase {
|
||||
public class XMoreLikeThisTests extends ElasticsearchTestCase {
|
||||
|
||||
private void addDoc(RandomIndexWriter writer, String[] texts) throws IOException {
|
||||
Document doc = new Document();
|
||||
|
|
|
@ -34,7 +34,7 @@ import org.apache.lucene.search.join.BitDocIdSetFilter;
|
|||
import org.apache.lucene.store.Directory;
|
||||
import org.elasticsearch.search.fetch.FetchSubPhase;
|
||||
import org.elasticsearch.search.fetch.innerhits.InnerHitsContext.NestedInnerHits.NestedChildrenFilter;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -44,7 +44,7 @@ import static org.hamcrest.Matchers.equalTo;
|
|||
|
||||
/**
|
||||
*/
|
||||
public class NestedChildrenFilterTest extends ESTestCase {
|
||||
public class NestedChildrenFilterTest extends ElasticsearchTestCase {
|
||||
|
||||
@Test
|
||||
public void testNestedChildrenFilter() throws Exception {
|
||||
|
|
|
@ -1,488 +0,0 @@
|
|||
/*
|
||||
* Licensed to Elasticsearch under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright
|
||||
* ownership. Elasticsearch licenses this file to you under
|
||||
* the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.test;
|
||||
|
||||
import com.carrotsearch.randomizedtesting.LifecycleScope;
|
||||
import com.carrotsearch.randomizedtesting.RandomizedContext;
|
||||
import com.carrotsearch.randomizedtesting.SysGlobals;
|
||||
import com.carrotsearch.randomizedtesting.annotations.Listeners;
|
||||
import com.carrotsearch.randomizedtesting.annotations.TestGroup;
|
||||
import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
|
||||
import com.carrotsearch.randomizedtesting.annotations.ThreadLeakScope;
|
||||
import com.carrotsearch.randomizedtesting.annotations.ThreadLeakScope.Scope;
|
||||
import com.carrotsearch.randomizedtesting.annotations.TimeoutSuite;
|
||||
import com.carrotsearch.randomizedtesting.generators.RandomInts;
|
||||
import com.carrotsearch.randomizedtesting.generators.RandomPicks;
|
||||
import com.carrotsearch.randomizedtesting.generators.RandomStrings;
|
||||
|
||||
import org.apache.lucene.search.IndexSearcher;
|
||||
import org.apache.lucene.search.QueryCache;
|
||||
import org.apache.lucene.uninverting.UninvertingReader;
|
||||
import org.apache.lucene.util.LuceneTestCase;
|
||||
import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
|
||||
import org.apache.lucene.util.TestUtil;
|
||||
import org.apache.lucene.util.TimeUnits;
|
||||
import org.elasticsearch.common.io.PathUtils;
|
||||
import org.elasticsearch.common.settings.ImmutableSettings;
|
||||
import org.elasticsearch.common.util.concurrent.EsExecutors;
|
||||
import org.elasticsearch.test.junit.listeners.LoggingListener;
|
||||
import org.elasticsearch.test.junit.listeners.ReproduceInfoPrinter;
|
||||
import org.junit.After;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Assume;
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Ignore;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Inherited;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.TimeZone;
|
||||
|
||||
/**
|
||||
* The new base test class, with all the goodies
|
||||
*/
|
||||
@Listeners({
|
||||
ReproduceInfoPrinter.class,
|
||||
LoggingListener.class
|
||||
})
|
||||
@ThreadLeakScope(Scope.SUITE)
|
||||
@ThreadLeakLingering(linger = 5000) // 5 sec lingering
|
||||
@TimeoutSuite(millis = 20 * TimeUnits.MINUTE)
|
||||
@LuceneTestCase.SuppressSysoutChecks(bugUrl = "we log a lot on purpose")
|
||||
@Ignore
|
||||
@SuppressCodecs({"SimpleText", "Memory", "CheapBastard", "Direct"}) // slow ones
|
||||
@LuceneTestCase.SuppressReproduceLine
|
||||
public abstract class ESTestCase extends LuceneTestCase {
|
||||
static {
|
||||
SecurityHack.ensureInitialized();
|
||||
}
|
||||
|
||||
// setup mock filesystems for this test run. we change PathUtils
|
||||
// so that all accesses are plumbed thru any mock wrappers
|
||||
|
||||
@BeforeClass
|
||||
public static void setUpFileSystem() {
|
||||
try {
|
||||
Field field = PathUtils.class.getDeclaredField("DEFAULT");
|
||||
field.setAccessible(true);
|
||||
field.set(null, LuceneTestCase.getBaseTempDirForTestClass().getFileSystem());
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new RuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void restoreFileSystem() {
|
||||
try {
|
||||
Field field1 = PathUtils.class.getDeclaredField("ACTUAL_DEFAULT");
|
||||
field1.setAccessible(true);
|
||||
Field field2 = PathUtils.class.getDeclaredField("DEFAULT");
|
||||
field2.setAccessible(true);
|
||||
field2.set(null, field1.get(null));
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new RuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public static void setUpProcessors() {
|
||||
int numCpu = TestUtil.nextInt(random(), 1, 4);
|
||||
System.setProperty(EsExecutors.DEFAULT_SYSPROP, Integer.toString(numCpu));
|
||||
assertEquals(numCpu, EsExecutors.boundedNumberOfProcessors(ImmutableSettings.EMPTY));
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void restoreProcessors() {
|
||||
System.clearProperty(EsExecutors.DEFAULT_SYSPROP);
|
||||
}
|
||||
|
||||
@Before
|
||||
public void disableQueryCache() {
|
||||
// TODO: Parent/child and other things does not work with the query cache
|
||||
IndexSearcher.setDefaultQueryCache(null);
|
||||
}
|
||||
|
||||
@After
|
||||
public void ensureNoFieldCacheUse() {
|
||||
// field cache should NEVER get loaded.
|
||||
String[] entries = UninvertingReader.getUninvertedStats();
|
||||
assertEquals("fieldcache must never be used, got=" + Arrays.toString(entries), 0, entries.length);
|
||||
}
|
||||
|
||||
// old shit:
|
||||
|
||||
/**
|
||||
* The number of concurrent JVMs used to run the tests, Default is <tt>1</tt>
|
||||
*/
|
||||
public static final int CHILD_JVM_COUNT = Integer.parseInt(System.getProperty(SysGlobals.CHILDVM_SYSPROP_JVM_COUNT, "1"));
|
||||
/**
|
||||
* The child JVM ordinal of this JVM. Default is <tt>0</tt>
|
||||
*/
|
||||
public static final int CHILD_JVM_ID = Integer.parseInt(System.getProperty(SysGlobals.CHILDVM_SYSPROP_JVM_ID, "0"));
|
||||
|
||||
/**
|
||||
* Annotation for backwards compat tests
|
||||
*/
|
||||
@Inherited
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.TYPE)
|
||||
@TestGroup(enabled = false, sysProperty = TESTS_BACKWARDS_COMPATIBILITY)
|
||||
public @interface Backwards {
|
||||
}
|
||||
|
||||
/**
|
||||
* 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}
|
||||
*/
|
||||
public static final String TESTS_BACKWARDS_COMPATIBILITY = "tests.bwc";
|
||||
|
||||
public static final String TESTS_BACKWARDS_COMPATIBILITY_VERSION = "tests.bwc.version";
|
||||
|
||||
/**
|
||||
* 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}
|
||||
*/
|
||||
public static final String TESTS_BACKWARDS_COMPATIBILITY_PATH = "tests.bwc.path";
|
||||
|
||||
/**
|
||||
* Annotation for REST tests
|
||||
*/
|
||||
@Inherited
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.TYPE)
|
||||
@TestGroup(enabled = true, sysProperty = TESTS_REST)
|
||||
public @interface Rest {
|
||||
}
|
||||
|
||||
/**
|
||||
* Property that allows to control whether the REST tests are run (default) or not
|
||||
*/
|
||||
public static final String TESTS_REST = "tests.rest";
|
||||
|
||||
/**
|
||||
* Annotation for integration tests
|
||||
*/
|
||||
@Inherited
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.TYPE)
|
||||
@TestGroup(enabled = true, sysProperty = SYSPROP_INTEGRATION)
|
||||
public @interface Integration {
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// Test groups, system properties and other annotations modifying tests
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* @see #ignoreAfterMaxFailures
|
||||
*/
|
||||
public static final String SYSPROP_MAXFAILURES = "tests.maxfailures";
|
||||
|
||||
/**
|
||||
* @see #ignoreAfterMaxFailures
|
||||
*/
|
||||
public static final String SYSPROP_FAILFAST = "tests.failfast";
|
||||
|
||||
public static final String SYSPROP_INTEGRATION = "tests.integration";
|
||||
// -----------------------------------------------------------------
|
||||
// Suite and test case setup/ cleanup.
|
||||
// -----------------------------------------------------------------
|
||||
|
||||
/** MockFSDirectoryService sets this: */
|
||||
public static boolean checkIndexFailed;
|
||||
|
||||
/**
|
||||
* For subclasses to override. Overrides must call {@code super.setUp()}.
|
||||
*/
|
||||
@Override
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
checkIndexFailed = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* For subclasses to override. Overrides must call {@code super.tearDown()}.
|
||||
*/
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
assertFalse("at least one shard failed CheckIndex", checkIndexFailed);
|
||||
super.tearDown();
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------
|
||||
// Test facilities and facades for subclasses.
|
||||
// -----------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Registers a {@link Closeable} resource that should be closed after the test
|
||||
* completes.
|
||||
*
|
||||
* @return <code>resource</code> (for call chaining).
|
||||
*/
|
||||
@Override
|
||||
public <T extends Closeable> T closeAfterTest(T resource) {
|
||||
return RandomizedContext.current().closeAtEnd(resource, LifecycleScope.TEST);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a {@link Closeable} resource that should be closed after the suite
|
||||
* completes.
|
||||
*
|
||||
* @return <code>resource</code> (for call chaining).
|
||||
*/
|
||||
public static <T extends Closeable> T closeAfterSuite(T resource) {
|
||||
return RandomizedContext.current().closeAtEnd(resource, LifecycleScope.SUITE);
|
||||
}
|
||||
|
||||
// old helper stuff, a lot of it is bad news and we should see if its all used
|
||||
|
||||
/**
|
||||
* Returns a "scaled" random number between min and max (inclusive). The number of
|
||||
* iterations will fall between [min, max], but the selection will also try to
|
||||
* achieve the points below:
|
||||
* <ul>
|
||||
* <li>the multiplier can be used to move the number of iterations closer to min
|
||||
* (if it is smaller than 1) or closer to max (if it is larger than 1). Setting
|
||||
* the multiplier to 0 will always result in picking min.</li>
|
||||
* <li>on normal runs, the number will be closer to min than to max.</li>
|
||||
* <li>on nightly runs, the number will be closer to max than to min.</li>
|
||||
* </ul>
|
||||
*
|
||||
* @see #multiplier()
|
||||
*
|
||||
* @param min Minimum (inclusive).
|
||||
* @param max Maximum (inclusive).
|
||||
* @return Returns a random number between min and max.
|
||||
*/
|
||||
public static int scaledRandomIntBetween(int min, int max) {
|
||||
if (min < 0) throw new IllegalArgumentException("min must be >= 0: " + min);
|
||||
if (min > max) throw new IllegalArgumentException("max must be >= min: " + min + ", " + max);
|
||||
|
||||
double point = Math.min(1, Math.abs(random().nextGaussian()) * 0.3) * RANDOM_MULTIPLIER;
|
||||
double range = max - min;
|
||||
int scaled = (int) Math.round(Math.min(point * range, range));
|
||||
if (isNightly()) {
|
||||
return max - scaled;
|
||||
} else {
|
||||
return min + scaled;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A random integer from <code>min</code> to <code>max</code> (inclusive).
|
||||
*
|
||||
* @see #scaledRandomIntBetween(int, int)
|
||||
*/
|
||||
public static int randomIntBetween(int min, int max) {
|
||||
return RandomInts.randomIntBetween(random(), min, max);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a "scaled" number of iterations for loops which can have a variable
|
||||
* iteration count. This method is effectively
|
||||
* an alias to {@link #scaledRandomIntBetween(int, int)}.
|
||||
*/
|
||||
public static int iterations(int min, int max) {
|
||||
return scaledRandomIntBetween(min, max);
|
||||
}
|
||||
|
||||
/**
|
||||
* An alias for {@link #randomIntBetween(int, int)}.
|
||||
*
|
||||
* @see #scaledRandomIntBetween(int, int)
|
||||
*/
|
||||
public static int between(int min, int max) {
|
||||
return randomIntBetween(min, max);
|
||||
}
|
||||
|
||||
/**
|
||||
* The exact opposite of {@link #rarely()}.
|
||||
*/
|
||||
public static boolean frequently() {
|
||||
return !rarely();
|
||||
}
|
||||
|
||||
public static boolean randomBoolean() {
|
||||
return random().nextBoolean();
|
||||
}
|
||||
public static byte randomByte() { return (byte) getRandom().nextInt(); }
|
||||
public static short randomShort() { return (short) getRandom().nextInt(); }
|
||||
public static int randomInt() { return getRandom().nextInt(); }
|
||||
public static float randomFloat() { return getRandom().nextFloat(); }
|
||||
public static double randomDouble() { return getRandom().nextDouble(); }
|
||||
public static long randomLong() { return getRandom().nextLong(); }
|
||||
|
||||
/**
|
||||
* Making {@link Assume#assumeNotNull(Object...)} directly available.
|
||||
*/
|
||||
public static void assumeNotNull(Object... objects) {
|
||||
Assume.assumeNotNull(objects);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pick a random object from the given array. The array must not be empty.
|
||||
*/
|
||||
public static <T> T randomFrom(T... array) {
|
||||
return RandomPicks.randomFrom(random(), array);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pick a random object from the given list.
|
||||
*/
|
||||
public static <T> T randomFrom(List<T> list) {
|
||||
return RandomPicks.randomFrom(random(), list);
|
||||
}
|
||||
|
||||
/**
|
||||
* Shortcut for {@link RandomizedContext#getRandom()}. Even though this method
|
||||
* is static, it returns per-thread {@link Random} instance, so no race conditions
|
||||
* can occur.
|
||||
*
|
||||
* <p>It is recommended that specific methods are used to pick random values.
|
||||
*/
|
||||
public static Random getRandom() {
|
||||
return random();
|
||||
}
|
||||
|
||||
/**
|
||||
* A random integer from 0..max (inclusive).
|
||||
*/
|
||||
public static int randomInt(int max) {
|
||||
return RandomInts.randomInt(getRandom(), max);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodeUnitsLength(Random, int, int) */
|
||||
public static String randomAsciiOfLengthBetween(int minCodeUnits, int maxCodeUnits) {
|
||||
return RandomStrings.randomAsciiOfLengthBetween(getRandom(), minCodeUnits,
|
||||
maxCodeUnits);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodeUnitsLength(Random, int, int) */
|
||||
public static String randomAsciiOfLength(int codeUnits) {
|
||||
return RandomStrings.randomAsciiOfLength(getRandom(), codeUnits);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodeUnitsLength(Random, int, int) */
|
||||
public static String randomUnicodeOfLengthBetween(int minCodeUnits, int maxCodeUnits) {
|
||||
return RandomStrings.randomUnicodeOfLengthBetween(getRandom(),
|
||||
minCodeUnits, maxCodeUnits);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodeUnitsLength(Random, int, int) */
|
||||
public static String randomUnicodeOfLength(int codeUnits) {
|
||||
return RandomStrings.randomUnicodeOfLength(getRandom(), codeUnits);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodePointsLength(Random, int, int) */
|
||||
public static String randomUnicodeOfCodepointLengthBetween(int minCodePoints, int maxCodePoints) {
|
||||
return RandomStrings.randomUnicodeOfCodepointLengthBetween(getRandom(),
|
||||
minCodePoints, maxCodePoints);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodePointsLength(Random, int, int) */
|
||||
public static String randomUnicodeOfCodepointLength(int codePoints) {
|
||||
return RandomStrings
|
||||
.randomUnicodeOfCodepointLength(getRandom(), codePoints);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodeUnitsLength(Random, int, int) */
|
||||
public static String randomRealisticUnicodeOfLengthBetween(int minCodeUnits, int maxCodeUnits) {
|
||||
return RandomStrings.randomRealisticUnicodeOfLengthBetween(getRandom(),
|
||||
minCodeUnits, maxCodeUnits);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodeUnitsLength(Random, int, int) */
|
||||
public static String randomRealisticUnicodeOfLength(int codeUnits) {
|
||||
return RandomStrings.randomRealisticUnicodeOfLength(getRandom(), codeUnits);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodePointsLength(Random, int, int) */
|
||||
public static String randomRealisticUnicodeOfCodepointLengthBetween(
|
||||
int minCodePoints, int maxCodePoints) {
|
||||
return RandomStrings.randomRealisticUnicodeOfCodepointLengthBetween(
|
||||
getRandom(), minCodePoints, maxCodePoints);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodePointsLength(Random, int, int) */
|
||||
public static String randomRealisticUnicodeOfCodepointLength(int codePoints) {
|
||||
return RandomStrings.randomRealisticUnicodeOfCodepointLength(getRandom(),
|
||||
codePoints);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a random TimeZone from the available timezones on the system.
|
||||
*
|
||||
* <p>Warning: This test assumes the returned array of time zones is repeatable from jvm execution
|
||||
* to jvm execution. It _may_ be different from jvm to jvm and as such, it can render
|
||||
* tests execute in a different way.</p>
|
||||
*/
|
||||
public static TimeZone randomTimeZone() {
|
||||
final String[] availableIDs = TimeZone.getAvailableIDs();
|
||||
Arrays.sort(availableIDs);
|
||||
return TimeZone.getTimeZone(randomFrom(availableIDs));
|
||||
}
|
||||
|
||||
/**
|
||||
* Shortcut for {@link RandomizedContext#current()}.
|
||||
*/
|
||||
public static RandomizedContext getContext() {
|
||||
return RandomizedContext.current();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if we're running nightly tests.
|
||||
* @see Nightly
|
||||
*/
|
||||
public static boolean isNightly() {
|
||||
return getContext().isNightly();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a non-negative random value smaller or equal <code>max</code>. The value
|
||||
* picked is affected by {@link #isNightly()} and {@link #multiplier()}.
|
||||
*
|
||||
* <p>This method is effectively an alias to:
|
||||
* <pre>
|
||||
* scaledRandomIntBetween(0, max)
|
||||
* </pre>
|
||||
*
|
||||
* @see #scaledRandomIntBetween(int, int)
|
||||
*/
|
||||
public static int atMost(int max) {
|
||||
if (max < 0) throw new IllegalArgumentException("atMost requires non-negative argument: " + max);
|
||||
return scaledRandomIntBetween(0, max);
|
||||
}
|
||||
|
||||
/**
|
||||
* Making {@link Assume#assumeTrue(boolean)} directly available.
|
||||
*/
|
||||
public void assumeTrue(boolean condition) {
|
||||
assumeTrue("caller was too lazy to provide a reason", condition);
|
||||
}
|
||||
}
|
|
@ -81,7 +81,7 @@ import static org.hamcrest.Matchers.is;
|
|||
*
|
||||
*/
|
||||
// the transportClientRatio is tricky here since we don't fully control the cluster nodes
|
||||
@ESTestCase.Backwards
|
||||
@ElasticsearchTestCase.Backwards
|
||||
@ElasticsearchIntegrationTest.ClusterScope(minNumDataNodes = 0, maxNumDataNodes = 2, scope = ElasticsearchIntegrationTest.Scope.SUITE, numClientNodes = 0, transportClientRatio = 0.0)
|
||||
@Ignore
|
||||
public abstract class ElasticsearchBackwardsCompatIntegrationTest extends ElasticsearchIntegrationTest {
|
||||
|
|
|
@ -226,7 +226,7 @@ import static org.hamcrest.Matchers.notNullValue;
|
|||
* </p>
|
||||
*/
|
||||
@Ignore
|
||||
@ESTestCase.Integration
|
||||
@ElasticsearchTestCase.Integration
|
||||
public abstract class ElasticsearchIntegrationTest extends ElasticsearchTestCase {
|
||||
|
||||
/** node names of the corresponding clusters will start with these prefixes */
|
||||
|
|
|
@ -18,13 +18,29 @@
|
|||
*/
|
||||
package org.elasticsearch.test;
|
||||
|
||||
import com.carrotsearch.randomizedtesting.LifecycleScope;
|
||||
import com.carrotsearch.randomizedtesting.RandomizedContext;
|
||||
import com.carrotsearch.randomizedtesting.SysGlobals;
|
||||
import com.carrotsearch.randomizedtesting.annotations.Listeners;
|
||||
import com.carrotsearch.randomizedtesting.annotations.TestGroup;
|
||||
import com.carrotsearch.randomizedtesting.annotations.ThreadLeakLingering;
|
||||
import com.carrotsearch.randomizedtesting.annotations.ThreadLeakScope;
|
||||
import com.carrotsearch.randomizedtesting.annotations.TimeoutSuite;
|
||||
import com.carrotsearch.randomizedtesting.annotations.ThreadLeakScope.Scope;
|
||||
import com.carrotsearch.randomizedtesting.generators.RandomInts;
|
||||
import com.carrotsearch.randomizedtesting.generators.RandomPicks;
|
||||
import com.carrotsearch.randomizedtesting.generators.RandomStrings;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import org.apache.lucene.search.IndexSearcher;
|
||||
import org.apache.lucene.store.MockDirectoryWrapper;
|
||||
import org.apache.lucene.uninverting.UninvertingReader;
|
||||
import org.apache.lucene.util.LuceneTestCase;
|
||||
import org.apache.lucene.util.TestUtil;
|
||||
import org.apache.lucene.util.TimeUnits;
|
||||
import org.apache.lucene.util.LuceneTestCase.Nightly;
|
||||
import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
|
||||
import org.elasticsearch.Version;
|
||||
import org.elasticsearch.client.Requests;
|
||||
import org.elasticsearch.cluster.metadata.IndexMetaData;
|
||||
|
@ -36,32 +52,46 @@ import org.elasticsearch.common.logging.Loggers;
|
|||
import org.elasticsearch.common.settings.ImmutableSettings;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.util.concurrent.EsAbortPolicy;
|
||||
import org.elasticsearch.common.util.concurrent.EsExecutors;
|
||||
import org.elasticsearch.common.util.concurrent.EsRejectedExecutionException;
|
||||
import org.elasticsearch.common.xcontent.XContentType;
|
||||
import org.elasticsearch.env.Environment;
|
||||
import org.elasticsearch.env.NodeEnvironment;
|
||||
import org.elasticsearch.test.cache.recycler.MockBigArrays;
|
||||
import org.elasticsearch.test.cache.recycler.MockPageCacheRecycler;
|
||||
import org.elasticsearch.test.junit.listeners.LoggingListener;
|
||||
import org.elasticsearch.test.junit.listeners.ReproduceInfoPrinter;
|
||||
import org.elasticsearch.test.search.MockSearchService;
|
||||
import org.elasticsearch.test.store.MockDirectoryHelper;
|
||||
import org.elasticsearch.threadpool.ThreadPool;
|
||||
import org.junit.*;
|
||||
import org.junit.After;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Assume;
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Ignore;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Inherited;
|
||||
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;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.nio.file.NoSuchFileException;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Formatter;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.TimeZone;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
@ -73,7 +103,426 @@ import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAllS
|
|||
/**
|
||||
* Base testcase for randomized unit testing with Elasticsearch
|
||||
*/
|
||||
public abstract class ElasticsearchTestCase extends ESTestCase {
|
||||
@Listeners({
|
||||
ReproduceInfoPrinter.class,
|
||||
LoggingListener.class
|
||||
})
|
||||
@ThreadLeakScope(Scope.SUITE)
|
||||
@ThreadLeakLingering(linger = 5000) // 5 sec lingering
|
||||
@TimeoutSuite(millis = 20 * TimeUnits.MINUTE)
|
||||
@LuceneTestCase.SuppressSysoutChecks(bugUrl = "we log a lot on purpose")
|
||||
@Ignore
|
||||
@SuppressCodecs({"SimpleText", "Memory", "CheapBastard", "Direct"}) // slow ones
|
||||
@LuceneTestCase.SuppressReproduceLine
|
||||
public abstract class ElasticsearchTestCase extends LuceneTestCase {
|
||||
|
||||
static {
|
||||
SecurityHack.ensureInitialized();
|
||||
}
|
||||
|
||||
// setup mock filesystems for this test run. we change PathUtils
|
||||
// so that all accesses are plumbed thru any mock wrappers
|
||||
|
||||
@BeforeClass
|
||||
public static void setUpFileSystem() {
|
||||
try {
|
||||
Field field = PathUtils.class.getDeclaredField("DEFAULT");
|
||||
field.setAccessible(true);
|
||||
field.set(null, LuceneTestCase.getBaseTempDirForTestClass().getFileSystem());
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new RuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void restoreFileSystem() {
|
||||
try {
|
||||
Field field1 = PathUtils.class.getDeclaredField("ACTUAL_DEFAULT");
|
||||
field1.setAccessible(true);
|
||||
Field field2 = PathUtils.class.getDeclaredField("DEFAULT");
|
||||
field2.setAccessible(true);
|
||||
field2.set(null, field1.get(null));
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new RuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public static void setUpProcessors() {
|
||||
int numCpu = TestUtil.nextInt(random(), 1, 4);
|
||||
System.setProperty(EsExecutors.DEFAULT_SYSPROP, Integer.toString(numCpu));
|
||||
assertEquals(numCpu, EsExecutors.boundedNumberOfProcessors(ImmutableSettings.EMPTY));
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void restoreProcessors() {
|
||||
System.clearProperty(EsExecutors.DEFAULT_SYSPROP);
|
||||
}
|
||||
|
||||
@Before
|
||||
public void disableQueryCache() {
|
||||
// TODO: Parent/child and other things does not work with the query cache
|
||||
IndexSearcher.setDefaultQueryCache(null);
|
||||
}
|
||||
|
||||
@After
|
||||
public void ensureNoFieldCacheUse() {
|
||||
// field cache should NEVER get loaded.
|
||||
String[] entries = UninvertingReader.getUninvertedStats();
|
||||
assertEquals("fieldcache must never be used, got=" + Arrays.toString(entries), 0, entries.length);
|
||||
}
|
||||
|
||||
// old shit:
|
||||
|
||||
/**
|
||||
* The number of concurrent JVMs used to run the tests, Default is <tt>1</tt>
|
||||
*/
|
||||
public static final int CHILD_JVM_COUNT = Integer.parseInt(System.getProperty(SysGlobals.CHILDVM_SYSPROP_JVM_COUNT, "1"));
|
||||
/**
|
||||
* The child JVM ordinal of this JVM. Default is <tt>0</tt>
|
||||
*/
|
||||
public static final int CHILD_JVM_ID = Integer.parseInt(System.getProperty(SysGlobals.CHILDVM_SYSPROP_JVM_ID, "0"));
|
||||
|
||||
/**
|
||||
* Annotation for backwards compat tests
|
||||
*/
|
||||
@Inherited
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.TYPE)
|
||||
@TestGroup(enabled = false, sysProperty = TESTS_BACKWARDS_COMPATIBILITY)
|
||||
public @interface Backwards {
|
||||
}
|
||||
|
||||
/**
|
||||
* 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}
|
||||
*/
|
||||
public static final String TESTS_BACKWARDS_COMPATIBILITY = "tests.bwc";
|
||||
|
||||
public static final String TESTS_BACKWARDS_COMPATIBILITY_VERSION = "tests.bwc.version";
|
||||
|
||||
/**
|
||||
* 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}
|
||||
*/
|
||||
public static final String TESTS_BACKWARDS_COMPATIBILITY_PATH = "tests.bwc.path";
|
||||
|
||||
/**
|
||||
* Annotation for REST tests
|
||||
*/
|
||||
@Inherited
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.TYPE)
|
||||
@TestGroup(enabled = true, sysProperty = TESTS_REST)
|
||||
public @interface Rest {
|
||||
}
|
||||
|
||||
/**
|
||||
* Property that allows to control whether the REST tests are run (default) or not
|
||||
*/
|
||||
public static final String TESTS_REST = "tests.rest";
|
||||
|
||||
/**
|
||||
* Annotation for integration tests
|
||||
*/
|
||||
@Inherited
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.TYPE)
|
||||
@TestGroup(enabled = true, sysProperty = SYSPROP_INTEGRATION)
|
||||
public @interface Integration {
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// Test groups, system properties and other annotations modifying tests
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* @see #ignoreAfterMaxFailures
|
||||
*/
|
||||
public static final String SYSPROP_MAXFAILURES = "tests.maxfailures";
|
||||
|
||||
/**
|
||||
* @see #ignoreAfterMaxFailures
|
||||
*/
|
||||
public static final String SYSPROP_FAILFAST = "tests.failfast";
|
||||
|
||||
public static final String SYSPROP_INTEGRATION = "tests.integration";
|
||||
// -----------------------------------------------------------------
|
||||
// Suite and test case setup/ cleanup.
|
||||
// -----------------------------------------------------------------
|
||||
|
||||
/** MockFSDirectoryService sets this: */
|
||||
public static boolean checkIndexFailed;
|
||||
|
||||
/**
|
||||
* For subclasses to override. Overrides must call {@code super.setUp()}.
|
||||
*/
|
||||
@Override
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
checkIndexFailed = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* For subclasses to override. Overrides must call {@code super.tearDown()}.
|
||||
*/
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
assertFalse("at least one shard failed CheckIndex", checkIndexFailed);
|
||||
super.tearDown();
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------
|
||||
// Test facilities and facades for subclasses.
|
||||
// -----------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Registers a {@link Closeable} resource that should be closed after the test
|
||||
* completes.
|
||||
*
|
||||
* @return <code>resource</code> (for call chaining).
|
||||
*/
|
||||
@Override
|
||||
public <T extends Closeable> T closeAfterTest(T resource) {
|
||||
return RandomizedContext.current().closeAtEnd(resource, LifecycleScope.TEST);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a {@link Closeable} resource that should be closed after the suite
|
||||
* completes.
|
||||
*
|
||||
* @return <code>resource</code> (for call chaining).
|
||||
*/
|
||||
public static <T extends Closeable> T closeAfterSuite(T resource) {
|
||||
return RandomizedContext.current().closeAtEnd(resource, LifecycleScope.SUITE);
|
||||
}
|
||||
|
||||
// old helper stuff, a lot of it is bad news and we should see if its all used
|
||||
|
||||
/**
|
||||
* Returns a "scaled" random number between min and max (inclusive). The number of
|
||||
* iterations will fall between [min, max], but the selection will also try to
|
||||
* achieve the points below:
|
||||
* <ul>
|
||||
* <li>the multiplier can be used to move the number of iterations closer to min
|
||||
* (if it is smaller than 1) or closer to max (if it is larger than 1). Setting
|
||||
* the multiplier to 0 will always result in picking min.</li>
|
||||
* <li>on normal runs, the number will be closer to min than to max.</li>
|
||||
* <li>on nightly runs, the number will be closer to max than to min.</li>
|
||||
* </ul>
|
||||
*
|
||||
* @see #multiplier()
|
||||
*
|
||||
* @param min Minimum (inclusive).
|
||||
* @param max Maximum (inclusive).
|
||||
* @return Returns a random number between min and max.
|
||||
*/
|
||||
public static int scaledRandomIntBetween(int min, int max) {
|
||||
if (min < 0) throw new IllegalArgumentException("min must be >= 0: " + min);
|
||||
if (min > max) throw new IllegalArgumentException("max must be >= min: " + min + ", " + max);
|
||||
|
||||
double point = Math.min(1, Math.abs(random().nextGaussian()) * 0.3) * RANDOM_MULTIPLIER;
|
||||
double range = max - min;
|
||||
int scaled = (int) Math.round(Math.min(point * range, range));
|
||||
if (isNightly()) {
|
||||
return max - scaled;
|
||||
} else {
|
||||
return min + scaled;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A random integer from <code>min</code> to <code>max</code> (inclusive).
|
||||
*
|
||||
* @see #scaledRandomIntBetween(int, int)
|
||||
*/
|
||||
public static int randomIntBetween(int min, int max) {
|
||||
return RandomInts.randomIntBetween(random(), min, max);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a "scaled" number of iterations for loops which can have a variable
|
||||
* iteration count. This method is effectively
|
||||
* an alias to {@link #scaledRandomIntBetween(int, int)}.
|
||||
*/
|
||||
public static int iterations(int min, int max) {
|
||||
return scaledRandomIntBetween(min, max);
|
||||
}
|
||||
|
||||
/**
|
||||
* An alias for {@link #randomIntBetween(int, int)}.
|
||||
*
|
||||
* @see #scaledRandomIntBetween(int, int)
|
||||
*/
|
||||
public static int between(int min, int max) {
|
||||
return randomIntBetween(min, max);
|
||||
}
|
||||
|
||||
/**
|
||||
* The exact opposite of {@link #rarely()}.
|
||||
*/
|
||||
public static boolean frequently() {
|
||||
return !rarely();
|
||||
}
|
||||
|
||||
public static boolean randomBoolean() {
|
||||
return random().nextBoolean();
|
||||
}
|
||||
public static byte randomByte() { return (byte) getRandom().nextInt(); }
|
||||
public static short randomShort() { return (short) getRandom().nextInt(); }
|
||||
public static int randomInt() { return getRandom().nextInt(); }
|
||||
public static float randomFloat() { return getRandom().nextFloat(); }
|
||||
public static double randomDouble() { return getRandom().nextDouble(); }
|
||||
public static long randomLong() { return getRandom().nextLong(); }
|
||||
|
||||
/**
|
||||
* Making {@link Assume#assumeNotNull(Object...)} directly available.
|
||||
*/
|
||||
public static void assumeNotNull(Object... objects) {
|
||||
Assume.assumeNotNull(objects);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pick a random object from the given array. The array must not be empty.
|
||||
*/
|
||||
public static <T> T randomFrom(T... array) {
|
||||
return RandomPicks.randomFrom(random(), array);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pick a random object from the given list.
|
||||
*/
|
||||
public static <T> T randomFrom(List<T> list) {
|
||||
return RandomPicks.randomFrom(random(), list);
|
||||
}
|
||||
|
||||
/**
|
||||
* Shortcut for {@link RandomizedContext#getRandom()}. Even though this method
|
||||
* is static, it returns per-thread {@link Random} instance, so no race conditions
|
||||
* can occur.
|
||||
*
|
||||
* <p>It is recommended that specific methods are used to pick random values.
|
||||
*/
|
||||
public static Random getRandom() {
|
||||
return random();
|
||||
}
|
||||
|
||||
/**
|
||||
* A random integer from 0..max (inclusive).
|
||||
*/
|
||||
public static int randomInt(int max) {
|
||||
return RandomInts.randomInt(getRandom(), max);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodeUnitsLength(Random, int, int) */
|
||||
public static String randomAsciiOfLengthBetween(int minCodeUnits, int maxCodeUnits) {
|
||||
return RandomStrings.randomAsciiOfLengthBetween(getRandom(), minCodeUnits,
|
||||
maxCodeUnits);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodeUnitsLength(Random, int, int) */
|
||||
public static String randomAsciiOfLength(int codeUnits) {
|
||||
return RandomStrings.randomAsciiOfLength(getRandom(), codeUnits);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodeUnitsLength(Random, int, int) */
|
||||
public static String randomUnicodeOfLengthBetween(int minCodeUnits, int maxCodeUnits) {
|
||||
return RandomStrings.randomUnicodeOfLengthBetween(getRandom(),
|
||||
minCodeUnits, maxCodeUnits);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodeUnitsLength(Random, int, int) */
|
||||
public static String randomUnicodeOfLength(int codeUnits) {
|
||||
return RandomStrings.randomUnicodeOfLength(getRandom(), codeUnits);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodePointsLength(Random, int, int) */
|
||||
public static String randomUnicodeOfCodepointLengthBetween(int minCodePoints, int maxCodePoints) {
|
||||
return RandomStrings.randomUnicodeOfCodepointLengthBetween(getRandom(),
|
||||
minCodePoints, maxCodePoints);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodePointsLength(Random, int, int) */
|
||||
public static String randomUnicodeOfCodepointLength(int codePoints) {
|
||||
return RandomStrings
|
||||
.randomUnicodeOfCodepointLength(getRandom(), codePoints);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodeUnitsLength(Random, int, int) */
|
||||
public static String randomRealisticUnicodeOfLengthBetween(int minCodeUnits, int maxCodeUnits) {
|
||||
return RandomStrings.randomRealisticUnicodeOfLengthBetween(getRandom(),
|
||||
minCodeUnits, maxCodeUnits);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodeUnitsLength(Random, int, int) */
|
||||
public static String randomRealisticUnicodeOfLength(int codeUnits) {
|
||||
return RandomStrings.randomRealisticUnicodeOfLength(getRandom(), codeUnits);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodePointsLength(Random, int, int) */
|
||||
public static String randomRealisticUnicodeOfCodepointLengthBetween(
|
||||
int minCodePoints, int maxCodePoints) {
|
||||
return RandomStrings.randomRealisticUnicodeOfCodepointLengthBetween(
|
||||
getRandom(), minCodePoints, maxCodePoints);
|
||||
}
|
||||
|
||||
/** @see StringGenerator#ofCodePointsLength(Random, int, int) */
|
||||
public static String randomRealisticUnicodeOfCodepointLength(int codePoints) {
|
||||
return RandomStrings.randomRealisticUnicodeOfCodepointLength(getRandom(),
|
||||
codePoints);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a random TimeZone from the available timezones on the system.
|
||||
*
|
||||
* <p>Warning: This test assumes the returned array of time zones is repeatable from jvm execution
|
||||
* to jvm execution. It _may_ be different from jvm to jvm and as such, it can render
|
||||
* tests execute in a different way.</p>
|
||||
*/
|
||||
public static TimeZone randomTimeZone() {
|
||||
final String[] availableIDs = TimeZone.getAvailableIDs();
|
||||
Arrays.sort(availableIDs);
|
||||
return TimeZone.getTimeZone(randomFrom(availableIDs));
|
||||
}
|
||||
|
||||
/**
|
||||
* Shortcut for {@link RandomizedContext#current()}.
|
||||
*/
|
||||
public static RandomizedContext getContext() {
|
||||
return RandomizedContext.current();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if we're running nightly tests.
|
||||
* @see Nightly
|
||||
*/
|
||||
public static boolean isNightly() {
|
||||
return getContext().isNightly();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a non-negative random value smaller or equal <code>max</code>. The value
|
||||
* picked is affected by {@link #isNightly()} and {@link #multiplier()}.
|
||||
*
|
||||
* <p>This method is effectively an alias to:
|
||||
* <pre>
|
||||
* scaledRandomIntBetween(0, max)
|
||||
* </pre>
|
||||
*
|
||||
* @see #scaledRandomIntBetween(int, int)
|
||||
*/
|
||||
public static int atMost(int max) {
|
||||
if (max < 0) throw new IllegalArgumentException("atMost requires non-negative argument: " + max);
|
||||
return scaledRandomIntBetween(0, max);
|
||||
}
|
||||
|
||||
/**
|
||||
* Making {@link Assume#assumeTrue(boolean)} directly available.
|
||||
*/
|
||||
public void assumeTrue(boolean condition) {
|
||||
assumeTrue("caller was too lazy to provide a reason", condition);
|
||||
}
|
||||
|
||||
private static Thread.UncaughtExceptionHandler defaultHandler;
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ import com.carrotsearch.randomizedtesting.TraceFormatting;
|
|||
import org.elasticsearch.common.Strings;
|
||||
import org.elasticsearch.common.logging.ESLogger;
|
||||
import org.elasticsearch.common.logging.Loggers;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.elasticsearch.test.InternalTestCluster;
|
||||
import org.junit.internal.AssumptionViolatedException;
|
||||
|
|
|
@ -32,7 +32,7 @@ import org.elasticsearch.common.io.PathUtils;
|
|||
import org.elasticsearch.common.settings.ImmutableSettings;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.node.Node;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchIntegrationTest;
|
||||
import org.elasticsearch.test.ElasticsearchIntegrationTest.ClusterScope;
|
||||
import org.elasticsearch.test.rest.client.RestException;
|
||||
|
@ -58,7 +58,7 @@ import java.util.*;
|
|||
//tests distribution disabled for now since it causes reporting problems,
|
||||
// due to the non unique suite name
|
||||
//@ReplicateOnEachVm
|
||||
@ESTestCase.Rest
|
||||
@ElasticsearchTestCase.Rest
|
||||
@ClusterScope(randomDynamicTemplates = false)
|
||||
@TimeoutSuite(millis = 40 * TimeUnits.MINUTE) // timeout the suite after 40min and fail the test.
|
||||
public class ElasticsearchRestTests extends ElasticsearchIntegrationTest {
|
||||
|
|
|
@ -44,7 +44,7 @@ import org.elasticsearch.index.store.distributor.Distributor;
|
|||
import org.elasticsearch.index.store.fs.FsDirectoryService;
|
||||
import org.elasticsearch.indices.IndicesLifecycle;
|
||||
import org.elasticsearch.indices.IndicesService;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchTestCase;
|
||||
import org.elasticsearch.test.ElasticsearchIntegrationTest;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -131,7 +131,7 @@ public class MockFSDirectoryService extends FsDirectoryService {
|
|||
return;
|
||||
}
|
||||
if (IndexWriter.isLocked(dir)) {
|
||||
ESTestCase.checkIndexFailed = true;
|
||||
ElasticsearchTestCase.checkIndexFailed = true;
|
||||
throw new IllegalStateException("IndexWriter is still open on shard " + shardId);
|
||||
}
|
||||
try (CheckIndex checkIndex = new CheckIndex(dir)) {
|
||||
|
@ -141,7 +141,7 @@ public class MockFSDirectoryService extends FsDirectoryService {
|
|||
out.flush();
|
||||
CheckIndex.Status status = checkIndex.checkIndex();
|
||||
if (!status.clean) {
|
||||
ESTestCase.checkIndexFailed = true;
|
||||
ElasticsearchTestCase.checkIndexFailed = true;
|
||||
logger.warn("check index [failure] index files={}\n{}",
|
||||
Arrays.toString(dir.listAll()),
|
||||
new String(os.bytes().toBytes(), Charsets.UTF_8));
|
||||
|
|
Loading…
Reference in New Issue