diff --git a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/grouping/BucketSerializationTests.java b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/grouping/BucketSerializationTests.java index 3b38c31e760be..5fe270a4cce42 100644 --- a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/grouping/BucketSerializationTests.java +++ b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/expression/function/grouping/BucketSerializationTests.java @@ -16,6 +16,10 @@ public class BucketSerializationTests extends AbstractExpressionSerializationTests { @Override protected Bucket createTestInstance() { + return createRandomBucket(); + } + + public static Bucket createRandomBucket() { Source source = randomSource(); Expression field = randomChild(); Expression buckets = randomChild(); diff --git a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/AggregateSerializationTests.java b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/AggregateSerializationTests.java index 440b63050c418..c50c998674704 100644 --- a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/AggregateSerializationTests.java +++ b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/AggregateSerializationTests.java @@ -32,11 +32,7 @@ protected Aggregate createTestInstance() { LogicalPlan child = randomChild(0); List groupings = randomFieldAttributes(0, 5, false).stream().map(a -> (Expression) a).toList(); List aggregates = randomAggregates(); - if (randomBoolean()) { - return new Aggregate(source, child, groupings, aggregates); - } else { - return new TimeSeriesAggregate(source, child, groupings, aggregates, null); - } + return new Aggregate(source, child, groupings, aggregates); } public static List randomAggregates() { @@ -75,11 +71,7 @@ protected Aggregate mutateInstance(Aggregate instance) throws IOException { ); case 2 -> aggregates = randomValueOtherThan(aggregates, AggregateSerializationTests::randomAggregates); } - if (instance instanceof TimeSeriesAggregate) { - return new TimeSeriesAggregate(instance.source(), child, groupings, aggregates, null); - } else { - return new Aggregate(instance.source(), child, groupings, aggregates); - } + return new Aggregate(instance.source(), child, groupings, aggregates); } @Override diff --git a/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/TimeSeriesAggregateSerializationTests.java b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/TimeSeriesAggregateSerializationTests.java new file mode 100644 index 0000000000000..4d04bc557afba --- /dev/null +++ b/x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/plan/logical/TimeSeriesAggregateSerializationTests.java @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +package org.elasticsearch.xpack.esql.plan.logical; + +import org.elasticsearch.xpack.esql.core.expression.Expression; +import org.elasticsearch.xpack.esql.core.expression.NamedExpression; +import org.elasticsearch.xpack.esql.core.tree.Source; +import org.elasticsearch.xpack.esql.expression.function.grouping.Bucket; +import org.elasticsearch.xpack.esql.expression.function.grouping.BucketSerializationTests; + +import java.io.IOException; +import java.util.List; + +public class TimeSeriesAggregateSerializationTests extends AbstractLogicalPlanSerializationTests { + @Override + protected TimeSeriesAggregate createTestInstance() { + Source source = randomSource(); + LogicalPlan child = randomChild(0); + List groupings = randomFieldAttributes(0, 5, false).stream().map(a -> (Expression) a).toList(); + List aggregates = AggregateSerializationTests.randomAggregates(); + Bucket timeBucket = BucketSerializationTests.createRandomBucket(); + return new TimeSeriesAggregate(source, child, groupings, aggregates, timeBucket); + } + + @Override + protected TimeSeriesAggregate mutateInstance(TimeSeriesAggregate instance) throws IOException { + LogicalPlan child = instance.child(); + List groupings = instance.groupings(); + List aggregates = instance.aggregates(); + Bucket timeBucket = instance.timeBucket(); + switch (between(0, 3)) { + case 0 -> child = randomValueOtherThan(child, () -> randomChild(0)); + case 1 -> groupings = randomValueOtherThan( + groupings, + () -> randomFieldAttributes(0, 5, false).stream().map(a -> (Expression) a).toList() + ); + case 2 -> aggregates = randomValueOtherThan(aggregates, AggregateSerializationTests::randomAggregates); + case 3 -> timeBucket = randomValueOtherThan(timeBucket, BucketSerializationTests::createRandomBucket); + } + return new TimeSeriesAggregate(instance.source(), child, groupings, aggregates, timeBucket); + } + + @Override + protected boolean alwaysEmptySource() { + return true; + } +}