Skip to content

Commit 8704189

Browse files
authored
ESQL: Send version in spec tests (#107268)
For now this just sends a random version; later, we will want to specify applicable versions in the csv tests themselves.
1 parent 49976a5 commit 8704189

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/EsqlSpecTestCase.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.carrotsearch.randomizedtesting.annotations.ParametersFactory;
1010

1111
import org.apache.http.HttpEntity;
12+
import org.elasticsearch.Build;
1213
import org.elasticsearch.Version;
1314
import org.elasticsearch.client.Request;
1415
import org.elasticsearch.client.ResponseException;
@@ -23,6 +24,7 @@
2324
import org.elasticsearch.xcontent.XContentType;
2425
import org.elasticsearch.xpack.esql.CsvTestUtils;
2526
import org.elasticsearch.xpack.esql.qa.rest.RestEsqlTestCase.RequestObjectBuilder;
27+
import org.elasticsearch.xpack.esql.version.EsqlVersion;
2628
import org.elasticsearch.xpack.ql.CsvSpecReader.CsvTestCase;
2729
import org.elasticsearch.xpack.ql.SpecReader;
2830
import org.junit.After;
@@ -35,6 +37,7 @@
3537
import java.util.List;
3638
import java.util.Locale;
3739
import java.util.Map;
40+
import java.util.Set;
3841
import java.util.regex.Pattern;
3942

4043
import static org.apache.lucene.geo.GeoEncodingUtils.decodeLatitude;
@@ -65,6 +68,7 @@ public abstract class EsqlSpecTestCase extends ESRestTestCase {
6568
private final Integer lineNumber;
6669
protected final CsvTestCase testCase;
6770
protected final Mode mode;
71+
protected final Set<EsqlVersion> versions;
6872

6973
public enum Mode {
7074
SYNC,
@@ -97,6 +101,8 @@ protected EsqlSpecTestCase(String fileName, String groupName, String testName, I
97101
this.lineNumber = lineNumber;
98102
this.testCase = testCase;
99103
this.mode = mode;
104+
// TODO: Read applicable versions from csv-spec files/make it part of testCase.
105+
this.versions = Build.current().isSnapshot() ? Set.of(EsqlVersion.values()) : Set.of(EsqlVersion.releasedAscending());
100106
}
101107

102108
@Before
@@ -144,8 +150,10 @@ protected void shouldSkipTest(String testName) throws IOException {
144150

145151
protected final void doTest() throws Throwable {
146152
RequestObjectBuilder builder = new RequestObjectBuilder(randomFrom(XContentType.values()));
153+
EsqlVersion version = randomFrom(versions);
154+
String versionString = randomBoolean() ? version.toString() : version.versionStringWithoutEmoji();
147155
Map<String, Object> answer = runEsql(
148-
builder.query(testCase.query),
156+
builder.query(testCase.query).version(versionString),
149157
testCase.expectedWarnings(false),
150158
testCase.expectedWarningsRegex()
151159
);

x-pack/plugin/esql/qa/server/src/main/java/org/elasticsearch/xpack/esql/qa/rest/RestEsqlTestCase.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,11 @@ public RequestObjectBuilder query(String query) throws IOException {
132132
return this;
133133
}
134134

135+
public RequestObjectBuilder version(String version) throws IOException {
136+
builder.field("version", version);
137+
return this;
138+
}
139+
135140
public RequestObjectBuilder columnar(boolean columnar) throws IOException {
136141
builder.field("columnar", columnar);
137142
return this;

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/version/EsqlVersion.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public enum EsqlVersion implements VersionId<EsqlVersion> {
2323
ROCKET(2024, 4, "🚀");
2424

2525
static final Map<String, EsqlVersion> VERSION_MAP_WITH_AND_WITHOUT_EMOJI = versionMapWithAndWithoutEmoji();
26+
private static final EsqlVersion[] RELEASED_ASCENDING = createReleasedAscending();
2627

2728
private static Map<String, EsqlVersion> versionMapWithAndWithoutEmoji() {
2829
Map<String, EsqlVersion> stringToVersion = new LinkedHashMap<>(EsqlVersion.values().length * 2);
@@ -35,6 +36,13 @@ private static Map<String, EsqlVersion> versionMapWithAndWithoutEmoji() {
3536
return stringToVersion;
3637
}
3738

39+
private static EsqlVersion[] createReleasedAscending() {
40+
return Arrays.stream(EsqlVersion.values())
41+
.filter(v -> v != SNAPSHOT)
42+
.sorted(Comparator.comparingInt(EsqlVersion::id))
43+
.toArray(EsqlVersion[]::new);
44+
}
45+
3846
private static void putVersionCheckNoDups(Map<String, EsqlVersion> stringToVersion, String versionString, EsqlVersion version) {
3947
EsqlVersion existingVersionForKey = stringToVersion.put(versionString, version);
4048
if (existingVersionForKey != null) {
@@ -50,8 +58,15 @@ public static EsqlVersion parse(String versionString) {
5058
return VERSION_MAP_WITH_AND_WITHOUT_EMOJI.get(versionString);
5159
}
5260

61+
/**
62+
* Return the released versions in ascending order.
63+
*/
64+
public static EsqlVersion[] releasedAscending() {
65+
return RELEASED_ASCENDING;
66+
}
67+
5368
public static EsqlVersion latestReleased() {
54-
return Arrays.stream(EsqlVersion.values()).filter(v -> v != SNAPSHOT).max(Comparator.comparingInt(EsqlVersion::id)).get();
69+
return RELEASED_ASCENDING[RELEASED_ASCENDING.length - 1];
5570
}
5671

5772
private int year;

0 commit comments

Comments
 (0)