89 lines
3.3 KiB
C++
89 lines
3.3 KiB
C++
/**
|
|
* Copyright (c) 2021 OceanBase
|
|
* OceanBase CE is licensed under Mulan PubL v2.
|
|
* You can use this software according to the terms and conditions of the Mulan PubL v2.
|
|
* You may obtain a copy of Mulan PubL v2 at:
|
|
* http://license.coscl.org.cn/MulanPubL-2.0
|
|
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
* See the Mulan PubL v2 for more details.
|
|
*/
|
|
|
|
#define USING_LOG_PREFIX SHARE
|
|
#include "share/ob_time_zone_info_manager.h"
|
|
#include "lib/container/ob_array_wrap.h"
|
|
#include "sql/session/ob_sql_session_info.h"
|
|
#include "lib/timezone/ob_time_convert.h"
|
|
#include <gtest/gtest.h>
|
|
namespace oceanbase
|
|
{
|
|
namespace common
|
|
{
|
|
TEST(test_time_zone_info_manager, test_time_zone_key)
|
|
{
|
|
ObTimeZoneKey tz_key1(ObString("Africa/Abidjan"));
|
|
ObTimeZoneKey tz_key2(ObString("Africa/Abidjan"));
|
|
ObTimeZoneKey tz_key3(ObString("AFRICA/ABIDJAN"));
|
|
ObTimeZoneKey tz_key4(ObString("Africa/Abidjam"));
|
|
EXPECT_EQ(tz_key1, tz_key2);
|
|
EXPECT_EQ(tz_key1, tz_key3);
|
|
EXPECT_EQ(false, tz_key3 == tz_key4);
|
|
|
|
EXPECT_EQ(tz_key1.hash(0), tz_key2.hash(0));
|
|
EXPECT_EQ(tz_key1.hash(0), tz_key3.hash(0));
|
|
|
|
}
|
|
|
|
void test_str_to_ob_time(const ObString &str, const ObString &expect_tz_name, const ObString &expect_tz_abbr)
|
|
{
|
|
ObTime ob_time;
|
|
EXPECT_EQ(OB_SUCCESS, ObTimeConverter::str_to_ob_time_with_date(str, ob_time));
|
|
EXPECT_EQ(expect_tz_name, ObString(strlen(ob_time.tz_name_), ob_time.tz_name_));
|
|
EXPECT_EQ(expect_tz_abbr, ObString(strlen(ob_time.tzd_abbr_), ob_time.tzd_abbr_));
|
|
LOG_INFO("test result", K(str), K(ob_time));
|
|
}
|
|
|
|
TEST(test_time_zone_info_manager, str_to_digit_with_date)
|
|
{
|
|
ObTime ob_time;
|
|
//Test OB current parsing datetime str method
|
|
test_str_to_ob_time("2000-01-01 00:00:00abc", "", "");
|
|
test_str_to_ob_time("2000-01-01 00:00:00 ", "","");
|
|
test_str_to_ob_time("2000-01-01 00:00:00 abc", "abc", "");
|
|
test_str_to_ob_time("2000-01-01 00:00:00.11111 abc", "abc", "");
|
|
test_str_to_ob_time("2000-01-01 00:00:00abc1111", "", "");
|
|
test_str_to_ob_time("2000-01-01 00:00:00abc1111def222","","");
|
|
|
|
//Test the parsing result of datetime string containing time zone and abbr
|
|
//1. tz and abbr can only exist in the 6th or 7th element of delims.
|
|
//2. And it can only exist in elements that start with space.
|
|
test_str_to_ob_time("2000-01-01 00:00:00 Asia/Shanghai", "asia/shanghai", "");
|
|
test_str_to_ob_time("2000-01-01 00:00:00 Asia/Shanghai CDT", "asia/shanghai", "CDT");
|
|
test_str_to_ob_time("2000-01-01 00:00:00.11111 Asia/Shanghai CDT", "asia/shanghai", "CDT");
|
|
test_str_to_ob_time("15-12-31 23:59:59.000000", "", "");
|
|
}
|
|
|
|
|
|
TEST(test_time_zone_info_manager, str_to_digit_without_date)
|
|
{
|
|
int16_t scale = 0;
|
|
ObTime ob_time1(DT_TYPE_TIME);
|
|
EXPECT_EQ(OB_SUCCESS, ObTimeConverter::str_to_ob_time_without_date("10:11:12", ob_time1, &scale));
|
|
int64_t value = ObTimeConverter::ob_time_to_time(ob_time1);
|
|
LOG_INFO("str to ob_time", K(ob_time1), K(value));
|
|
EXPECT_EQ(OB_SUCCESS, ObTimeConverter::time_overflow_trunc(value));
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
system("rm -rf test_time_zone_info_manager.log");
|
|
OB_LOGGER.set_log_level("INFO");
|
|
OB_LOGGER.set_file_name("test_time_zone_info_manager.log", true);
|
|
::testing::InitGoogleTest(&argc,argv);
|
|
return RUN_ALL_TESTS();
|
|
}
|