Skip to content

Commit

Permalink
Fix HistoryIntegrationTests timestamp comparsion (elastic#38505)
Browse files Browse the repository at this point in the history
When the millisecond part of a timestamp is 0 the toString
representation in java-time is omitting the millisecond part (joda was
not). The Search response is returning timestamps formatted with
WatcherDateTimeUtils, therefore comparisons of strings should be done
with the same formatter

relates elastic#27330
  • Loading branch information
pgomulka committed Feb 8, 2019
1 parent 1008f1c commit 427a0c6
Showing 1 changed file with 15 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,15 @@
import org.elasticsearch.xpack.core.watcher.actions.ActionStatus;
import org.elasticsearch.xpack.core.watcher.client.WatchSourceBuilder;
import org.elasticsearch.xpack.core.watcher.input.Input;
import org.elasticsearch.xpack.core.watcher.support.WatcherDateTimeUtils;
import org.elasticsearch.xpack.core.watcher.support.xcontent.XContentSource;
import org.elasticsearch.xpack.core.watcher.watch.WatchStatus;
import org.elasticsearch.xpack.watcher.support.search.WatcherSearchTemplateRequest;
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;
import org.elasticsearch.xpack.watcher.trigger.schedule.IntervalSchedule;
import org.hamcrest.Matcher;

import java.time.ZonedDateTime;
import java.util.Locale;

import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
Expand Down Expand Up @@ -172,10 +175,10 @@ public void testThatHistoryContainsStatus() throws Exception {
assertThat(active, is(status.state().isActive()));

String timestamp = source.getValue("status.state.timestamp");
assertThat(timestamp, is(status.state().getTimestamp().toString()));
assertThat(timestamp, isSameDate(status.state().getTimestamp()));

String lastChecked = source.getValue("status.last_checked");
assertThat(lastChecked, is(status.lastChecked().toString()));
assertThat(lastChecked, isSameDate(status.lastChecked()));

Integer version = source.getValue("status.version");
int expectedVersion = (int) (status.version() - 1);
Expand All @@ -196,4 +199,14 @@ public void testThatHistoryContainsStatus() throws Exception {
assertThat(mappingSource.getValue("doc.properties.status.properties.status"), is(nullValue()));
assertThat(mappingSource.getValue("doc.properties.status.properties.status.properties.active"), is(nullValue()));
}


private Matcher<String> isSameDate(ZonedDateTime zonedDateTime) {
/*
When comparing timestamps returned from _search/.watcher-history* the same format of date has to be used
during serialisation to json on index time.
The toString of ZonedDateTime is omitting the millisecond part when is 0. This was not the case in joda.
*/
return is(WatcherDateTimeUtils.formatDate(zonedDateTime));
}
}

0 comments on commit 427a0c6

Please sign in to comment.