This is an automated email from the ASF dual-hosted git repository. ningjiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit 0e4d4b17e169e2a99ee3b08abaa054e7b89ce24a Author: yaohaishi <[email protected]> AuthorDate: Sat Dec 16 09:49:43 2017 +0800 [JAV-589] fix unit test failure caused by default timezone and locale setting variety. --- .../element/impl/DatetimeConfigurableElement.java | 26 +++++++++++---- .../matcher/impl/DatetimeConfigurableMatcher.java | 2 +- .../impl/DatetimeConfigurableElementTest.java | 37 ++++++++++++++-------- .../element/impl/RequestHeaderElementTest.java | 1 + .../element/impl/ResponseHeaderElementTest.java | 5 +-- .../element/impl/VersionOrProtocolElementTest.java | 9 +++++- 6 files changed, 56 insertions(+), 24 deletions(-) diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/DatetimeConfigurableElement.java b/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/DatetimeConfigurableElement.java index f30e61a..8b85952 100644 --- a/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/DatetimeConfigurableElement.java +++ b/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/DatetimeConfigurableElement.java @@ -10,7 +10,15 @@ import org.springframework.util.StringUtils; import io.servicecomb.transport.rest.vertx.accesslog.AccessLogParam; import io.servicecomb.transport.rest.vertx.accesslog.element.AccessLogElement; +/** + * Configurable datetime element. + */ public class DatetimeConfigurableElement implements AccessLogElement { + + public static final String DEFAULT_DATETIME_PATTERN = "EEE, dd MMM yyyy HH:mm:ss zzz"; + + public static final Locale DEFAULT_LOCALE = Locale.US; + private String pattern; private TimeZone timezone; @@ -19,10 +27,17 @@ public class DatetimeConfigurableElement implements AccessLogElement { private final ThreadLocal<SimpleDateFormat> datetimeFormatHolder = new ThreadLocal<>(); + /** + * all config is set to default value. + */ public DatetimeConfigurableElement() { - this("||"); + this(DEFAULT_DATETIME_PATTERN); } + /** + * the configurations not specified will get a default value. + * @param config the format of config is "PATTERN|TIMEZONE|LOCALE" or "PATTERN". It depends on whether the config contains the separator "|" + */ public DatetimeConfigurableElement(String config) { String[] configArr = null; if (config.contains("|")) { @@ -40,21 +55,20 @@ public class DatetimeConfigurableElement implements AccessLogElement { setConfigruations(configArr); } - protected String[] splitConfig(String config) { + private String[] splitConfig(String config) { return config.split("\\|{1}?", -1); } private void setConfigruations(String[] configArr) { - this.pattern = StringUtils.isEmpty(configArr[0]) ? "EEE, dd MMM yyyy HH:mm:ss zzz" : configArr[0]; + this.pattern = StringUtils.isEmpty(configArr[0]) ? DEFAULT_DATETIME_PATTERN : configArr[0]; this.timezone = StringUtils.isEmpty(configArr[1]) ? TimeZone.getDefault() : TimeZone.getTimeZone(configArr[1]); - this.locale = StringUtils.isEmpty(configArr[2]) ? Locale.US : Locale.forLanguageTag(configArr[2]); + this.locale = StringUtils.isEmpty(configArr[2]) ? DEFAULT_LOCALE : Locale.forLanguageTag(configArr[2]); } @Override public String getFormattedElement(AccessLogParam accessLogParam) { SimpleDateFormat dateFormat = getDatetimeFormat(); - String datetime = dateFormat.format(new Date(accessLogParam.getStartMillisecond())); - return datetime; + return dateFormat.format(new Date(accessLogParam.getStartMillisecond())); } private SimpleDateFormat getDatetimeFormat() { diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/parser/matcher/impl/DatetimeConfigurableMatcher.java b/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/parser/matcher/impl/DatetimeConfigurableMatcher.java index d0ab988..8279643 100644 --- a/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/parser/matcher/impl/DatetimeConfigurableMatcher.java +++ b/transports/transport-rest/transport-rest-vertx/src/main/java/io/servicecomb/transport/rest/vertx/accesslog/parser/matcher/impl/DatetimeConfigurableMatcher.java @@ -4,7 +4,7 @@ import io.servicecomb.transport.rest.vertx.accesslog.element.AccessLogElement; import io.servicecomb.transport.rest.vertx.accesslog.element.impl.DatetimeConfigurableElement; /** - * There are two kinds of configurable datetime placeholder: + * Compatible with two kinds of configurable datetime placeholder: * <ul> * <li>%{PATTERN}t</li> * <li>%{PATTERN|TIMEZONE|LOCALE}t</li> diff --git a/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/DatetimeConfigurableElementTest.java b/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/DatetimeConfigurableElementTest.java index 63711f1..abb1e66 100644 --- a/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/DatetimeConfigurableElementTest.java +++ b/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/DatetimeConfigurableElementTest.java @@ -2,6 +2,7 @@ package io.servicecomb.transport.rest.vertx.accesslog.element.impl; import static org.junit.Assert.assertEquals; +import java.text.SimpleDateFormat; import java.util.Locale; import java.util.TimeZone; @@ -11,12 +12,14 @@ import io.servicecomb.transport.rest.vertx.accesslog.AccessLogParam; public class DatetimeConfigurableElementTest { + private static final long START_MILLISECOND = 1416863450581L; + @Test public void getFormattedElement() { DatetimeConfigurableElement element = new DatetimeConfigurableElement( "EEE, yyyy MMM dd HH:mm:ss zzz|GMT-08|zh-CN"); - AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(1416863450581L); + AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(START_MILLISECOND); String result = element.getFormattedElement(accessLogParam); @@ -28,7 +31,7 @@ public class DatetimeConfigurableElementTest { DatetimeConfigurableElement element = new DatetimeConfigurableElement( "|GMT+08|zh-CN"); - AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(1416863450581L); + AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(START_MILLISECOND); String result = element.getFormattedElement(accessLogParam); @@ -39,12 +42,14 @@ public class DatetimeConfigurableElementTest { public void getFormattedElementOnNoTimezone() { DatetimeConfigurableElement element = new DatetimeConfigurableElement( "yyyy/MM/dd zzz||zh-CN"); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd zzz", Locale.forLanguageTag("zh-CN")); + simpleDateFormat.setTimeZone(TimeZone.getDefault()); - AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(1416863450581L); + AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(START_MILLISECOND); String result = element.getFormattedElement(accessLogParam); - assertEquals("2014/11/25 CST", result); + assertEquals(simpleDateFormat.format(START_MILLISECOND), result); } @Test @@ -52,7 +57,7 @@ public class DatetimeConfigurableElementTest { DatetimeConfigurableElement element = new DatetimeConfigurableElement( "EEE, dd MMM yyyy HH:mm:ss zzz|GMT+08|"); - AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(1416863450581L); + AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(START_MILLISECOND); String result = element.getFormattedElement(accessLogParam); @@ -63,39 +68,43 @@ public class DatetimeConfigurableElementTest { public void getFormattedElementOnNoConfig() { DatetimeConfigurableElement element = new DatetimeConfigurableElement( "||"); - - AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(1416863450581L); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DatetimeConfigurableElement.DEFAULT_DATETIME_PATTERN, + Locale.US); + simpleDateFormat.setTimeZone(TimeZone.getDefault()); + AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(START_MILLISECOND); String result = element.getFormattedElement(accessLogParam); - assertEquals("Tue, 25 Nov 2014 05:10:50 CST", result); + assertEquals(simpleDateFormat.format(START_MILLISECOND), result); } @Test public void testConstructorWithNoArg() { DatetimeConfigurableElement element = new DatetimeConfigurableElement(); - - AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(1416863450581L); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US); + simpleDateFormat.setTimeZone(TimeZone.getDefault()); + AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(START_MILLISECOND); String result = element.getFormattedElement(accessLogParam); assertEquals("EEE, dd MMM yyyy HH:mm:ss zzz", element.getPattern()); assertEquals(Locale.US, element.getLocale()); assertEquals(TimeZone.getDefault(), element.getTimezone()); - assertEquals("Tue, 25 Nov 2014 05:10:50 CST", result); + assertEquals(simpleDateFormat.format(START_MILLISECOND), result); } @Test public void testConstructorWithNoSeparator() { DatetimeConfigurableElement element = new DatetimeConfigurableElement("yyyy/MM/dd HH:mm:ss zzz"); - - AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(1416863450581L); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss zzz", Locale.US); + simpleDateFormat.setTimeZone(TimeZone.getDefault()); + AccessLogParam accessLogParam = new AccessLogParam().setStartMillisecond(START_MILLISECOND); String result = element.getFormattedElement(accessLogParam); assertEquals("yyyy/MM/dd HH:mm:ss zzz", element.getPattern()); assertEquals(Locale.US, element.getLocale()); assertEquals(TimeZone.getDefault(), element.getTimezone()); - assertEquals("2014/11/25 05:10:50 CST", result); + assertEquals(simpleDateFormat.format(START_MILLISECOND), result); } } \ No newline at end of file diff --git a/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/RequestHeaderElementTest.java b/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/RequestHeaderElementTest.java index d87c731..90300ac 100644 --- a/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/RequestHeaderElementTest.java +++ b/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/RequestHeaderElementTest.java @@ -31,6 +31,7 @@ public class RequestHeaderElementTest { String result = ELEMENT.getFormattedElement(param); assertEquals(testValue, result); + assertEquals(ELEMENT.getIdentifier(), HEADER_IDENTIFIER); } @Test diff --git a/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/ResponseHeaderElementTest.java b/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/ResponseHeaderElementTest.java index 8f71a76..a58ce58 100644 --- a/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/ResponseHeaderElementTest.java +++ b/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/ResponseHeaderElementTest.java @@ -1,6 +1,6 @@ package io.servicecomb.transport.rest.vertx.accesslog.element.impl; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; import org.junit.Test; import org.mockito.Mockito; @@ -12,7 +12,7 @@ import io.vertx.ext.web.RoutingContext; public class ResponseHeaderElementTest { - public static final String IDENTIFIER = "identifier"; + private static final String IDENTIFIER = "identifier"; private static final ResponseHeaderElement ELEMENT = new ResponseHeaderElement(IDENTIFIER); @@ -33,6 +33,7 @@ public class ResponseHeaderElementTest { String result = ELEMENT.getFormattedElement(param); assertEquals(headerValue, result); + assertEquals(ELEMENT.getIdentifier(), IDENTIFIER); } @Test diff --git a/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/VersionOrProtocolElementTest.java b/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/VersionOrProtocolElementTest.java index c95130d..93f48df 100644 --- a/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/VersionOrProtocolElementTest.java +++ b/transports/transport-rest/transport-rest-vertx/src/test/java/io/servicecomb/transport/rest/vertx/accesslog/element/impl/VersionOrProtocolElementTest.java @@ -23,8 +23,15 @@ public class VersionOrProtocolElementTest { Mockito.when(request.version()).thenReturn(HttpVersion.HTTP_1_1); String result = new VersionOrProtocolElement().getFormattedElement(param); - assertEquals("HTTP/1.1", result); + + Mockito.when(request.version()).thenReturn(HttpVersion.HTTP_1_0); + result = new VersionOrProtocolElement().getFormattedElement(param); + assertEquals("HTTP/1.0", result); + + Mockito.when(request.version()).thenReturn(HttpVersion.HTTP_2); + result = new VersionOrProtocolElement().getFormattedElement(param); + assertEquals("HTTP/2.0", result); } @Test -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
