diff options
author | Tanguy Leroux <tlrx.dev@gmail.com> | 2017-06-23 10:54:26 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-23 10:54:26 +0200 |
commit | 6a792d6d826c9f09637253aaf5e250bcfa01591a (patch) | |
tree | d87d7db266000f27401a8d4ef7b4f6a740b1a3a1 /core/src/test/java | |
parent | fdb3a97152cdd798dd1cb2b4737e780b15530342 (diff) |
[Test] Add unit test for XContentParserUtilsTests.parseStoredFieldsValue (#25288)
Diffstat (limited to 'core/src/test/java')
-rw-r--r-- | core/src/test/java/org/elasticsearch/common/xcontent/XContentParserUtilsTests.java | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/core/src/test/java/org/elasticsearch/common/xcontent/XContentParserUtilsTests.java b/core/src/test/java/org/elasticsearch/common/xcontent/XContentParserUtilsTests.java index 195448d9ff..26bf83d7d5 100644 --- a/core/src/test/java/org/elasticsearch/common/xcontent/XContentParserUtilsTests.java +++ b/core/src/test/java/org/elasticsearch/common/xcontent/XContentParserUtilsTests.java @@ -20,19 +20,24 @@ package org.elasticsearch.common.xcontent; import org.apache.lucene.util.SetOnce; +import org.elasticsearch.common.CheckedBiConsumer; import org.elasticsearch.common.ParseField; import org.elasticsearch.common.ParsingException; +import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.xcontent.json.JsonXContent; import org.elasticsearch.test.ESTestCase; import java.io.IOException; import java.util.ArrayList; +import java.util.Base64; import java.util.List; import static org.elasticsearch.common.xcontent.XContentHelper.toXContent; import static org.elasticsearch.common.xcontent.XContentParserUtils.ensureExpectedToken; +import static org.elasticsearch.common.xcontent.XContentParserUtils.ensureFieldName; import static org.elasticsearch.common.xcontent.XContentParserUtils.parseTypedKeysObject; +import static org.hamcrest.Matchers.containsString; public class XContentParserUtilsTests extends ESTestCase { @@ -49,6 +54,76 @@ public class XContentParserUtilsTests extends ESTestCase { } } + public void testParseStoredFieldsValueString() throws IOException { + final String value = randomAlphaOfLengthBetween(0, 10); + assertParseStoredFieldsValue(value, (xcontentType, result) -> assertEquals(value, result)); + } + + public void testParseStoredFieldsValueInt() throws IOException { + final Integer value = randomInt(); + assertParseStoredFieldsValue(value, (xcontentType, result) -> assertEquals(value, result)); + } + + public void testParseStoredFieldsValueLong() throws IOException { + final Long value = randomLong(); + assertParseStoredFieldsValue(value, (xcontentType, result) -> assertEquals(value, result)); + } + + public void testParseStoredFieldsValueDouble() throws IOException { + final Double value = randomDouble(); + assertParseStoredFieldsValue(value, (xcontentType, result) -> assertEquals(value, ((Number) result).doubleValue(), 0.0d)); + } + + public void testParseStoredFieldsValueFloat() throws IOException { + final Float value = randomFloat(); + assertParseStoredFieldsValue(value, (xcontentType, result) -> assertEquals(value, ((Number) result).floatValue(), 0.0f)); + } + + public void testParseStoredFieldsValueBoolean() throws IOException { + final Boolean value = randomBoolean(); + assertParseStoredFieldsValue(value, (xcontentType, result) -> assertEquals(value, result)); + } + + public void testParseStoredFieldsValueBinary() throws IOException { + final byte[] value = randomUnicodeOfLength(scaledRandomIntBetween(10, 1000)).getBytes("UTF-8"); + assertParseStoredFieldsValue(value, (xcontentType, result) -> { + if (xcontentType == XContentType.JSON || xcontentType == XContentType.YAML) { + //binary values will be parsed back and returned as base64 strings when reading from json and yaml + assertArrayEquals(value, Base64.getDecoder().decode((String) result)); + } else { + //binary values will be parsed back and returned as BytesArray when reading from cbor and smile + assertArrayEquals(value, ((BytesArray) result).array()); + } + }); + } + + public void testParseStoredFieldsValueUnknown() throws IOException { + ParsingException e = expectThrows(ParsingException.class, () -> + assertParseStoredFieldsValue(null, (x, r) -> fail("Should have thrown a parsing exception"))); + assertThat(e.getMessage(), containsString("unexpected token")); + } + + private void assertParseStoredFieldsValue(final Object value, final CheckedBiConsumer<XContentType, Object, IOException> consumer) + throws IOException { + final XContentType xContentType = randomFrom(XContentType.values()); + try (XContentBuilder builder = XContentBuilder.builder(xContentType.xContent())) { + final String fieldName = randomAlphaOfLengthBetween(0, 10); + + builder.startObject(); + builder.field(fieldName, value); + builder.endObject(); + + try (XContentParser parser = createParser(builder)) { + ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.nextToken(), parser::getTokenLocation); + ensureFieldName(parser, parser.nextToken(), fieldName); + assertNotNull(parser.nextToken()); + consumer.accept(xContentType, XContentParserUtils.parseStoredFieldsValue(parser)); + ensureExpectedToken(XContentParser.Token.END_OBJECT, parser.nextToken(), parser::getTokenLocation); + assertNull(parser.nextToken()); + } + } + } + public void testParseTypedKeysObject() throws IOException { final String delimiter = randomFrom("#", ":", "/", "-", "_", "|", "_delim_"); final XContentType xContentType = randomFrom(XContentType.values()); |