You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampark.apache.org by ca...@apache.org on 2024/02/19 14:48:32 UTC

(incubator-streampark) branch dev updated: issues-3063 improve DateUtils test code coverage (#3552)

This is an automated email from the ASF dual-hosted git repository.

cancai pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git


The following commit(s) were added to refs/heads/dev by this push:
     new 09b716afb issues-3063 improve DateUtils test code coverage (#3552)
09b716afb is described below

commit 09b716afb6138842ce60fe497da83b37abef1ff1
Author: zhengke zhou <36...@users.noreply.github.com>
AuthorDate: Mon Feb 19 22:48:27 2024 +0800

    issues-3063 improve DateUtils test code coverage (#3552)
---
 .../streampark/common/util/DateUtilsTest.scala     | 161 +++++++++++++++++++++
 1 file changed, 161 insertions(+)

diff --git a/streampark-common/src/test/scala/org/apache/streampark/common/util/DateUtilsTest.scala b/streampark-common/src/test/scala/org/apache/streampark/common/util/DateUtilsTest.scala
new file mode 100644
index 000000000..a6dcaa4bd
--- /dev/null
+++ b/streampark-common/src/test/scala/org/apache/streampark/common/util/DateUtilsTest.scala
@@ -0,0 +1,161 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.streampark.common.util
+
+import org.scalatest.funsuite.AnyFunSuite
+
+import java.text.SimpleDateFormat
+import java.util.Date
+import java.util.TimeZone
+import java.util.concurrent.TimeUnit
+
+class DateUtilsTest extends AnyFunSuite {
+  val dateTestCase = "2000-01-01 00:00:01"
+  val timeStampTestCase: Long = 946656001000L
+
+  test("stringToDate should parse string to date correctly") {
+    val sdf = new SimpleDateFormat(DateUtils.fullFormat)
+    val date = sdf.parse(dateTestCase)
+    assert(date.getTime == DateUtils.stringToDate(dateTestCase).getTime)
+  }
+
+  test("milliSecond2Date should convert milliseconds to date correctly") {
+    val sdf = new SimpleDateFormat(DateUtils.fullFormat)
+    sdf.setTimeZone(TimeZone.getTimeZone("GMT+8:00"))
+    val date = sdf.parse(dateTestCase)
+    assert(date.getTime == DateUtils.milliSecond2Date(timeStampTestCase).getTime)
+  }
+
+  test("second2Date should convert seconds to date correctly") {
+    val resultDate = DateUtils.second2Date(timeStampTestCase / 1000)
+    val date = DateUtils.parse(dateTestCase, DateUtils.fullFormat, TimeZone.getTimeZone("GMT+8:00"))
+    assert(date.getTime == resultDate.getTime)
+  }
+
+  test("now should return current date in yyyy-MM-dd format") {
+    val sdf = new SimpleDateFormat(DateUtils.format_yyyyMMdd)
+    sdf.setTimeZone(TimeZone.getDefault)
+    val today = sdf.format(new Date())
+    assert(today == DateUtils.now())
+  }
+
+  test("minuteOfDay should return correct minute of day") {
+    val sdf = new SimpleDateFormat(DateUtils.fullFormat)
+    var date = sdf.parse(dateTestCase)
+    var minute = DateUtils.minuteOfDay(date)
+    assert(minute == 0)
+
+    date = sdf.parse("2000-01-01 00:01:01")
+    minute = DateUtils.minuteOfDay(date)
+    assert(minute == 1)
+
+    date = sdf.parse("2000-01-01 01:01:01")
+    minute = DateUtils.minuteOfDay(date)
+    assert(minute == 61)
+  }
+
+  test("secondOfDay should return correct second of day") {
+    val sdf = new SimpleDateFormat(DateUtils.fullFormat)
+    var date = sdf.parse(dateTestCase)
+    var second = DateUtils.secondOfDay(date)
+    assert(second == 1)
+
+    date = sdf.parse("2000-01-01 00:01:01")
+    second = DateUtils.secondOfDay(date)
+    assert(second == 61)
+
+    date = sdf.parse("2000-01-01 01:01:01")
+    second = DateUtils.secondOfDay(date)
+    assert(second == 3661)
+  }
+
+  test("minuteOf should return correct minute of the given date") {
+    val sdf = new SimpleDateFormat(DateUtils.fullFormat)
+    // Avoid time zone issues
+    sdf.setTimeZone(TimeZone.getTimeZone("GMT+8:00"))
+    val date = sdf.parse(dateTestCase)
+    val minute = DateUtils.minuteOf(date)
+    val timestampMinute = timeStampTestCase / 1000 / 60
+    assert(timestampMinute == minute)
+  }
+
+  test("secondOf should return correct second of the given date") {
+    val sdf = new SimpleDateFormat(DateUtils.fullFormat)
+    // Avoid time zone issues
+    sdf.setTimeZone(TimeZone.getTimeZone("GMT+8:00"))
+    val date = sdf.parse(dateTestCase)
+    val second = DateUtils.secondOf(date)
+    val timestampSecond = timeStampTestCase / 1000
+    assert(timestampSecond == second)
+  }
+
+  test("addAndSubtract should return the date after adding or subtracting specified days") {
+    val sdf = new SimpleDateFormat(DateUtils.fullFormat)
+    // Avoid time zone issues
+    sdf.setTimeZone(TimeZone.getTimeZone("GMT+8:00"))
+    var date = sdf.parse(dateTestCase)
+    var resultDate = DateUtils.addAndSubtract(-1, date)
+    assert("1999-12-31 00:00:01" == DateUtils.format(resultDate))
+
+    date = sdf.parse("2020-02-29 00:00:01")
+    resultDate = DateUtils.addAndSubtract(1, date)
+    assert("2020-03-01 00:00:01" == DateUtils.format(resultDate))
+    resultDate = DateUtils.addAndSubtract(-1, date)
+    assert("2020-02-28 00:00:01" == DateUtils.format(resultDate))
+
+    date = sdf.parse("2020-02-01 00:00:01")
+    resultDate = DateUtils.addAndSubtract(28, date)
+    assert("2020-02-29 00:00:01" == DateUtils.format(resultDate))
+  }
+
+  test("getTime should return time in milliseconds for the given date string") {
+    assert(timeStampTestCase == DateUtils.getTime(dateTestCase))
+  }
+
+  test("toDuration should convert milliseconds to human-readable duration string") {
+    val oneSecondInMillis: Long = TimeUnit.SECONDS.toMillis(1)
+    val oneMinutesInMillis: Long = TimeUnit.MINUTES.toMillis(1)
+    val oneHourInMillis: Long = TimeUnit.HOURS.toMillis(1)
+    val oneDayInMillis: Long = TimeUnit.DAYS.toMillis(1)
+    val allConditionInOne =
+      oneSecondInMillis + oneMinutesInMillis + oneHourInMillis + oneDayInMillis
+
+    assert("1 days 1 hours 1 minutes 1 seconds " == DateUtils.toDuration(allConditionInOne))
+    assert("0 hours 0 minutes 1 seconds " == DateUtils.toDuration(oneSecondInMillis))
+    assert("0 hours 1 minutes " == DateUtils.toDuration(oneMinutesInMillis))
+    assert("1 hours " == DateUtils.toDuration(oneHourInMillis))
+    assert("1 days " == DateUtils.toDuration(oneDayInMillis))
+  }
+
+  test("getTimeUnit should parse time unit correctly") {
+    assert((5, TimeUnit.SECONDS) == DateUtils.getTimeUnit(""))
+    assert((5, TimeUnit.SECONDS) == DateUtils.getTimeUnit("5s"))
+    assert((4, TimeUnit.MINUTES) == DateUtils.getTimeUnit("4m"))
+    assert((3, TimeUnit.HOURS) == DateUtils.getTimeUnit("3h"))
+    assert((2, TimeUnit.DAYS) == DateUtils.getTimeUnit("2d"))
+
+    assertThrows[IllegalArgumentException](DateUtils.getTimeUnit("5s4m3h2d"))
+    assertThrows[IllegalArgumentException](DateUtils.getTimeUnit("invalid"))
+  }
+
+  test("formatCSTTime should format CST time correctly") {
+    val USDate = "Fri Feb 11 17:30:00 CST 2024"
+    val date = DateUtils.formatCSTTime(USDate, DateUtils.fullFormat)
+    assert("2024-02-11 17:30:00" == date)
+  }
+}