Skip to content

Commit

Permalink
Fix the bwc serialization tests (#69534)
Browse files Browse the repository at this point in the history
  • Loading branch information
astefan authored Feb 24, 2021
1 parent 2048eb7 commit df74efb
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,8 @@ static List<org.elasticsearch.xpack.eql.action.EqlSearchResponse.Event> randomEv
for (int i = 0; i < size; i++) {
BytesReference bytes = new RandomSource(() -> randomAlphaOfLength(10)).toBytes(xType);
Map<String, DocumentField> 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()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ private static List<Version> getAllBWCVersions(Version version) {

private static final List<Version> 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();
Expand All @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ private static List<Version> getAllBWCVersions(Version version) {

private static final List<Version> 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();
Expand All @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -101,4 +102,24 @@ protected Writeable.Reader<EqlSearchRequest> 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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -100,7 +102,8 @@ static List<Event> randomEvents(XContentType xType) {
for (int i = 0; i < size; i++) {
BytesReference bytes = new RandomSource(() -> randomAlphaOfLength(10)).toBytes(xType);
Map<String, DocumentField> 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()) {
Expand Down Expand Up @@ -217,5 +220,32 @@ public static EqlSearchResponse createRandomInstance(TotalHits totalHits, XConte
return null;
}
}


@Override
protected EqlSearchResponse mutateInstanceForVersion(EqlSearchResponse instance, Version version) {
List<Event> mutatedEvents = mutateEvents(instance.hits().events(), version);

List<Sequence> sequences = instance.hits().sequences();
List<Sequence> 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<Event> mutateEvents(List<Event> original, Version version) {
if (original == null || original.isEmpty()) {
return original;
}
List<Event> 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;
}
}

0 comments on commit df74efb

Please sign in to comment.