diff --git a/server/src/test/java/org/elasticsearch/index/mapper/blockloader/TextFieldBlockLoaderTests.java b/server/src/test/java/org/elasticsearch/index/mapper/blockloader/TextFieldBlockLoaderTests.java index 77c42740451ee..afbdb8382a15c 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/blockloader/TextFieldBlockLoaderTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/blockloader/TextFieldBlockLoaderTests.java @@ -27,6 +27,8 @@ public TextFieldBlockLoaderTests(Params params) { @Override protected Object expected(Map fieldMapping, Object value, TestContext testContext) { + logger.info("field mapping={}", fieldMapping); + logger.info("value={}", value); return expectedValue(fieldMapping, value, params, testContext); } @@ -82,7 +84,7 @@ public static Object expectedValue(Map fieldMapping, Object valu .map(BytesRef::new) .collect(Collectors.toList()); - if (store == false) { + if (store == false && ignoreAbove.equals(Integer.MAX_VALUE)) { // using doc_values for synthetic source indexed = new ArrayList<>(new HashSet<>(indexed)); indexed.sort(BytesRef::compareTo); diff --git a/test/framework/src/main/java/org/elasticsearch/index/mapper/BlockLoaderTestRunner.java b/test/framework/src/main/java/org/elasticsearch/index/mapper/BlockLoaderTestRunner.java index eb5bbea9e6bba..79ef5f9e0dcc7 100644 --- a/test/framework/src/main/java/org/elasticsearch/index/mapper/BlockLoaderTestRunner.java +++ b/test/framework/src/main/java/org/elasticsearch/index/mapper/BlockLoaderTestRunner.java @@ -13,6 +13,7 @@ import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.store.Directory; import org.apache.lucene.tests.index.RandomIndexWriter; +import org.apache.lucene.util.BytesRef; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.index.IndexSettings; import org.elasticsearch.index.fieldvisitor.StoredFieldLoader; @@ -24,6 +25,8 @@ import org.junit.Assert; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Set; @@ -44,9 +47,30 @@ public void runTest(MapperService mapperService, Map document, O var documentXContent = XContentBuilder.builder(XContentType.JSON.xContent()).map(document); Object blockLoaderResult = setupAndInvokeBlockLoader(mapperService, documentXContent, blockLoaderFieldName); + expected = attemptMakeReadable(expected); + blockLoaderResult = attemptMakeReadable(blockLoaderResult); Assert.assertEquals(expected, blockLoaderResult); } + // Attempt to make assertions readable: + private static Object attemptMakeReadable(Object expected) { + try { + if (expected instanceof BytesRef bytesRef) { + expected = bytesRef.utf8ToString(); + } else if (expected instanceof List list && list.getFirst() instanceof BytesRef) { + List expectedList = new ArrayList<>(list.size()); + for (Object e : list) { + expectedList.add(((BytesRef) e).utf8ToString()); + } + expected = expectedList; + } + return expected; + } catch (Exception | AssertionError e) { + // ip/geo fields can't be converted to strings: + return expected; + } + } + private Object setupAndInvokeBlockLoader(MapperService mapperService, XContentBuilder document, String fieldName) throws IOException { try (Directory directory = newDirectory()) { RandomIndexWriter iw = new RandomIndexWriter(random(), directory);