Skip to content

Commit 6b75525

Browse files
committed
EQL: Improve testing spec (#59615)
Case sensitivity is incorporated as a test dimension - instead of running the same test twice, two different tests are created. Clean-up the test invocation by removing unused parameters. Fix #59294 (cherry picked from commit 72c8a35)
1 parent b5ab447 commit 6b75525

File tree

3 files changed

+44
-32
lines changed

3 files changed

+44
-32
lines changed

x-pack/plugin/eql/qa/common/src/main/java/org/elasticsearch/test/eql/CommonEqlActionTestCase.java

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.elasticsearch.client.eql.EqlSearchResponse.Hits;
1919
import org.elasticsearch.client.eql.EqlSearchResponse.Sequence;
2020
import org.elasticsearch.common.Strings;
21+
import org.elasticsearch.common.logging.LoggerMessageFormat;
2122
import org.elasticsearch.search.SearchHit;
2223
import org.elasticsearch.test.rest.ESRestTestCase;
2324
import org.junit.After;
@@ -30,7 +31,6 @@
3031
import java.util.HashSet;
3132
import java.util.List;
3233
import java.util.Set;
33-
import java.util.concurrent.atomic.AtomicInteger;
3434

3535
import static java.util.stream.Collectors.toList;
3636
import static org.elasticsearch.test.eql.DataLoader.testIndexName;
@@ -91,44 +91,42 @@ public static List<Object[]> readTestSpecs() throws Exception {
9191
}
9292

9393
private static List<Object[]> asArray(List<EqlSpec> specs) {
94-
AtomicInteger counter = new AtomicInteger();
95-
return specs.stream().map(spec -> {
94+
int counter = 0;
95+
List<Object[]> results = new ArrayList<>();
96+
97+
for (EqlSpec spec : specs) {
9698
String name = spec.name();
9799
if (Strings.isNullOrEmpty(name)) {
98100
name = spec.note();
99101
}
100102
if (Strings.isNullOrEmpty(name)) {
101-
name = "" + (counter.get() + 1);
103+
name = "" + (counter);
102104
}
103105

104-
return new Object[] { counter.incrementAndGet(), name, spec };
105-
}).collect(toList());
106+
boolean[] values = spec.caseSensitive() == null ? new boolean[] { true, false } : new boolean[] { spec.caseSensitive() };
107+
108+
for (boolean bool : values) {
109+
results.add(new Object[] { spec.query(), name, spec.expectedEventIds(), bool });
110+
}
111+
}
112+
113+
return results;
106114
}
107115

108-
private final int num;
116+
private final String query;
109117
private final String name;
110-
private final EqlSpec spec;
118+
private final long[] eventIds;
119+
private final boolean caseSensitive;
111120

112-
public CommonEqlActionTestCase(int num, String name, EqlSpec spec) {
113-
this.num = num;
121+
public CommonEqlActionTestCase(String query, String name, long[] eventIds, boolean caseSensitive) {
122+
this.query = query;
114123
this.name = name;
115-
this.spec = spec;
124+
this.eventIds = eventIds;
125+
this.caseSensitive = caseSensitive;
116126
}
117127

118128
public void test() throws Exception {
119-
// run both tests if case sensitivity doesn't matter
120-
if (spec.caseSensitive() == null) {
121-
assertResponse(runQuery(testIndexName, spec.query(), true));
122-
assertResponse(runQuery(testIndexName, spec.query(), false));
123-
}
124-
// run only the case sensitive test
125-
else if (spec.caseSensitive()) {
126-
assertResponse(runQuery(testIndexName, spec.query(), true));
127-
}
128-
// run only the case insensitive test
129-
else {
130-
assertResponse(runQuery(testIndexName, spec.query(), false));
131-
}
129+
assertResponse(runQuery(testIndexName, query, caseSensitive));
132130
}
133131

134132
protected void assertResponse(EqlSearchResponse response) {
@@ -145,7 +143,7 @@ else if (hits.sequences() != null) {
145143
}
146144

147145
protected EqlSearchResponse runQuery(String index, String query, boolean isCaseSensitive) throws Exception {
148-
EqlSearchRequest request = new EqlSearchRequest(testIndexName, query);
146+
EqlSearchRequest request = new EqlSearchRequest(index, query);
149147
request.isCaseSensitive(isCaseSensitive);
150148
request.tiebreakerField("event.sequence");
151149
// some queries return more than 10 results
@@ -160,10 +158,11 @@ private EqlClient eqlClient() {
160158

161159
protected void assertSearchHits(List<SearchHit> events) {
162160
assertNotNull(events);
163-
long[] expected = spec.expectedEventIds();
161+
long[] expected = eventIds;
164162
long[] actual = extractIds(events);
165-
assertArrayEquals("unexpected result for spec: [" + spec.toString() + "]" + Arrays.toString(expected) + " vs " + Arrays.toString(
166-
actual), expected, actual);
163+
assertArrayEquals(LoggerMessageFormat.format(null, "unexpected result for spec[{}] [{}] -> {} vs {}", name, query, Arrays.toString(
164+
expected), Arrays.toString(actual)),
165+
expected, actual);
167166
}
168167

169168
private static long[] extractIds(List<SearchHit> events) {

x-pack/plugin/eql/qa/common/src/main/java/org/elasticsearch/test/eql/EqlSpec.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,19 @@ public Boolean caseSensitive() {
8181
return this.caseSensitive;
8282
}
8383

84+
public EqlSpec withSensitivity(boolean caseSensitive) {
85+
EqlSpec spec = new EqlSpec();
86+
spec.name = name;
87+
spec.description = description;
88+
spec.note = note;
89+
spec.tags = tags;
90+
spec.query = query;
91+
spec.expectedEventIds = expectedEventIds;
92+
93+
spec.caseSensitive = caseSensitive;
94+
return spec;
95+
}
96+
8497
@Override
8598
public String toString() {
8699
String str = "";

x-pack/plugin/eql/qa/rest/src/test/java/org/elasticsearch/xpack/eql/EqlActionIT.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
package org.elasticsearch.xpack.eql;
88

99
import org.elasticsearch.test.eql.CommonEqlActionTestCase;
10-
import org.elasticsearch.test.eql.EqlSpec;
1110

1211
public class EqlActionIT extends CommonEqlActionTestCase {
13-
// Constructor for parameterized test
14-
public EqlActionIT(int num, String name, EqlSpec spec) {
15-
super(num, name, spec);
12+
13+
public EqlActionIT(String query, String name, long[] eventIds, boolean caseSensitive) {
14+
super(query, name, eventIds, caseSensitive);
1615
}
16+
1717
}

0 commit comments

Comments
 (0)