Explicitly test rewrite of date histogram's time zones on date_nanos (#54402)

This commit adds an explicit test of time zone rewrite on date nanos
field. Today this is working but we need tests to ensure that we don't
break it unintentionally.
This commit is contained in:
Jim Ferenczi 2020-04-10 12:30:38 +02:00 committed by jimczi
parent da976d247f
commit d14ed34577
1 changed files with 70 additions and 57 deletions

View File

@ -29,6 +29,7 @@ import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.store.Directory;
import org.elasticsearch.common.time.DateFormatter;
import org.elasticsearch.common.time.DateFormatters;
import org.elasticsearch.common.time.DateUtils;
import org.elasticsearch.index.query.QueryShardContext;
import org.elasticsearch.search.aggregations.BaseAggregationTestCase;
import org.elasticsearch.search.aggregations.BucketOrder;
@ -130,26 +131,38 @@ public class DateHistogramTests extends BaseAggregationTestCase<DateHistogramAgg
private static Document documentForDate(String field, long millis) {
Document doc = new Document();
doc.add(new LongPoint(field, millis));
doc.add(new SortedNumericDocValuesField(field, millis));
final long value;
switch (field) {
case DATE_FIELD_NAME:
value = millis;
break;
case DATE_NANOS_FIELD_NAME:
value = DateUtils.toNanoSeconds(millis);
break;
default:
throw new AssertionError();
}
doc.add(new LongPoint(field, value));
doc.add(new SortedNumericDocValuesField(field, value));
return doc;
}
public void testRewriteTimeZone() throws IOException {
DateFormatter format = DateFormatter.forPattern("strict_date_optional_time");
for (String fieldName : new String[]{DATE_FIELD_NAME, DATE_NANOS_FIELD_NAME}) {
try (Directory dir = newDirectory();
IndexWriter w = new IndexWriter(dir, newIndexWriterConfig())) {
long millis1 = DateFormatters.from(format.parse("2018-03-11T11:55:00")).toInstant().toEpochMilli();
w.addDocument(documentForDate(DATE_FIELD_NAME, millis1));
w.addDocument(documentForDate(fieldName, millis1));
long millis2 = DateFormatters.from(format.parse("2017-10-30T18:13:00")).toInstant().toEpochMilli();
w.addDocument(documentForDate(DATE_FIELD_NAME, millis2));
w.addDocument(documentForDate(fieldName, millis2));
try (IndexReader readerThatDoesntCross = DirectoryReader.open(w)) {
long millis3 = DateFormatters.from(format.parse("2018-03-25T02:44:00")).toInstant().toEpochMilli();
w.addDocument(documentForDate(DATE_FIELD_NAME, millis3));
w.addDocument(documentForDate(fieldName, millis3));
try (IndexReader readerThatCrosses = DirectoryReader.open(w)) {
@ -157,7 +170,7 @@ public class DateHistogramTests extends BaseAggregationTestCase<DateHistogramAgg
QueryShardContext shardContextThatCrosses = createShardContext(new IndexSearcher(readerThatCrosses));
DateHistogramAggregationBuilder builder = new DateHistogramAggregationBuilder("my_date_histo");
builder.field(DATE_FIELD_NAME);
builder.field(fieldName);
builder.calendarInterval(DateHistogramInterval.DAY);
// no timeZone => no rewrite
@ -194,7 +207,7 @@ public class DateHistogramTests extends BaseAggregationTestCase<DateHistogramAgg
assertSame(tz, builder.rewriteTimeZone(shardContextThatCrosses));
builder = new DateHistogramAggregationBuilder("my_date_histo");
builder.field(DATE_FIELD_NAME);
builder.field(fieldName);
builder.timeZone(tz);
builder.fixedInterval(new DateHistogramInterval(1000L * 60 * 60 * 24 + "ms")); // ~ 1 day
@ -210,5 +223,5 @@ public class DateHistogramTests extends BaseAggregationTestCase<DateHistogramAgg
}
}
}
}
}