diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/eql/EqlSearchResponseTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/eql/EqlSearchResponseTests.java index 8bbaaece03e85..68fff9a5479d6 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/eql/EqlSearchResponseTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/eql/EqlSearchResponseTests.java @@ -90,7 +90,8 @@ static List randomEv for (int i = 0; i < size; i++) { BytesReference bytes = new RandomSource(() -> randomAlphaOfLength(10)).toBytes(xType); Map fetchFields = new HashMap<>(); - for (int j = 0; j < randomIntBetween(0, 5); j++) { + int fieldsCount = randomIntBetween(0, 5); + for (int j = 0; j < fieldsCount; j++) { fetchFields.put(randomAlphaOfLength(10), randomDocumentField(xType).v1()); } if (fetchFields.isEmpty() && randomBoolean()) { diff --git a/x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/action/EqlSearchRequest.java b/x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/action/EqlSearchRequest.java index aea0143140660..0dc4b462c18c7 100644 --- a/x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/action/EqlSearchRequest.java +++ b/x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/action/EqlSearchRequest.java @@ -115,7 +115,7 @@ public EqlSearchRequest(StreamInput in) throws IOException { if (in.getVersion().onOrAfter(Version.V_7_10_0)) { resultPosition = in.readString(); } - if (in.getVersion().onOrAfter(Version.V_7_12_0)) { + if (in.getVersion().onOrAfter(Version.V_7_13_0)) { if (in.readBoolean()) { fetchFields = in.readList(FieldAndFormat::new); } @@ -363,7 +363,7 @@ public void writeTo(StreamOutput out) throws IOException { if (out.getVersion().onOrAfter(Version.V_7_10_0)) { // TODO: Remove after backport out.writeString(resultPosition); } - if (out.getVersion().onOrAfter(Version.V_7_12_0)) { + if (out.getVersion().onOrAfter(Version.V_7_13_0)) { out.writeBoolean(fetchFields != null); if (fetchFields != null) { out.writeList(fetchFields); diff --git a/x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/action/EqlSearchResponse.java b/x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/action/EqlSearchResponse.java index 0c41429a9d2bc..35de1bf998aad 100644 --- a/x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/action/EqlSearchResponse.java +++ b/x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/action/EqlSearchResponse.java @@ -242,7 +242,7 @@ public Event(StreamInput in) throws IOException { index = in.readString(); id = in.readString(); source = in.readBytesReference(); - if (in.getVersion().onOrAfter(Version.V_7_12_0) && in.readBoolean()) { + if (in.getVersion().onOrAfter(Version.V_7_13_0) && in.readBoolean()) { fetchFields = in.readMap(StreamInput::readString, DocumentField::new); } else { fetchFields = null; @@ -254,7 +254,7 @@ public void writeTo(StreamOutput out) throws IOException { out.writeString(index); out.writeString(id); out.writeBytesReference(source); - if (out.getVersion().onOrAfter(Version.V_7_12_0)) { + if (out.getVersion().onOrAfter(Version.V_7_13_0)) { out.writeBoolean(fetchFields != null); if (fetchFields != null) { out.writeMap(fetchFields, StreamOutput::writeString, (stream, documentField) -> documentField.writeTo(stream)); diff --git a/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/AbstractBWCSerializationTestCase.java b/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/AbstractBWCSerializationTestCase.java index 0fc7030f5cf93..f64a3adf537b3 100644 --- a/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/AbstractBWCSerializationTestCase.java +++ b/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/AbstractBWCSerializationTestCase.java @@ -31,6 +31,8 @@ private static List getAllBWCVersions(Version version) { private static final List DEFAULT_BWC_VERSIONS = getAllBWCVersions(Version.CURRENT); + protected abstract T mutateInstanceForVersion(T instance, Version version); + public final void testBwcSerialization() throws IOException { for (int runs = 0; runs < NUMBER_OF_TEST_RUNS; runs++) { T testInstance = createTestInstance(); @@ -42,7 +44,7 @@ public final void testBwcSerialization() throws IOException { protected final void assertBwcSerialization(T testInstance, Version version) throws IOException { T deserializedInstance = copyInstance(testInstance, version); - assertOnBWCObject(testInstance, deserializedInstance, version); + assertOnBWCObject(mutateInstanceForVersion(testInstance, version), deserializedInstance, version); } protected void assertOnBWCObject(T testInstance, T bwcDeserializedObject, Version version) { diff --git a/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/AbstractBWCWireSerializingTestCase.java b/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/AbstractBWCWireSerializingTestCase.java index 9b36787247329..42d0744fd140a 100644 --- a/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/AbstractBWCWireSerializingTestCase.java +++ b/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/AbstractBWCWireSerializingTestCase.java @@ -30,6 +30,8 @@ private static List getAllBWCVersions(Version version) { private static final List DEFAULT_BWC_VERSIONS = getAllBWCVersions(Version.CURRENT); + protected abstract T mutateInstanceForVersion(T instance, Version version); + public final void testBwcSerialization() throws IOException { for (int runs = 0; runs < NUMBER_OF_TEST_RUNS; runs++) { T testInstance = createTestInstance(); @@ -41,7 +43,7 @@ public final void testBwcSerialization() throws IOException { protected final void assertBwcSerialization(T testInstance, Version version) throws IOException { T deserializedInstance = copyInstance(testInstance, version); - assertOnBWCObject(testInstance, deserializedInstance, version); + assertOnBWCObject(mutateInstanceForVersion(testInstance, version), deserializedInstance, version); } protected void assertOnBWCObject(T testInstance, T bwcDeserializedObject, Version version) { diff --git a/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/action/EqlSearchRequestTests.java b/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/action/EqlSearchRequestTests.java index 425ff1a25e073..a7bbfd5f89755 100644 --- a/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/action/EqlSearchRequestTests.java +++ b/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/action/EqlSearchRequestTests.java @@ -6,6 +6,7 @@ */ package org.elasticsearch.xpack.eql.action; +import org.elasticsearch.Version; import org.elasticsearch.common.io.stream.NamedWriteableRegistry; import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.common.settings.Settings; @@ -101,4 +102,24 @@ protected Writeable.Reader instanceReader() { protected EqlSearchRequest doParseInstance(XContentParser parser) { return EqlSearchRequest.fromXContent(parser).indices(new String[]{defaultTestIndex}); } + + @Override + protected EqlSearchRequest mutateInstanceForVersion(EqlSearchRequest instance, Version version) { + EqlSearchRequest mutatedInstance = new EqlSearchRequest(); + mutatedInstance.indices(instance.indices()); + mutatedInstance.indicesOptions(instance.indicesOptions()); + mutatedInstance.filter(instance.filter()); + mutatedInstance.timestampField(instance.timestampField()); + mutatedInstance.tiebreakerField(instance.tiebreakerField()); + mutatedInstance.eventCategoryField(instance.eventCategoryField()); + mutatedInstance.size(instance.size()); + mutatedInstance.fetchSize(instance.fetchSize()); + mutatedInstance.query(instance.query()); + mutatedInstance.waitForCompletionTimeout(instance.waitForCompletionTimeout()); + mutatedInstance.keepAlive(instance.keepAlive()); + mutatedInstance.keepOnCompletion(instance.keepOnCompletion()); + mutatedInstance.fetchFields(version.onOrAfter(Version.V_7_13_0) ? instance.fetchFields() : null); + + return mutatedInstance; + } } diff --git a/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/action/EqlSearchResponseTests.java b/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/action/EqlSearchResponseTests.java index 3798a7f8bb6e5..d04b63c926d35 100644 --- a/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/action/EqlSearchResponseTests.java +++ b/x-pack/plugin/eql/src/test/java/org/elasticsearch/xpack/eql/action/EqlSearchResponseTests.java @@ -7,6 +7,7 @@ package org.elasticsearch.xpack.eql.action; import org.apache.lucene.search.TotalHits; +import org.elasticsearch.Version; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.collect.Tuple; import org.elasticsearch.common.document.DocumentField; @@ -20,6 +21,7 @@ import org.elasticsearch.test.RandomObjects; import org.elasticsearch.xpack.eql.AbstractBWCWireSerializingTestCase; import org.elasticsearch.xpack.eql.action.EqlSearchResponse.Event; +import org.elasticsearch.xpack.eql.action.EqlSearchResponse.Sequence; import java.io.IOException; import java.util.ArrayList; @@ -100,7 +102,8 @@ static List randomEvents(XContentType xType) { for (int i = 0; i < size; i++) { BytesReference bytes = new RandomSource(() -> randomAlphaOfLength(10)).toBytes(xType); Map fetchFields = new HashMap<>(); - for (int j = 0; j < randomIntBetween(0, 5); j++) { + int fieldsCount = randomIntBetween(0, 5); + for (int j = 0; j < fieldsCount; j++) { fetchFields.put(randomAlphaOfLength(10), randomDocumentField(xType).v1()); } if (fetchFields.isEmpty() && randomBoolean()) { @@ -217,5 +220,32 @@ public static EqlSearchResponse createRandomInstance(TotalHits totalHits, XConte return null; } } - + + @Override + protected EqlSearchResponse mutateInstanceForVersion(EqlSearchResponse instance, Version version) { + List mutatedEvents = mutateEvents(instance.hits().events(), version); + + List sequences = instance.hits().sequences(); + List mutatedSequences = null; + if (sequences != null) { + mutatedSequences = new ArrayList<>(sequences.size()); + for(Sequence s : sequences) { + mutatedSequences.add(new Sequence(s.joinKeys(), mutateEvents(s.events(), version))); + } + } + + return new EqlSearchResponse(new EqlSearchResponse.Hits(mutatedEvents, mutatedSequences, instance.hits().totalHits()), + instance.took(), instance.isTimeout(), instance.id(), instance.isRunning(), instance.isPartial()); + } + + private List mutateEvents(List original, Version version) { + if (original == null || original.isEmpty()) { + return original; + } + List mutatedEvents = new ArrayList<>(original.size()); + for(Event e : original) { + mutatedEvents.add(new Event(e.index(), e.id(), e.source(), version.onOrAfter(Version.V_7_13_0) ? e.fetchFields() : null)); + } + return mutatedEvents; + } }