blob: d52535e6d3ff41ac1f034d4cd0920e0415e1c127 [file] [log] [blame]
/**
* 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.
*/
#include "utils/TimeUtil.h"
#include "../TestBase.h"
namespace {
constexpr int ONE_HOUR = 60 * 60;
constexpr int ONE_DAY = 24 * ONE_HOUR;
struct tm createTm(int year, int month, int day, int hour, int minute, int second, bool is_dst = false) {
struct tm date_time;
date_time.tm_year = year - 1900;
date_time.tm_mon = month - 1;
date_time.tm_mday = day;
date_time.tm_hour = hour;
date_time.tm_min = minute;
date_time.tm_sec = second;
date_time.tm_isdst = is_dst ? 1 : 0;
return date_time;
}
void mkgmtimeTestHelper(time_t expected, int year, int month, int day, int hour, int minute, int second) {
struct tm date_time = createTm(year, month, day, hour, minute, second);
REQUIRE(mkgmtime(&date_time) == expected);
}
} // namespace
TEST_CASE("mkgmtime() works correctly", "[mkgmtime]") {
mkgmtimeTestHelper(0, 1970, 1, 1, 0, 0, 0);
for (int hour = 0; hour < 24; ++hour) {
mkgmtimeTestHelper((hour + 1) * ONE_HOUR - 1, 1970, 1, 1, hour, 59, 59);
}
mkgmtimeTestHelper(ONE_DAY, 1970, 1, 2, 0, 0, 0);
mkgmtimeTestHelper(31 * ONE_DAY, 1970, 2, 1, 0, 0, 0);
mkgmtimeTestHelper(365 * ONE_DAY, 1971, 1, 1, 0, 0, 0);
mkgmtimeTestHelper(793929600, 1995, 2, 28, 0, 0, 0);
mkgmtimeTestHelper(793929600 + ONE_DAY, 1995, 3, 1, 0, 0, 0);
mkgmtimeTestHelper(825465600, 1996, 2, 28, 0, 0, 0);
mkgmtimeTestHelper(825465600 + ONE_DAY, 1996, 2, 29, 0, 0, 0);
mkgmtimeTestHelper(951696000, 2000, 2, 28, 0, 0, 0);
mkgmtimeTestHelper(951696000 + ONE_DAY, 2000, 2, 29, 0, 0, 0);
mkgmtimeTestHelper(4107456000, 2100, 2, 28, 0, 0, 0);
mkgmtimeTestHelper(4107456000 + ONE_DAY, 2100, 3, 1, 0, 0, 0);
mkgmtimeTestHelper(1513104856, 2017, 12, 12, 18, 54, 16);
mkgmtimeTestHelper(1706655675, 2024, 1, 30, 23, 01, 15);
mkgmtimeTestHelper(3710453630, 2087, 7, 31, 01, 33, 50);
}
TEST_CASE("parseDateTimeStr() works correctly", "[parseDateTimeStr]") {
REQUIRE(parseDateTimeStr("1970-01-01T00:00:00Z") == 0);
REQUIRE(parseDateTimeStr("1970-01-01T00:59:59Z") == ONE_HOUR - 1);
REQUIRE(parseDateTimeStr("1970-01-02T00:00:00Z") == ONE_DAY);
REQUIRE(parseDateTimeStr("1970-02-01T00:00:00Z") == 31 * ONE_DAY);
REQUIRE(parseDateTimeStr("1971-01-01T00:00:00Z") == 365 * ONE_DAY);
REQUIRE(parseDateTimeStr("1995-02-28T00:00:00Z") == 793929600);
REQUIRE(parseDateTimeStr("1995-03-01T00:00:00Z") == 793929600 + ONE_DAY);
REQUIRE(parseDateTimeStr("1996-02-28T00:00:00Z") == 825465600);
REQUIRE(parseDateTimeStr("1996-02-29T00:00:00Z") == 825465600 + ONE_DAY);
REQUIRE(parseDateTimeStr("2000-02-28T00:00:00Z") == 951696000);
REQUIRE(parseDateTimeStr("2000-02-29T00:00:00Z") == 951696000 + ONE_DAY);
REQUIRE(parseDateTimeStr("2100-02-28T00:00:00Z") == 4107456000);
REQUIRE(parseDateTimeStr("2100-03-01T00:00:00Z") == 4107456000 + ONE_DAY);
REQUIRE(parseDateTimeStr("2017-12-12T18:54:16Z") == 1513104856);
REQUIRE(parseDateTimeStr("2024-01-30T23:01:15Z") == 1706655675);
REQUIRE(parseDateTimeStr("2087-07-31T01:33:50Z") == 3710453630);
}
TEST_CASE("Test time conversion", "[testtimeconversion]") {
REQUIRE("2017-02-16 20:14:56.196" == getTimeStr(1487276096196, true));
}