You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2017/12/22 12:28:19 UTC
[incubator-servicecomb-java-chassis] 02/09: [JAV-589] fix unit test
failure caused by default timezone and locale setting variety.
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 <ya...@huawei.com>
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
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.