Class MapperTestCase

java.lang.Object
org.junit.Assert
org.apache.lucene.util.LuceneTestCase
Direct Known Subclasses:
AbstractNumericFieldMapperTestCase

public abstract class MapperTestCase
extends MapperServiceTestCase
Base class for testing Mappers.
  • Constructor Details

    • MapperTestCase

      public MapperTestCase()
  • Method Details

    • minimalMapping

      protected abstract void minimalMapping​(org.elasticsearch.common.xcontent.XContentBuilder b) throws java.io.IOException
      Throws:
      java.io.IOException
    • writeField

      protected void writeField​(org.elasticsearch.common.xcontent.XContentBuilder builder) throws java.io.IOException
      Writes the field and a sample value for it to the provided XContentBuilder. To be overridden in case the field should not be written at all in documents, like in the case of runtime fields.
      Throws:
      java.io.IOException
    • getSampleValueForDocument

      protected abstract java.lang.Object getSampleValueForDocument()
      Returns a sample value for the field, to be used in a document
    • getSampleValueForQuery

      protected java.lang.Object getSampleValueForQuery()
      Returns a sample value for the field, to be used when querying the field. Normally this is the same format as what is indexed as part of a document, and returned by getSampleValueForDocument(), but there are cases where fields are queried differently frow how they are indexed e.g. token_count or runtime fields
    • testExistsQueryMinimalMapping

      public final void testExistsQueryMinimalMapping() throws java.io.IOException
      This test verifies that the exists query created is the appropriate one, and aligns with the data structures being created for a document with a value for the field. This can only be verified for the minimal mapping. Field types that allow configurable doc_values or norms should write their own tests that creates the different mappings combinations and invoke assertExistsQuery(MapperService) to verify the behaviour.
      Throws:
      java.io.IOException
    • assertExistsQuery

      protected void assertExistsQuery​(org.elasticsearch.index.mapper.MapperService mapperService) throws java.io.IOException
      Throws:
      java.io.IOException
    • assertExistsQuery

      protected void assertExistsQuery​(org.elasticsearch.index.mapper.MappedFieldType fieldType, org.apache.lucene.search.Query query, org.elasticsearch.index.mapper.ParseContext.Document fields)
    • assertNoFieldNamesField

      protected static void assertNoFieldNamesField​(org.elasticsearch.index.mapper.ParseContext.Document fields)
    • assertHasNorms

      protected static void assertHasNorms​(org.elasticsearch.index.mapper.ParseContext.Document doc, java.lang.String field)
    • assertDocValuesField

      protected static void assertDocValuesField​(org.elasticsearch.index.mapper.ParseContext.Document doc, java.lang.String field)
    • assertNoDocValuesField

      protected static void assertNoDocValuesField​(org.elasticsearch.index.mapper.ParseContext.Document doc, java.lang.String field)
    • testEmptyName

      public final void testEmptyName()
    • testMinimalSerializesToItself

      public final void testMinimalSerializesToItself() throws java.io.IOException
      Throws:
      java.io.IOException
    • testMinimalToMaximal

      public void testMinimalToMaximal() throws java.io.IOException
      Throws:
      java.io.IOException
    • assertParseMinimalWarnings

      protected final void assertParseMinimalWarnings()
    • assertParseMaximalWarnings

      protected final void assertParseMaximalWarnings()
    • getParseMinimalWarnings

      protected java.lang.String[] getParseMinimalWarnings()
    • getParseMaximalWarnings

      protected java.lang.String[] getParseMaximalWarnings()
    • supportsMeta

      protected boolean supportsMeta()
      Override to disable testing meta in fields that don't support it.
    • metaMapping

      protected void metaMapping​(org.elasticsearch.common.xcontent.XContentBuilder b) throws java.io.IOException
      Throws:
      java.io.IOException
    • testMeta

      public void testMeta() throws java.io.IOException
      Throws:
      java.io.IOException
    • typeName

      protected java.lang.String typeName() throws java.io.IOException
      Throws:
      java.io.IOException
    • testDeprecatedBoost

      public final void testDeprecatedBoost() throws java.io.IOException
      Throws:
      java.io.IOException
    • fetchFromDocValues

      protected final java.util.List<?> fetchFromDocValues​(org.elasticsearch.index.mapper.MapperService mapperService, org.elasticsearch.index.mapper.MappedFieldType ft, org.elasticsearch.search.DocValueFormat format, java.lang.Object sourceValue) throws java.io.IOException
      Use a ValueFetcher to extract values from doc values.
      Throws:
      java.io.IOException
    • registerParameters

      protected abstract void registerParameters​(MapperTestCase.ParameterChecker checker) throws java.io.IOException
      Throws:
      java.io.IOException
    • testUpdates

      public void testUpdates() throws java.io.IOException
      Throws:
      java.io.IOException
    • testTextSearchInfoConsistency

      public final void testTextSearchInfoConsistency() throws java.io.IOException
      Throws:
      java.io.IOException
    • assertSearchable

      protected void assertSearchable​(org.elasticsearch.index.mapper.MappedFieldType fieldType)
    • testFetch

      public final void testFetch() throws java.io.IOException
      Asserts that fetching a single value from doc values and from the native MappedFieldType.valueFetcher(org.elasticsearch.index.query.SearchExecutionContext, java.lang.String) produce the same results.

      Generally this method covers many many random cases but rarely. So if it fails its generally a good idea to capture its randomized parameters into a new method so we can be sure we consistently test any unique and interesting failure case. See the tests for DateFieldMapper for some examples.

      Throws:
      java.io.IOException
    • testFetchMany

      public final void testFetchMany() throws java.io.IOException
      Asserts that fetching many values from doc values and from the native MappedFieldType.valueFetcher(org.elasticsearch.index.query.SearchExecutionContext, java.lang.String) produce the same results.

      Generally this method covers many many random cases but rarely. So if it fails its generally a good idea to capture its randomized parameters into a new method so we can be sure we consistently test any unique and interesting failure case. See the tests for DateFieldMapper for some examples.

      Throws:
      java.io.IOException
    • randomFetchTestMapper

      protected final org.elasticsearch.index.mapper.MapperService randomFetchTestMapper() throws java.io.IOException
      Throws:
      java.io.IOException
    • randomFetchTestFieldConfig

      protected void randomFetchTestFieldConfig​(org.elasticsearch.common.xcontent.XContentBuilder b) throws java.io.IOException
      Field configuration for testFetch() and testFetchMany(). Default implementation delegates to minimalMapping(org.elasticsearch.common.xcontent.XContentBuilder) but can be overridden to randomize the field type and options.
      Throws:
      java.io.IOException
    • randomFetchTestFormat

      protected java.lang.String randomFetchTestFormat()
      A random format to use when tripping in testFetch() and testFetchMany().
    • generateRandomInputValue

      protected abstract java.lang.Object generateRandomInputValue​(org.elasticsearch.index.mapper.MappedFieldType ft)
      Create a random _source value for this field. Must be compatible with XContentBuilder.value(Object) and the field's parser.
    • assertFetch

      protected void assertFetch​(org.elasticsearch.index.mapper.MapperService mapperService, java.lang.String field, java.lang.Object value, java.lang.String format) throws java.io.IOException
      Assert that fetching a value using MappedFieldType.valueFetcher(org.elasticsearch.index.query.SearchExecutionContext, java.lang.String) produces the same value as fetching using doc values.
      Throws:
      java.io.IOException
    • dedupAfterFetch

      protected boolean dedupAfterFetch()
      A few field types (e.g. keyword fields) don't allow duplicate values, so in those cases we need to de-dup our expected values. Field types where this is the case should overwrite this. The default is to not de-duplicate though.
    • supportsSearchLookup

      protected boolean supportsSearchLookup()
      Returns:
      whether or not this field type supports access to its values from a SearchLookup
    • testIndexTimeFieldData

      public final void testIndexTimeFieldData() throws java.io.IOException
      Checks that field data from this field produces the same values for query-time scripts and for index-time scripts
      Throws:
      java.io.IOException
    • allowsStore

      protected boolean allowsStore()
    • testIndexTimeStoredFieldsAccess

      public final void testIndexTimeStoredFieldsAccess() throws java.io.IOException
      Checks that loading stored fields for this field produces the same set of values for query time scripts and index time scripts
      Throws:
      java.io.IOException
    • testNullInput

      public final void testNullInput() throws java.lang.Exception
      Throws:
      java.lang.Exception
    • allowsNullValues

      protected boolean allowsNullValues()