From 6b51007577170c81989e0084a82ad8c88d0b4d6b Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Lievremont Date: Mon, 16 Mar 2015 12:18:17 +0100 Subject: [PATCH] Fix an issue with TimeZone ID of UTC Conflicts: server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java --- .../sonar/server/issue/index/IssueIndex.java | 6 +- .../server/issue/index/IssueIndexTest.java | 88 ++++++++++--------- .../java/org/sonar/api/utils/System2.java | 9 ++ 3 files changed, 59 insertions(+), 44 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java index 927cd512148..ea847c6e095 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java @@ -64,7 +64,6 @@ import org.sonar.server.view.index.ViewIndexDefinition; import javax.annotation.CheckForNull; import javax.annotation.Nullable; -import java.text.SimpleDateFormat; import java.util.*; import static com.google.common.collect.Lists.newArrayList; @@ -408,9 +407,8 @@ public class IssueIndex extends BaseIndex { private AggregationBuilder getCreatedAtFacet(IssueQuery query, Map filters, QueryBuilder esQuery) { Date now = system.newDate(); - SimpleDateFormat tzFormat = new SimpleDateFormat("XX"); - tzFormat.setTimeZone(TimeZone.getDefault()); - String timeZoneString = tzFormat.format(now); + + String timeZoneString = system.getDefaultTimeZone().getID(); DateHistogram.Interval bucketSize = DateHistogram.Interval.YEAR; Date createdAfter = query.createdAfter(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java index c5cef69a22e..417e8da9148 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java @@ -53,7 +53,11 @@ import javax.annotation.Nullable; import java.util.*; import static com.google.common.collect.Lists.newArrayList; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.entry; +import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class IssueIndexTest { @@ -72,7 +76,12 @@ public class IssueIndexTest { issueIndexer = new IssueIndexer(null, tester.client()); issueAuthorizationIndexer = new IssueAuthorizationIndexer(null, tester.client()); viewIndexer = new ViewIndexer(null, tester.client()); - index = new IssueIndex(tester.client(), System2.INSTANCE); + System2 system = mock(System2.class); + when(system.getDefaultTimeZone()).thenReturn(TimeZone.getTimeZone("+01:00")); + when(system.newDate()).thenReturn(new Date()); + + index = new IssueIndex(tester.client(), system); + } @Test @@ -730,14 +739,14 @@ public class IssueIndexTest { SearchResult result = index.search(query, options); Map buckets = result.getFacets().get("createdAt"); assertThat(buckets).containsOnly( - entry("2014-08-31T01:00:00+0000", 0L), - entry("2014-09-01T01:00:00+0000", 2L), - entry("2014-09-02T01:00:00+0000", 1L), - entry("2014-09-03T01:00:00+0000", 0L), - entry("2014-09-04T01:00:00+0000", 0L), - entry("2014-09-05T01:00:00+0000", 1L), - entry("2014-09-06T01:00:00+0000", 0L), - entry("2014-09-07T01:00:00+0000", 0L)); + entry("2014-08-31T00:00:00+0000", 0L), + entry("2014-09-01T00:00:00+0000", 2L), + entry("2014-09-02T00:00:00+0000", 1L), + entry("2014-09-03T00:00:00+0000", 0L), + entry("2014-09-04T00:00:00+0000", 0L), + entry("2014-09-05T00:00:00+0000", 1L), + entry("2014-09-06T00:00:00+0000", 0L), + entry("2014-09-07T00:00:00+0000", 0L)); } @Test @@ -748,10 +757,10 @@ public class IssueIndexTest { Map createdAt = index.search(IssueQuery.builder().createdAfter(DateUtils.parseDate("2014-09-01")).createdBefore(DateUtils.parseDate("2014-09-21")).build(), SearchOptions).getFacets().get("createdAt"); assertThat(createdAt).containsOnly( - entry("2014-08-25T01:00:00+0000", 0L), - entry("2014-09-01T01:00:00+0000", 4L), - entry("2014-09-08T01:00:00+0000", 0L), - entry("2014-09-15T01:00:00+0000", 1L)); + entry("2014-08-25T00:00:00+0000", 0L), + entry("2014-09-01T00:00:00+0000", 4L), + entry("2014-09-08T00:00:00+0000", 0L), + entry("2014-09-15T00:00:00+0000", 1L)); } @Test @@ -762,12 +771,12 @@ public class IssueIndexTest { Map createdAt = index.search(IssueQuery.builder().createdAfter(DateUtils.parseDate("2014-09-01")).createdBefore(DateUtils.parseDate("2015-01-19")).build(), SearchOptions).getFacets().get("createdAt"); assertThat(createdAt).containsOnly( - entry("2014-08-01T01:00:00+0000", 0L), - entry("2014-09-01T01:00:00+0000", 5L), - entry("2014-10-01T01:00:00+0000", 0L), - entry("2014-11-01T01:00:00+0000", 0L), - entry("2014-12-01T01:00:00+0000", 0L), - entry("2015-01-01T01:00:00+0000", 1L)); + entry("2014-08-01T00:00:00+0000", 0L), + entry("2014-09-01T00:00:00+0000", 5L), + entry("2014-10-01T00:00:00+0000", 0L), + entry("2014-11-01T00:00:00+0000", 0L), + entry("2014-12-01T00:00:00+0000", 0L), + entry("2015-01-01T00:00:00+0000", 1L)); } @Test @@ -777,12 +786,12 @@ public class IssueIndexTest { Map createdAt = index.search(IssueQuery.builder().createdAfter(DateUtils.parseDate("2011-01-01")).createdBefore(DateUtils.parseDate("2016-01-01")).build(), SearchOptions).getFacets().get("createdAt"); assertThat(createdAt).containsOnly( - entry("2011-01-01T01:00:00+0000", 1L), - entry("2012-01-01T01:00:00+0000", 0L), - entry("2013-01-01T01:00:00+0000", 0L), - entry("2014-01-01T01:00:00+0000", 5L), - entry("2015-01-01T01:00:00+0000", 1L), - entry("2016-01-01T01:00:00+0000", 0L)); + entry("2010-01-01T00:00:00+0000", 0L), + entry("2011-01-01T00:00:00+0000", 1L), + entry("2012-01-01T00:00:00+0000", 0L), + entry("2013-01-01T00:00:00+0000", 0L), + entry("2014-01-01T00:00:00+0000", 5L), + entry("2015-01-01T00:00:00+0000", 1L)); } @@ -795,14 +804,14 @@ public class IssueIndexTest { .createdBefore(DateUtils.parseDate("2016-01-01")) .build(), options).getFacets().get("createdAt"); assertThat(createdAt).containsOnly( - entry("2009-01-01T01:00:00+0000", 0L), - entry("2010-01-01T01:00:00+0000", 0L), - entry("2011-01-01T01:00:00+0000", 1L), - entry("2012-01-01T01:00:00+0000", 0L), - entry("2013-01-01T01:00:00+0000", 0L), - entry("2014-01-01T01:00:00+0000", 5L), - entry("2015-01-01T01:00:00+0000", 1L), - entry("2016-01-01T01:00:00+0000", 0L)); + entry("2008-01-01T00:00:00+0000", 0L), + entry("2009-01-01T00:00:00+0000", 0L), + entry("2010-01-01T00:00:00+0000", 0L), + entry("2011-01-01T00:00:00+0000", 1L), + entry("2012-01-01T00:00:00+0000", 0L), + entry("2013-01-01T00:00:00+0000", 0L), + entry("2014-01-01T00:00:00+0000", 5L), + entry("2015-01-01T00:00:00+0000", 1L)); } @Test @@ -812,12 +821,11 @@ public class IssueIndexTest { Map createdAt = index.search(IssueQuery.builder().createdBefore(DateUtils.parseDate("2016-01-01")).build(), SearchOptions).getFacets().get("createdAt"); assertThat(createdAt).containsOnly( - entry("2011-01-01T01:00:00+0000", 1L), - entry("2012-01-01T01:00:00+0000", 0L), - entry("2013-01-01T01:00:00+0000", 0L), - entry("2014-01-01T01:00:00+0000", 5L), - entry("2015-01-01T01:00:00+0000", 1L), - entry("2016-01-01T01:00:00+0000", 0L)); + entry("2011-01-01T00:00:00+0000", 1L), + entry("2012-01-01T00:00:00+0000", 0L), + entry("2013-01-01T00:00:00+0000", 0L), + entry("2014-01-01T00:00:00+0000", 5L), + entry("2015-01-01T00:00:00+0000", 1L)); } @Test diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/utils/System2.java b/sonar-plugin-api/src/main/java/org/sonar/api/utils/System2.java index 964df41ed0d..27c5cc3e206 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/utils/System2.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/utils/System2.java @@ -28,6 +28,7 @@ import javax.annotation.CheckForNull; import java.util.Date; import java.util.Map; import java.util.Properties; +import java.util.TimeZone; /** * Proxy over {@link java.lang.System}. It aims to improve testability of classes @@ -126,6 +127,14 @@ public class System2 implements BatchComponent, ServerComponent { return new Date(); } + /** + * @since 5.1 + * @return the JVM's default time zone + */ + public TimeZone getDefaultTimeZone() { + return TimeZone.getDefault(); + } + /** * Closes the object and throws an {@link java.lang.IllegalStateException} on error. * @since 5.1 -- 2.39.5