summaryrefslogtreecommitdiff
path: root/core/src/test/java/org/elasticsearch/common
diff options
context:
space:
mode:
authorTanguy Leroux <tlrx.dev@gmail.com>2017-06-23 10:54:26 +0200
committerGitHub <noreply@github.com>2017-06-23 10:54:26 +0200
commit6a792d6d826c9f09637253aaf5e250bcfa01591a (patch)
treed87d7db266000f27401a8d4ef7b4f6a740b1a3a1 /core/src/test/java/org/elasticsearch/common
parentfdb3a97152cdd798dd1cb2b4737e780b15530342 (diff)
[Test] Add unit test for XContentParserUtilsTests.parseStoredFieldsValue (#25288)
Diffstat (limited to 'core/src/test/java/org/elasticsearch/common')
-rw-r--r--core/src/test/java/org/elasticsearch/common/xcontent/XContentParserUtilsTests.java75
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());