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:
parent
da976d247f
commit
d14ed34577
|
@ -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
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue