-
Notifications
You must be signed in to change notification settings - Fork 25.6k
XContentTests : insert random fields at random positions #30867
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 3 commits
690a878
c8d83ac
31de42c
d6d28f5
85b9b32
a854b23
ed83d40
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -54,21 +54,16 @@ public static <T extends ToXContent> void testFromXContent(int numberOfTestRuns, | |
| for (int runs = 0; runs < numberOfTestRuns; runs++) { | ||
| T testInstance = instanceSupplier.get(); | ||
| XContentType xContentType = randomFrom(XContentType.values()); | ||
| BytesReference shuffled = toShuffledXContent(testInstance, xContentType, toXContentParams,false, | ||
| createParserFunction, shuffleFieldsExceptions); | ||
| BytesReference withRandomFields; | ||
| if (supportsUnknownFields) { | ||
| // we add a few random fields to check that parser is lenient on new fields | ||
| withRandomFields = XContentTestUtils.insertRandomFields(xContentType, shuffled, randomFieldsExcludeFilter, random()); | ||
| } else { | ||
| withRandomFields = shuffled; | ||
| } | ||
| XContentParser parser = createParserFunction.apply(XContentFactory.xContent(xContentType), withRandomFields); | ||
| BytesReference shuffledContent = insertRandomFieldsAndShuffle(testInstance, xContentType, supportsUnknownFields, | ||
| shuffleFieldsExceptions, randomFieldsExcludeFilter, createParserFunction, toXContentParams); | ||
| XContentParser parser = createParserFunction.apply(XContentFactory.xContent(xContentType), shuffledContent); | ||
| T parsed = parseFunction.apply(parser); | ||
| assertEqualsConsumer.accept(testInstance, parsed); | ||
| if (assertToXContentEquivalence) { | ||
| assertToXContentEquivalent(shuffled, XContentHelper.toXContent(parsed, xContentType, toXContentParams, false), | ||
| xContentType); | ||
| assertToXContentEquivalent( | ||
| XContentHelper.toXContent(testInstance, xContentType, false), | ||
| XContentHelper.toXContent(parsed, xContentType, false), | ||
| xContentType); | ||
| } | ||
| } | ||
| } | ||
|
|
@@ -132,9 +127,26 @@ protected String[] getShuffleFieldsExceptions() { | |
| } | ||
|
|
||
| /** | ||
| * Params that have to be provided when calling calling {@link ToXContent#toXContent(XContentBuilder, ToXContent.Params)} | ||
| * Params that have to be provided when calling {@link ToXContent#toXContent(XContentBuilder, ToXContent.Params)} | ||
| */ | ||
| protected ToXContent.Params getToXContentParams() { | ||
| return ToXContent.EMPTY_PARAMS; | ||
| } | ||
|
|
||
| public static BytesReference insertRandomFieldsAndShuffle(ToXContent testInstance, XContentType xContentType, | ||
|
||
| boolean supportsUnknownFields, String[] shuffleFieldsExceptions, Predicate<String> randomFieldsExcludeFilter, | ||
| CheckedBiFunction<XContent, BytesReference, XContentParser, IOException> createParserFunction, | ||
| ToXContent.Params toXContentParams) throws IOException { | ||
| BytesReference xContent = XContentHelper.toXContent(testInstance, xContentType, toXContentParams, false); | ||
| BytesReference withRandomFields; | ||
| if (supportsUnknownFields) { | ||
| // add a few random fields to check that the parser is lenient on new fields | ||
| withRandomFields = XContentTestUtils.insertRandomFields(xContentType, xContent, randomFieldsExcludeFilter, random()); | ||
| } else { | ||
| withRandomFields = xContent; | ||
| } | ||
| XContentParser parserWithRandonFields = createParserFunction.apply(XContentFactory.xContent(xContentType), withRandomFields); | ||
| return BytesReference.bytes(ESTestCase.shuffleXContent(parserWithRandonFields, false, shuffleFieldsExceptions)); | ||
| } | ||
|
|
||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,52 @@ | ||
| package org.elasticsearch.test; | ||
|
|
||
| import org.elasticsearch.common.bytes.BytesReference; | ||
| import org.elasticsearch.common.xcontent.ToXContent; | ||
| import org.elasticsearch.common.xcontent.ToXContentObject; | ||
| import org.elasticsearch.common.xcontent.XContentBuilder; | ||
| import org.elasticsearch.common.xcontent.XContentParser; | ||
| import org.elasticsearch.common.xcontent.XContentType; | ||
|
|
||
| import java.io.IOException; | ||
| import java.util.Map; | ||
|
|
||
| import static org.hamcrest.Matchers.equalTo; | ||
|
|
||
| public class AbstractXContentTestCaseTests extends ESTestCase { | ||
|
|
||
| private static final int NUMBER_OF_TEST_RUNS = 10; | ||
|
|
||
| public void testSomethign() throws IOException { | ||
|
||
| for (int runs = 0; runs < NUMBER_OF_TEST_RUNS; runs++) { | ||
|
||
| TestInstance t = new TestInstance(); | ||
| boolean atRandomPosition = false; | ||
| for (int i = 0; i < 5; i++) { | ||
|
||
| BytesReference insertRandomFieldsAndShuffle = AbstractXContentTestCase.insertRandomFieldsAndShuffle(t, XContentType.JSON, | ||
| true, new String[] {}, null, this::createParser, ToXContent.EMPTY_PARAMS); | ||
| try (XContentParser parser = createParser(XContentType.JSON.xContent(), insertRandomFieldsAndShuffle)) { | ||
| Map<String, Object> mapOrdered = parser.mapOrdered(); | ||
| assertThat(mapOrdered.size(), equalTo(2)); | ||
| if (false == "field".equals(mapOrdered.keySet().iterator().next())) { | ||
| atRandomPosition = true; | ||
| break; | ||
| } | ||
| } | ||
| } | ||
| assertThat(atRandomPosition, equalTo(true)); | ||
| } | ||
| } | ||
| } | ||
|
|
||
| class TestInstance implements ToXContentObject { | ||
|
||
|
|
||
| @Override | ||
| public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { | ||
| builder.startObject(); | ||
| { | ||
| builder.field("field", 1); | ||
| } | ||
| builder.endObject(); | ||
| return builder; | ||
| } | ||
|
|
||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have a hunch that this will again need to be changed using the variant that takes the
toXContentParamsargument. Will dig.