oceanbase/unittest/share/test_time_zone_info_manager.cpp
wangzelin.wzl 93a1074b0c patch 4.0
2022-10-24 17:57:12 +08:00

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();
}