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>.