patch 4.0
This commit is contained in:
331
deps/oblib/unittest/rpc/test_mysql_util.cpp
vendored
331
deps/oblib/unittest/rpc/test_mysql_util.cpp
vendored
@ -21,181 +21,170 @@
|
||||
using namespace oceanbase::common;
|
||||
using namespace oceanbase::obmysql;
|
||||
|
||||
class TestObMySQLUtil : public ::testing::Test {
|
||||
class TestObMySQLUtil
|
||||
: public ::testing::Test
|
||||
{
|
||||
public:
|
||||
TestObMySQLUtil()
|
||||
{}
|
||||
|
||||
virtual void SetUp()
|
||||
{}
|
||||
{
|
||||
}
|
||||
|
||||
virtual void TearDown()
|
||||
{}
|
||||
|
||||
{
|
||||
}
|
||||
protected:
|
||||
};
|
||||
|
||||
#define PREPEND_ZEROS(char_size, offset, src_str, result_str) \
|
||||
{ \
|
||||
memset(buf, 0, 1024); \
|
||||
memcpy(buf, src_str, char_size); \
|
||||
ObMySQLUtil::prepend_zeros(buf, char_size, offset); \
|
||||
EXPECT_TRUE(0 == strcmp(buf, result_str)); \
|
||||
}
|
||||
#define PREPEND_ZEROS(char_size, offset, src_str, result_str) { \
|
||||
memset(buf, 0, 1024); \
|
||||
memcpy(buf, src_str, char_size); \
|
||||
ObMySQLUtil::prepend_zeros(buf, char_size, offset); \
|
||||
EXPECT_TRUE(0 == strcmp(buf, result_str)); \
|
||||
}
|
||||
|
||||
#define INT_CELL_STR(val, is_unsigned, obj_type, type, zerofill, zflength, ERR) \
|
||||
{ \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result << "value = " << val << ", is_unsigned = " << is_unsigned << ", zerofill = " << zerofill \
|
||||
<< ", len = " << zflength << std::endl; \
|
||||
#define INT_CELL_STR(val, is_unsigned, obj_type, type, zerofill, zflength, ERR) { \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result<<"value = "<<val<<", is_unsigned = "<<is_unsigned<<", zerofill = "<< zerofill<<", len = "<<zflength<<std::endl; \
|
||||
ASSERT_EQ(ERR, ObMySQLUtil::int_cell_str(buf, len, val, obj_type, is_unsigned, type, pos, zerofill, zflength)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define FLOAT_CELL_STR(val, type, scale, zerofill, zflength, ERR) { \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result<<"value="<<val<<",scale="<<scale<<",zerofill="<<zerofill<<",zflength"<<zflength<<std::endl; \
|
||||
ASSERT_EQ(ERR, ObMySQLUtil::float_cell_str(buf, len, val, type, pos, scale, zerofill, zflength)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define DOUBLE_CELL_STR(val, type, scale, zerofill, zflength, ERR) { \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result<<"value="<<val<<",scale="<<scale<<",zerofill="<<zerofill<<",zflength"<<zflength<<std::endl; \
|
||||
ASSERT_EQ(ERR, ObMySQLUtil::double_cell_str(buf, len, val, type, pos, scale, zerofill, zflength)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define DATETIME_CELL_STR(val_str, type, ERR) { \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result<<"val = "<< val_str << std::endl; \
|
||||
int64_t val = 0; \
|
||||
ObTimeConvertCtx cvrt_ctx(&tz_info, true); \
|
||||
ASSERT_EQ(ERR, ObTimeConverter::str_to_datetime(val_str, cvrt_ctx, val, &scale)); \
|
||||
if (ERR == OB_SUCCESS) { \
|
||||
ASSERT_EQ(ERR, ObMySQLUtil::datetime_cell_str(buf, len, val, type, pos, &tz_info, scale)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
} else { \
|
||||
of_result << "invalid datetime" << std::endl; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define FLOAT_CELL_STR(val, type, scale, zerofill, zflength, ERR) \
|
||||
{ \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result << "value=" << val << ",scale=" << scale << ",zerofill=" << zerofill << ",zflength" << zflength \
|
||||
<< std::endl; \
|
||||
ASSERT_EQ(ERR, ObMySQLUtil::float_cell_str(buf, len, val, type, pos, scale, zerofill, zflength)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define DOUBLE_CELL_STR(val, type, scale, zerofill, zflength, ERR) \
|
||||
{ \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result << "value=" << val << ",scale=" << scale << ",zerofill=" << zerofill << ",zflength" << zflength \
|
||||
<< std::endl; \
|
||||
ASSERT_EQ(ERR, ObMySQLUtil::double_cell_str(buf, len, val, type, pos, scale, zerofill, zflength)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define DATETIME_CELL_STR(val_str, type, ERR) \
|
||||
{ \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result << "val = " << val_str << std::endl; \
|
||||
int64_t val = 0; \
|
||||
ObTimeConvertCtx cvrt_ctx(&tz_info, true); \
|
||||
const ObDataTypeCastParams dtc_params(&tz_info); \
|
||||
ASSERT_EQ(ERR, ObTimeConverter::str_to_datetime(val_str, cvrt_ctx, val, &scale)); \
|
||||
if (ERR == OB_SUCCESS) { \
|
||||
ASSERT_EQ(ERR, ObMySQLUtil::datetime_cell_str(buf, len, val, type, pos, dtc_params, scale)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
} else { \
|
||||
of_result << "invalid datetime" << std::endl; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define DATE_CELL_STR(val_str, type, ERR) \
|
||||
{ \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result << "val = " << val_str << std::endl; \
|
||||
int32_t val = 0; \
|
||||
ASSERT_EQ(ERR, ObTimeConverter::str_to_date(val_str, val)); \
|
||||
if (ERR == OB_SUCCESS) { \
|
||||
#define DATE_CELL_STR(val_str, type, ERR) { \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result<<"val = "<< val_str << std::endl; \
|
||||
int32_t val = 0; \
|
||||
ASSERT_EQ(ERR, ObTimeConverter::str_to_date(val_str, val)); \
|
||||
if (ERR == OB_SUCCESS) { \
|
||||
ASSERT_EQ(ERR, ObMySQLUtil::date_cell_str(buf, len, val, type, pos)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << " " << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
} else { \
|
||||
of_result << "invalid date" << std::endl; \
|
||||
} \
|
||||
}
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << " "<< std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
} else { \
|
||||
of_result << "invalid date" << std::endl; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define TIME_CELL_STR(val_str, type, scale, ERR) \
|
||||
{ \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result << "val = " << val_str << "scale = " << scale << std::endl; \
|
||||
int64_t val = 0; \
|
||||
ASSERT_EQ(ERR, ObTimeConverter::str_to_time(val_str, val, &scale)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
#define TIME_CELL_STR(val_str, type, scale, ERR) { \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result << "val = " << val_str << "scale = " << scale << std::endl; \
|
||||
int64_t val = 0; \
|
||||
ASSERT_EQ(ERR, ObTimeConverter::str_to_time(val_str, val, &scale)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
ASSERT_EQ(ERR, ObMySQLUtil::time_cell_str(buf, len, val, type, pos, scale)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
} else { \
|
||||
of_result << "invalid time" << std::endl; \
|
||||
} \
|
||||
}
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
} else { \
|
||||
of_result << "invalid time" << std::endl; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define YEAR_CELL_STR(yval, type, ERR) \
|
||||
{ \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result << "val = " << yval << std::endl; \
|
||||
uint8_t val = 0; \
|
||||
ASSERT_EQ(ERR, ObTimeConverter::int_to_year(yval, val)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
ASSERT_EQ(ERR, ObMySQLUtil::year_cell_str(buf, len, val, type, pos)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
} else { \
|
||||
of_result << "invalid year" << std::endl; \
|
||||
} \
|
||||
}
|
||||
#define YEAR_CELL_STR(yval, type, ERR) { \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result << "val = "<< yval <<std::endl; \
|
||||
uint8_t val = 0; \
|
||||
ASSERT_EQ(ERR, ObTimeConverter::int_to_year(yval, val)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
ASSERT_EQ(ERR, ObMySQLUtil::year_cell_str(buf, len, val, type, pos)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
} else { \
|
||||
of_result << "invalid year" << std::endl; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define VARCHAR_CELL_STR(str, str_len, ERR) \
|
||||
{ \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result << "val = "; \
|
||||
for (int i = 0; i < str_len; i++) { \
|
||||
of_result << str[i]; \
|
||||
} \
|
||||
of_result << std::endl; \
|
||||
of_result << "str_len = " << str_len << std::endl; \
|
||||
ObString val; \
|
||||
val.assign_ptr(str, str_len); \
|
||||
#define VARCHAR_CELL_STR(str, str_len, ERR) { \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result << "val = "; \
|
||||
for (int i = 0 ; i < str_len ; i++) { \
|
||||
of_result << str[i] ; \
|
||||
} \
|
||||
of_result << std::endl; \
|
||||
of_result << "str_len = " << str_len << std::endl; \
|
||||
ObString val; \
|
||||
val.assign_ptr(str, str_len); \
|
||||
ASSERT_EQ(ERR, ObMySQLUtil::varchar_cell_str(buf, len, val, false, pos)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
}
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define NUMBER_CELL_STR(val, scale, zerofill, zflen, ERR) \
|
||||
{ \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result << "val" << val.format() << ", scale = " << scale << ", zerofill=" << zerofill << ", zflen = " << zflen \
|
||||
<< std::endl; \
|
||||
ASSERT_EQ(OB_SUCCESS, ObMySQLUtil::number_cell_str(buf, len, val, pos, scale, zerofill, zflen)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
}
|
||||
#define NUMBER_CELL_STR(val, scale, zerofill, zflen, ERR) { \
|
||||
memset(buf, 0, 1024); \
|
||||
pos = 0; \
|
||||
of_result << "val" << val.format() << ", scale = " << \
|
||||
scale << ", zerofill=" << zerofill <<", zflen = " << zflen << std::endl; \
|
||||
ASSERT_EQ(OB_SUCCESS, ObMySQLUtil::number_cell_str(buf, len, val, pos, scale, zerofill, zflen)); \
|
||||
if (OB_SUCCESS == ERR) { \
|
||||
of_result << buf << std::endl; \
|
||||
} else { \
|
||||
of_result << "err" << std::endl; \
|
||||
} \
|
||||
}
|
||||
|
||||
TEST_F(TestObMySQLUtil, TestPrependZero)
|
||||
{
|
||||
@ -214,8 +203,8 @@ TEST_F(TestObMySQLUtil, TestPrependZero)
|
||||
|
||||
TEST_F(TestObMySQLUtil, serialize_test)
|
||||
{
|
||||
const char* tmp_file = "test_mysql_util.tmp";
|
||||
const char* result_file = "test_mysql_util.result";
|
||||
const char *tmp_file = "test_mysql_util.tmp";
|
||||
const char *result_file = "test_mysql_util.result";
|
||||
std::ofstream of_result(tmp_file);
|
||||
ASSERT_TRUE(of_result.is_open());
|
||||
char buf[1024];
|
||||
@ -226,7 +215,7 @@ TEST_F(TestObMySQLUtil, serialize_test)
|
||||
int64_t pos = 0;
|
||||
// test func int_cell_str
|
||||
int ret = OB_SUCCESS;
|
||||
of_result << "***********INT_TEST***********" << std::endl;
|
||||
of_result << "***********INT_TEST***********"<<std::endl;
|
||||
INT_CELL_STR(10, true, ObUInt64Type, TEXT, true, 5, ret);
|
||||
INT_CELL_STR(100, true, ObUInt64Type, TEXT, true, 5, ret);
|
||||
INT_CELL_STR(100, false, ObIntType, TEXT, true, 5, ret);
|
||||
@ -257,7 +246,7 @@ TEST_F(TestObMySQLUtil, serialize_test)
|
||||
// test func float_cell_str
|
||||
ret = OB_SUCCESS;
|
||||
of_result << std::endl;
|
||||
of_result << "***********FLOAT_TEST***********" << std::endl;
|
||||
of_result << "***********FLOAT_TEST***********"<<std::endl;
|
||||
FLOAT_CELL_STR(1.5, TEXT, 1, true, 5, ret);
|
||||
FLOAT_CELL_STR(1.5, TEXT, 1, true, 5, ret);
|
||||
FLOAT_CELL_STR(1.5, TEXT, 10, true, 10, ret);
|
||||
@ -269,7 +258,7 @@ TEST_F(TestObMySQLUtil, serialize_test)
|
||||
FLOAT_CELL_STR(fval, TEXT, 10, true, 20, ret);
|
||||
double dval = 1e-15;
|
||||
of_result << std::endl;
|
||||
of_result << "***********DOUBLE_TEST***********" << std::endl;
|
||||
of_result << "***********DOUBLE_TEST***********"<<std::endl;
|
||||
DOUBLE_CELL_STR(dval, TEXT, 10, true, 20, ret);
|
||||
DOUBLE_CELL_STR(dval, TEXT, 20, true, 20, ret);
|
||||
dval = 1e-16;
|
||||
@ -297,7 +286,7 @@ TEST_F(TestObMySQLUtil, serialize_test)
|
||||
ObTimeZoneInfo tz_info;
|
||||
int16_t scale = 0;
|
||||
of_result << std::endl;
|
||||
of_result << "***********DATETIME_TEST***********" << std::endl;
|
||||
of_result << "***********DATETIME_TEST***********"<<std::endl;
|
||||
DATETIME_CELL_STR("2011-01-01 12:01:01", TEXT, ret);
|
||||
DATETIME_CELL_STR("2011-01-01 12:01:01.555", TEXT, ret);
|
||||
DATETIME_CELL_STR("99991231235959", TEXT, ret);
|
||||
@ -318,7 +307,7 @@ TEST_F(TestObMySQLUtil, serialize_test)
|
||||
// test func date_cell_str length=10 -> '\n'
|
||||
ret = OB_SUCCESS;
|
||||
of_result << std::endl;
|
||||
of_result << "***********DATE_TEST***********" << std::endl;
|
||||
of_result << "***********DATE_TEST***********"<<std::endl;
|
||||
DATE_CELL_STR("2011-01-01", TEXT, ret);
|
||||
DATE_CELL_STR("2011-01-01", TEXT, ret);
|
||||
DATE_CELL_STR("99991231", TEXT, ret);
|
||||
@ -335,10 +324,10 @@ TEST_F(TestObMySQLUtil, serialize_test)
|
||||
DATE_CELL_STR("99990132", TEXT, ret);
|
||||
DATE_CELL_STR("2011-13-01", TEXT, ret);
|
||||
|
||||
// test func time_cell_str
|
||||
//test func time_cell_str
|
||||
ret = OB_SUCCESS;
|
||||
of_result << std::endl;
|
||||
of_result << "***********TIME_TEST***********" << std::endl;
|
||||
of_result << "***********TIME_TEST***********"<<std::endl;
|
||||
TIME_CELL_STR("23:00:00", TEXT, scale, ret);
|
||||
TIME_CELL_STR("00:00:00", TEXT, scale, ret);
|
||||
TIME_CELL_STR("12:00:00.1233", TEXT, scale, ret);
|
||||
@ -346,17 +335,17 @@ TEST_F(TestObMySQLUtil, serialize_test)
|
||||
TIME_CELL_STR("-838:59:59", TEXT, scale, ret);
|
||||
TIME_CELL_STR("838:59:59", TEXT, scale, ret);
|
||||
|
||||
// err
|
||||
//err
|
||||
ret = OB_ERR_TRUNCATED_WRONG_VALUE;
|
||||
TIME_CELL_STR("838:59:59.1212", TEXT, scale, ret);
|
||||
TIME_CELL_STR("-838:59:59.1212", TEXT, scale, ret);
|
||||
TIME_CELL_STR("839:59:59.9999999", TEXT, scale, ret);
|
||||
TIME_CELL_STR("-839:59:59.9999999", TEXT, scale, ret);
|
||||
|
||||
// test func year_cell_str
|
||||
//test func year_cell_str
|
||||
ret = OB_SUCCESS;
|
||||
of_result << std::endl;
|
||||
of_result << "***********YEAR_TEST***********" << std::endl;
|
||||
of_result << "***********YEAR_TEST***********"<<std::endl;
|
||||
YEAR_CELL_STR(2012, TEXT, ret);
|
||||
YEAR_CELL_STR(0, TEXT, ret);
|
||||
YEAR_CELL_STR(1901, TEXT, ret);
|
||||
@ -369,17 +358,17 @@ TEST_F(TestObMySQLUtil, serialize_test)
|
||||
ret = OB_DATA_OUT_OF_RANGE;
|
||||
YEAR_CELL_STR(-1, TEXT, ret);
|
||||
|
||||
// test func varchar_cell_str
|
||||
//test func varchar_cell_str
|
||||
ret = OB_SUCCESS;
|
||||
of_result << std::endl;
|
||||
of_result << "***********VARCHAR_TEST***********" << std::endl;
|
||||
of_result << "***********VARCHAR_TEST***********"<<std::endl;
|
||||
VARCHAR_CELL_STR("", 0, ret);
|
||||
VARCHAR_CELL_STR("123", 3, ret);
|
||||
VARCHAR_CELL_STR("adafa", 5, ret);
|
||||
VARCHAR_CELL_STR("123abc", 6, ret);
|
||||
char src_buf[2048];
|
||||
memset(src_buf, 0, 2048);
|
||||
for (int i = 0; i < 2048; i++) {
|
||||
for (int i = 0 ; i < 2048 ; i++) {
|
||||
src_buf[i] = 'o';
|
||||
}
|
||||
// err
|
||||
@ -394,7 +383,7 @@ TEST_F(TestObMySQLUtil, serialize_test)
|
||||
// test func number_cell_str
|
||||
ret = OB_SUCCESS;
|
||||
of_result << std::endl;
|
||||
of_result << "***********NUMBER_TEST***********" << std::endl;
|
||||
of_result << "***********NUMBER_TEST***********"<<std::endl;
|
||||
ObMalloc allocator;
|
||||
number::ObNumber nmb;
|
||||
nmb.from("123", allocator);
|
||||
@ -435,7 +424,7 @@ TEST_F(TestObMySQLUtil, serialize_test)
|
||||
LOG_INFO("buf", K(ObString(buf)));
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
system("rm -rf test_mysql_util.log");
|
||||
OB_LOGGER.set_log_level("INFO");
|
||||
|
||||
Reference in New Issue
Block a user