1615 lines
63 KiB
C++
1615 lines
63 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.
|
|
*/
|
|
|
|
#include <gtest/gtest.h>
|
|
#include "lib/allocator/ob_tc_malloc.h"
|
|
#include "lib/time/ob_time_utility.h"
|
|
#include "share/schema/ob_schema_struct.h"
|
|
#include "share/schema/ob_part_mgr_util.h"
|
|
#include "share/schema/ob_table_schema.h"
|
|
|
|
namespace oceanbase {
|
|
using namespace common;
|
|
namespace share {
|
|
namespace schema {
|
|
static const int64_t BUF_SIZE = 1024 * 10;
|
|
|
|
#if 0
|
|
//-----test for func-----//
|
|
TEST(ObSchemaStructTest, ob_view_check_option_str_test)
|
|
{
|
|
ASSERT_EQ(0, memcmp("none", ob_view_check_option_str(VIEW_CHECK_OPTION_NONE), strlen("none")));
|
|
ASSERT_EQ(0, memcmp("local", ob_view_check_option_str(VIEW_CHECK_OPTION_LOCAL),
|
|
strlen("local")));
|
|
ASSERT_EQ(0, memcmp("cascade", ob_view_check_option_str(VIEW_CHECK_OPTION_CASCADED),
|
|
strlen("cascade")));
|
|
ASSERT_EQ(0, memcmp("invalid", ob_view_check_option_str(VIEW_CHECK_OPTION_MAX),
|
|
strlen("invalid")));
|
|
}
|
|
|
|
TEST(ObSchemaStructTest, ob_index_status_str_test)
|
|
{
|
|
ASSERT_EQ(0, memcmp("not_found", ob_index_status_str(INDEX_STATUS_NOT_FOUND),
|
|
strlen("not_found")));
|
|
ASSERT_EQ(0, memcmp("unavailable", ob_index_status_str(INDEX_STATUS_UNAVAILABLE),
|
|
strlen("unavailable")));
|
|
ASSERT_EQ(0, memcmp("available", ob_index_status_str(INDEX_STATUS_AVAILABLE),
|
|
strlen("available")));
|
|
ASSERT_EQ(0, memcmp("unique_checking", ob_index_status_str(INDEX_STATUS_UNIQUE_CHECKING),
|
|
strlen("unique_checking")));
|
|
ASSERT_EQ(0, memcmp("unique_inelegible", ob_index_status_str(INDEX_STATUS_UNIQUE_INELIGIBLE),
|
|
strlen("unique_inelegible")));
|
|
ASSERT_EQ(0, memcmp("index_error", ob_index_status_str(INDEX_STATUS_INDEX_ERROR),
|
|
strlen("index_error")));
|
|
ASSERT_EQ(0, memcmp("invalid", ob_index_status_str(INDEX_STATUS_MAX), strlen("invalid")));
|
|
}
|
|
//--------test for ObTenantTableId-------//
|
|
TEST(ObSchemaStructTest, ob_tenant_table_id_test)
|
|
{
|
|
ObTenantTableId a;
|
|
ObTenantTableId b(1, 2);
|
|
ObTenantTableId c(1, 3);
|
|
ObTenantTableId d(2, 1);
|
|
ObTenantTableId e(3, 1);
|
|
ObTenantTableId f = e;
|
|
ASSERT_FALSE(a.is_valid());
|
|
ASSERT_TRUE(b.is_valid());
|
|
a.reset();
|
|
a.tenant_id_ = 1;
|
|
a.table_id_ = 2;
|
|
ASSERT_TRUE(a == b);
|
|
ASSERT_FALSE(c == b);
|
|
ASSERT_NE(c.hash(), b.hash());
|
|
ASSERT_EQ(d.hash(), e.hash());
|
|
ASSERT_TRUE(b < c);
|
|
ASSERT_TRUE(b < d);
|
|
ASSERT_TRUE(e == f);
|
|
}
|
|
//--------test for ObTenantDatabaseId-------//
|
|
TEST(ObSchemaStructTest, ob_tenant_database_id_test)
|
|
{
|
|
ObTenantDatabaseId a;
|
|
ObTenantDatabaseId b(1, 2);
|
|
ObTenantDatabaseId c(1, 3);
|
|
ObTenantDatabaseId d(2, 1);
|
|
ObTenantDatabaseId e(3, 1);
|
|
ObTenantDatabaseId f(3, 1);
|
|
ASSERT_FALSE(a.is_valid());
|
|
ASSERT_TRUE(b.is_valid());
|
|
a.reset();
|
|
a.tenant_id_ = 1;
|
|
a.database_id_ = 2;
|
|
ASSERT_TRUE(a == b);
|
|
ASSERT_FALSE(c == b);
|
|
ASSERT_TRUE(e == f);
|
|
ASSERT_NE(c.hash(), b.hash());
|
|
ASSERT_EQ(d.hash(), e.hash());
|
|
ASSERT_TRUE(b < c);
|
|
ASSERT_TRUE(b < d);
|
|
}
|
|
//--------test for ObTenantTablegroupId-------//
|
|
TEST(ObSchemaStructTest, ob_tenant_tablegroup_id_test)
|
|
{
|
|
ObTenantTablegroupId a;
|
|
ObTenantTablegroupId b(1, 2);
|
|
ObTenantTablegroupId c(1, 3);
|
|
ObTenantTablegroupId d(2, 1);
|
|
ObTenantTablegroupId e(3, 1);
|
|
ObTenantTablegroupId f(3, 1);
|
|
ASSERT_FALSE(a.is_valid());
|
|
ASSERT_TRUE(b.is_valid());
|
|
a.reset();
|
|
a.tenant_id_ = 1;
|
|
a.tablegroup_id_ = 2;
|
|
ASSERT_TRUE(a == b);
|
|
ASSERT_FALSE(c == b);
|
|
ASSERT_TRUE(e == f);
|
|
ASSERT_NE(c.hash(), b.hash());
|
|
ASSERT_EQ(d.hash(), e.hash());
|
|
ASSERT_TRUE(b < c);
|
|
ASSERT_TRUE(b < d);
|
|
}
|
|
//------------test for ObTenantResource-------------//
|
|
TEST(ObSchemaStructTest, ob_tenant_resource)
|
|
{
|
|
ObTenantResource tenant_resource;
|
|
ASSERT_FALSE(tenant_resource.is_valid());
|
|
tenant_resource.tenant_id_ = 1;
|
|
ASSERT_TRUE(tenant_resource.is_valid());
|
|
tenant_resource.cpu_reserved_ = -1;
|
|
ASSERT_FALSE(tenant_resource.is_valid());
|
|
tenant_resource.cpu_reserved_ = 200;
|
|
tenant_resource.cpu_max_ = 100;
|
|
ASSERT_FALSE(tenant_resource.is_valid());
|
|
tenant_resource.cpu_reserved_ = 100;
|
|
tenant_resource.cpu_max_ = 100;
|
|
ASSERT_TRUE(tenant_resource.is_valid());
|
|
tenant_resource.cpu_reserved_ = 80;
|
|
tenant_resource.cpu_max_ = 100;
|
|
ASSERT_TRUE(tenant_resource.is_valid());
|
|
tenant_resource.reset();
|
|
ASSERT_FALSE(tenant_resource.is_valid());
|
|
}
|
|
//------------test for ObUser----------//
|
|
TEST(ObSchemaStructTest, ob_user)
|
|
{
|
|
ObUser user;
|
|
ASSERT_FALSE(user.is_valid());
|
|
user.tenant_id_ = 1;
|
|
ASSERT_FALSE(user.is_valid());
|
|
user.user_id_ = 1;
|
|
ASSERT_TRUE(user.is_valid());
|
|
user.reset();
|
|
ASSERT_TRUE(user.priv_all_);
|
|
ASSERT_TRUE(user.priv_alter_);
|
|
ASSERT_TRUE(user.priv_create_);
|
|
ASSERT_TRUE(user.priv_create_user_);
|
|
ASSERT_TRUE(user.priv_delete_);
|
|
ASSERT_TRUE(user.priv_drop_);
|
|
ASSERT_TRUE(user.priv_grant_option_);
|
|
ASSERT_TRUE(user.priv_insert_);
|
|
ASSERT_TRUE(user.priv_update_);
|
|
ASSERT_TRUE(user.priv_select_);
|
|
ASSERT_TRUE(user.priv_replace_);
|
|
ASSERT_TRUE(user.is_locked_);
|
|
}
|
|
//------------test for ObDataBasePrivilege-----------//
|
|
TEST(ObSchemaStructTest, ob_database_privilege)
|
|
{
|
|
ObDatabasePrivilege database_priv;
|
|
ASSERT_FALSE(database_priv.is_valid());
|
|
database_priv.tenant_id_ = 1;
|
|
ASSERT_FALSE(database_priv.is_valid());
|
|
database_priv.user_id_ = 1;
|
|
ASSERT_FALSE(database_priv.is_valid());
|
|
database_priv.database_id_ = 1;
|
|
ASSERT_TRUE(database_priv.is_valid());
|
|
database_priv.reset();
|
|
ASSERT_TRUE(database_priv.priv_all_);
|
|
ASSERT_TRUE(database_priv.priv_alter_);
|
|
ASSERT_TRUE(database_priv.priv_create_);
|
|
ASSERT_TRUE(database_priv.priv_delete_);
|
|
ASSERT_TRUE(database_priv.priv_drop_);
|
|
ASSERT_TRUE(database_priv.priv_grant_option_);
|
|
ASSERT_TRUE(database_priv.priv_insert_);
|
|
ASSERT_TRUE(database_priv.priv_update_);
|
|
ASSERT_TRUE(database_priv.priv_select_);
|
|
ASSERT_TRUE(database_priv.priv_replace_);
|
|
}
|
|
//------------test for ObSysParam-------------//
|
|
TEST(ObSchemaStructTest, ob_sys_param)
|
|
{
|
|
ObSysParam sys_param;
|
|
int ret = OB_SUCCESS;
|
|
char long_name[OB_MAX_SYS_PARAM_NAME_LENGTH + 1];
|
|
char long_value[OB_MAX_SYS_PARAM_VALUE_LENGTH + 1];
|
|
char long_info[OB_MAX_SYS_PARAM_INFO_LENGTH + 1];
|
|
ASSERT_FALSE(sys_param.is_valid());
|
|
ret = sys_param.init(1, ObZone("test"), "short_name", 1, "short_value", "", "", "short_info", 0);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
memset(long_name, '1', sizeof(long_name));
|
|
long_name[OB_MAX_SYS_PARAM_NAME_LENGTH] = '\0';
|
|
memset(long_value, '1', sizeof(long_value));
|
|
long_value[OB_MAX_SYS_PARAM_VALUE_LENGTH] = '\0';
|
|
memset(long_info, '1', sizeof(long_info));
|
|
long_info[OB_MAX_SYS_PARAM_INFO_LENGTH] = '\0';
|
|
ret = sys_param.init(1, ObZone("test"), long_name, 1, "short_value", "", "", "short_info", 0);
|
|
ASSERT_EQ(OB_SIZE_OVERFLOW, ret);
|
|
ret = sys_param.init(1, ObZone("test"), "short_name", 1, long_value, "", "", "short_info", 0);
|
|
ASSERT_EQ(OB_SIZE_OVERFLOW, ret);
|
|
ret = sys_param.init(1, ObZone("test"), "short_name", 1, "short_value", "", "", long_info, 0);
|
|
ASSERT_EQ(OB_SIZE_OVERFLOW, ret);
|
|
ret = sys_param.init(1, ObZone("test"), long_name, 1, long_value, "", "", long_info, 0);
|
|
ASSERT_EQ(OB_SIZE_OVERFLOW, ret);
|
|
}
|
|
//------------test for ObSchema--------//
|
|
void test_ob_schema_string_array2str(void)
|
|
{
|
|
int ret = OB_SUCCESS;
|
|
ObSchema schema;
|
|
common::ObArray<common::ObString> string_array;
|
|
char str[BUF_SIZE] = "\0";
|
|
ret = schema.string_array2str(string_array, str, BUF_SIZE);
|
|
ASSERT_EQ(ret, OB_SUCCESS);
|
|
ASSERT_STREQ("", str);
|
|
|
|
string_array.push_back(ObString::make_string("test1"));
|
|
ret = schema.string_array2str(string_array, str, BUF_SIZE);
|
|
ASSERT_EQ(ret, OB_SUCCESS);
|
|
ASSERT_STREQ("test1", str);
|
|
|
|
string_array.push_back(ObString::make_string("test2"));
|
|
string_array.push_back(ObString::make_string("test3"));
|
|
ret = schema.string_array2str(string_array, str, BUF_SIZE);
|
|
ASSERT_EQ(ret, OB_SUCCESS);
|
|
ASSERT_STREQ("test1;test2;test3", str);
|
|
|
|
ret = schema.string_array2str(string_array, str, 10);
|
|
ASSERT_EQ(OB_BUF_NOT_ENOUGH, ret);
|
|
}
|
|
void test_ob_schema_str2_string_array(void)
|
|
{
|
|
int ret = OB_SUCCESS;
|
|
char str[BUF_SIZE] = "\0";
|
|
ObSchema schema;
|
|
common::ObArray<common::ObString> string_array;
|
|
ret = schema.str2string_array(NULL, string_array);
|
|
ASSERT_EQ(ret, OB_SUCCESS);
|
|
ASSERT_EQ(0, string_array.count());
|
|
|
|
ret = schema.str2string_array(str, string_array);
|
|
ASSERT_EQ(ret, OB_SUCCESS);
|
|
ASSERT_EQ(0, string_array.count());
|
|
|
|
string_array.reset();
|
|
memset(str, 0, sizeof(str) / sizeof(char));
|
|
memcpy(str, "test", strlen("test"));
|
|
ret = schema.str2string_array(str, string_array);
|
|
ASSERT_EQ(ret, OB_SUCCESS);
|
|
ASSERT_EQ(1, string_array.count());
|
|
ASSERT_STREQ("test", string_array.at(0).ptr());
|
|
|
|
string_array.reset();
|
|
memset(str, 0, sizeof(str) / sizeof(char));
|
|
memcpy(str, "test1;", strlen("test1;"));
|
|
ret = schema.str2string_array(str, string_array);
|
|
ASSERT_EQ(ret, OB_SUCCESS);
|
|
ASSERT_EQ(1, string_array.count());
|
|
ASSERT_STREQ("test1", string_array.at(0).ptr());
|
|
|
|
string_array.reset();
|
|
memset(str, 0, sizeof(str) / sizeof(char));
|
|
memcpy(str, "test1;test2", strlen("test1;test2"));
|
|
ret = schema.str2string_array(str, string_array);
|
|
ASSERT_EQ(ret, OB_SUCCESS);
|
|
ASSERT_EQ(2, string_array.count());
|
|
ASSERT_STREQ("test1", string_array.at(0).ptr());
|
|
ASSERT_STREQ("test2", string_array.at(1).ptr());
|
|
|
|
string_array.reset();
|
|
memset(str, 0, sizeof(str) / sizeof(char));
|
|
memcpy(str, "test1;test2;", strlen("test1;test2;"));
|
|
ret = schema.str2string_array(str, string_array);
|
|
ASSERT_EQ(ret, OB_SUCCESS);
|
|
ASSERT_EQ(2, string_array.count());
|
|
ASSERT_STREQ("test1", string_array.at(0).ptr());
|
|
ASSERT_STREQ("test2", string_array.at(1).ptr());
|
|
}
|
|
//-----test protected methods for ObSchema----//
|
|
class ObSchemaTest: public ObSchema
|
|
{
|
|
public:
|
|
ObSchemaTest(){}
|
|
void test_deep_copy_str(void);
|
|
void test_deep_copy_obj(void);
|
|
void test_deep_copy_string_array(void);
|
|
void test_add_string_to_array(void);
|
|
void test_serialize_string_array(void);
|
|
void test_string_array_serialize_size(void);
|
|
void test_reset_string(void);
|
|
void test_reset_string_array(void);
|
|
};
|
|
void ObSchemaTest::test_deep_copy_str(void)
|
|
{
|
|
int ret = OB_SUCCESS;
|
|
char str[BUF_SIZE];
|
|
ObString dest;
|
|
ret = deep_copy_str(NULL, dest);
|
|
ASSERT_EQ(OB_INVALID_ARGUMENT, ret);
|
|
memset(str, 0, sizeof(str) / sizeof(char));
|
|
ret = deep_copy_str(str, dest);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_STREQ(str, dest.ptr());
|
|
memcpy(str, "a test string", strlen("a test string"));
|
|
ret = deep_copy_str(str, dest);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_STREQ(str, dest.ptr());
|
|
|
|
char str1[BUF_SIZE] = "";
|
|
char str2[BUF_SIZE] = "test";
|
|
ObString src1(str1);
|
|
ObString src2(str2);
|
|
ret = deep_copy_str(src1, dest);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(0, src1.compare(dest));
|
|
ret = deep_copy_str(src2, dest);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(0, src2.compare(dest));
|
|
|
|
//test schema error
|
|
ASSERT_TRUE(is_valid());
|
|
error_ret_ = OB_SCHEMA_ERROR;
|
|
ret = deep_copy_str(src2, dest);
|
|
ASSERT_EQ(OB_SCHEMA_ERROR, ret);
|
|
ASSERT_FALSE(is_valid());
|
|
error_ret_ = OB_SUCCESS;
|
|
}
|
|
void ObSchemaTest::test_deep_copy_obj(void)
|
|
{
|
|
int ret = OB_SUCCESS;
|
|
ObObj src1 = ObObj::make_max_obj();
|
|
ObObj src2 = ObObj::make_min_obj();
|
|
ObObj src3 = ObObj::make_nop_obj();
|
|
ObObj dest;
|
|
ret = deep_copy_obj(src1, dest);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_TRUE(src1 == dest);
|
|
ret = deep_copy_obj(src2, dest);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_TRUE(src2 == dest);
|
|
ret = deep_copy_obj(src3, dest);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_TRUE(src3 == dest);
|
|
|
|
//test schema error
|
|
error_ret_ = OB_SCHEMA_ERROR;
|
|
ret = deep_copy_obj(src2, dest);
|
|
ASSERT_EQ(OB_SCHEMA_ERROR, ret);
|
|
error_ret_ = OB_SUCCESS;
|
|
}
|
|
void ObSchemaTest::test_deep_copy_string_array(void)
|
|
{
|
|
int ret = OB_SUCCESS;
|
|
ObArray<ObString> src_array;
|
|
ObArrayHelper<ObString> dst_array;
|
|
ret = deep_copy_string_array(src_array, dst_array);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(src_array.count(), dst_array.count());
|
|
|
|
src_array.push_back(ObString::make_string("test1"));
|
|
ret = deep_copy_string_array(src_array, dst_array);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(1, dst_array.count());
|
|
ASSERT_STREQ("test1", dst_array.at(0).ptr());
|
|
|
|
src_array.push_back(ObString::make_string("test2"));
|
|
dst_array.reset();
|
|
ret = deep_copy_string_array(src_array, dst_array);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_STREQ("test1", dst_array.at(0).ptr());
|
|
ASSERT_STREQ("test2", dst_array.at(1).ptr());
|
|
|
|
ret = deep_copy_string_array(src_array, dst_array);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(2, dst_array.count());
|
|
ASSERT_STREQ("test1", dst_array.at(0).ptr());
|
|
ASSERT_STREQ("test2", dst_array.at(1).ptr());
|
|
}
|
|
void ObSchemaTest::test_add_string_to_array(void)
|
|
{
|
|
int ret = OB_SUCCESS;
|
|
ObArrayHelper<ObString> array;
|
|
ObString str("test");
|
|
ret = add_string_to_array(str, array);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(1, array.count());
|
|
ASSERT_STREQ("test", array.at(0).ptr());
|
|
|
|
array.reset();
|
|
for (int64_t i = 0; i < 10; ++i) {
|
|
ret = add_string_to_array(str, array);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
}
|
|
ASSERT_EQ(10, array.count());
|
|
for (int64_t i = 0; i < 10; ++i) {
|
|
ASSERT_STREQ("test", array.at(i).ptr());
|
|
}
|
|
}
|
|
void ObSchemaTest::test_serialize_string_array(void)
|
|
{
|
|
const int TEST_ELEMENTS = 2;
|
|
char buf1[BUF_SIZE];
|
|
char buf2[BUF_SIZE];
|
|
char buf3[BUF_SIZE];
|
|
int64_t pos = 0;
|
|
int64_t buf_len = 0;
|
|
int ret = OB_SUCCESS;
|
|
ObArrayHelper<ObString> array1;
|
|
ObArrayHelper<ObString> array2;
|
|
char str1[BUF_SIZE] = "test1";
|
|
char str2[BUF_SIZE] = "test2";
|
|
int64_t alloc_size = TEST_ELEMENTS * static_cast<int64_t>(sizeof(ObString));
|
|
void *tmp = ob_malloc(alloc_size);
|
|
ASSERT_NE(static_cast<void *>(NULL), tmp);
|
|
array1.init(TEST_ELEMENTS, static_cast<ObString *>(tmp));
|
|
array1.push_back(ObString::make_string(str1));
|
|
array1.push_back(ObString::make_string(str2));
|
|
ret = serialize_string_array(buf1, sizeof(buf1) / sizeof(char), pos, array1);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(2, array1.get_array_size());
|
|
buf_len = pos;
|
|
pos = 0;
|
|
ret = deserialize_string_array(buf1, buf_len, pos, array2);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(2, array1.count());
|
|
ASSERT_EQ(2, array2.count());
|
|
ASSERT_EQ(2, array1.get_array_size());
|
|
ASSERT_EQ(2, array2.get_array_size());
|
|
ASSERT_STREQ(array1.at(0).ptr(), array2.at(0).ptr());
|
|
ASSERT_STREQ(array1.at(1).ptr(), array2.at(1).ptr());
|
|
ob_free(tmp);
|
|
tmp = NULL;
|
|
|
|
ObArrayHelper<ObString> array3;
|
|
ObArrayHelper<ObString> array4;
|
|
tmp = ob_malloc(alloc_size);
|
|
ASSERT_NE(static_cast<void *>(NULL), tmp);
|
|
array3.init(TEST_ELEMENTS, static_cast<ObString *>(tmp));
|
|
array3.push_back(ObString::make_string(str1));
|
|
ASSERT_EQ(1, array3.count());
|
|
pos = 0;
|
|
ret = serialize_string_array(buf2, sizeof(buf2) / sizeof(char), pos, array3);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
buf_len = pos;
|
|
pos = 0;
|
|
ret = deserialize_string_array(buf2, buf_len, pos, array4);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(1, array3.count());
|
|
ASSERT_EQ(1, array4.count());
|
|
ASSERT_STREQ(array3.at(0).ptr(), array4.at(0).ptr());
|
|
ob_free(tmp);
|
|
tmp = NULL;
|
|
|
|
ObArrayHelper<ObString> array5;
|
|
ObArrayHelper<ObString> array6;
|
|
pos = 0;
|
|
ret = serialize_string_array(buf3, sizeof(buf3) / sizeof(char), pos, array5);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
buf_len = pos;
|
|
pos = 0;
|
|
ret = deserialize_string_array(buf3, buf_len, pos, array6);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(0, array5.count());
|
|
ASSERT_EQ(0, array6.count());
|
|
}
|
|
|
|
void ObSchemaTest::test_string_array_serialize_size(void)
|
|
{
|
|
const int TEST_ELEMENTS = 2;
|
|
ObArrayHelper<ObString> array;
|
|
int64_t expected_serialize_size = 0;
|
|
int64_t calculated_serialize_size = 0;
|
|
int64_t alloc_size = TEST_ELEMENTS * static_cast<int64_t>(sizeof(ObString));
|
|
void *tmp = ob_malloc(alloc_size);
|
|
ASSERT_NE(static_cast<void *>(NULL), tmp);
|
|
array.init(TEST_ELEMENTS, static_cast<ObString *>(tmp));
|
|
expected_serialize_size = serialization::encoded_length_vi64(0);
|
|
calculated_serialize_size = get_string_array_serialize_size(array);
|
|
ASSERT_EQ(expected_serialize_size, calculated_serialize_size);
|
|
|
|
array.push_back(ObString::make_string("test1"));
|
|
expected_serialize_size = serialization::encoded_length_vi64(1);
|
|
expected_serialize_size += array.at(0).get_serialize_size();
|
|
calculated_serialize_size = get_string_array_serialize_size(array);
|
|
ASSERT_EQ(expected_serialize_size, calculated_serialize_size);
|
|
|
|
array.push_back(ObString::make_string("test2"));
|
|
expected_serialize_size = serialization::encoded_length_vi64(2);
|
|
expected_serialize_size += array.at(0).get_serialize_size();
|
|
expected_serialize_size += array.at(1).get_serialize_size();
|
|
calculated_serialize_size = get_string_array_serialize_size(array);
|
|
ASSERT_EQ(expected_serialize_size, calculated_serialize_size);
|
|
ob_free(tmp);
|
|
tmp = NULL;
|
|
}
|
|
void ObSchemaTest::test_reset_string(void)
|
|
{
|
|
ObString str;
|
|
reset_string(str);
|
|
ASSERT_TRUE(str.empty());
|
|
str = ObString("test");
|
|
ASSERT_FALSE(str.empty());
|
|
reset_string(str);
|
|
ASSERT_TRUE(str.empty());
|
|
}
|
|
void ObSchemaTest::test_reset_string_array(void)
|
|
{
|
|
ObArrayHelper<ObString> array;
|
|
int64_t alloc_size = 2 * sizeof(ObString);
|
|
void *buf = ob_malloc(alloc_size);
|
|
reset_string_array(array);
|
|
ASSERT_EQ(0, array.count());
|
|
array.init(2, static_cast<ObString *>(buf), 0);
|
|
array.push_back(ObString("test1"));
|
|
array.push_back(ObString("test2"));
|
|
ASSERT_EQ(2, array.count());
|
|
reset_string_array(array);
|
|
ASSERT_EQ(0, array.count());
|
|
ob_free(buf);
|
|
buf = NULL;
|
|
}
|
|
void test_ob_schema_protected_methods(void)
|
|
{
|
|
ObSchemaTest ost;
|
|
ost.test_deep_copy_str();
|
|
ost.test_deep_copy_obj();
|
|
ost.test_deep_copy_string_array();
|
|
ost.test_add_string_to_array();
|
|
ost.test_serialize_string_array();
|
|
ost.test_string_array_serialize_size();
|
|
ost.test_reset_string();
|
|
ost.test_reset_string_array();
|
|
}
|
|
TEST(ObSchemaStructTest, ob_schema_test)
|
|
{
|
|
test_ob_schema_string_array2str();
|
|
test_ob_schema_str2_string_array();
|
|
test_ob_schema_protected_methods();
|
|
}
|
|
//------test for ObTenantSchema--------//
|
|
TEST(ObSchemaStructTest, ob_tenant_schema_test)
|
|
{
|
|
ObTenantSchema tenant_schema;
|
|
ObArray<ObString> zone;
|
|
zone.push_back(ObString::make_string("zone1"));
|
|
ASSERT_FALSE(tenant_schema.is_valid());
|
|
tenant_schema.set_tenant_id(1);
|
|
tenant_schema.set_schema_version(11);
|
|
tenant_schema.set_tenant_name("charles");
|
|
tenant_schema.set_comment("a tenant");
|
|
tenant_schema.set_zone_list(zone);
|
|
tenant_schema.set_primary_zone(ObString::make_string("zone1"));
|
|
tenant_schema.add_zone(ObString::make_string("zone2"));
|
|
tenant_schema.set_locked(false);
|
|
ASSERT_EQ(1, tenant_schema.get_tenant_id());
|
|
ASSERT_EQ(11, tenant_schema.get_schema_version());
|
|
ASSERT_STREQ("charles", tenant_schema.get_tenant_name());
|
|
ASSERT_STREQ("a tenant", tenant_schema.get_comment());
|
|
ASSERT_STREQ("charles", tenant_schema.get_tenant_name_str().ptr());
|
|
ASSERT_STREQ("zone1", tenant_schema.get_primary_zone().ptr());
|
|
ASSERT_FALSE(tenant_schema.get_locked());
|
|
ASSERT_STREQ("a tenant", tenant_schema.get_comment_str().ptr());
|
|
|
|
ObTenantSchema *new_schema = NULL;
|
|
const int64_t size = tenant_schema.get_convert_size();
|
|
char *buf = static_cast<char *>(ob_malloc(size));
|
|
ObDataBuffer data_buf(buf + sizeof(ObTenantSchema), size - sizeof(ObTenantSchema));
|
|
ASSERT_NE(static_cast<char *>(NULL), buf);
|
|
new_schema = new(buf)ObTenantSchema(&data_buf);
|
|
ASSERT_NE(static_cast<ObTenantSchema *>(NULL), new_schema);
|
|
|
|
*new_schema = tenant_schema;
|
|
ASSERT_EQ(true, new_schema->is_valid());
|
|
ASSERT_TRUE(ObTenantSchema::equal(&tenant_schema, new_schema));
|
|
ASSERT_TRUE(ObTenantSchema::equal_tenant_id(new_schema, 1));
|
|
|
|
ObTenantSchema copy_schema(tenant_schema);
|
|
ASSERT_EQ(true, copy_schema.is_valid());
|
|
ASSERT_TRUE(ObTenantSchema::equal(&tenant_schema, ©_schema));
|
|
ASSERT_TRUE(ObTenantSchema::equal_tenant_id(©_schema, 1));
|
|
ob_free(buf);
|
|
buf = NULL;
|
|
|
|
//test serialize and deserialize
|
|
ObTenantSchema schema(tenant_schema);
|
|
char tmp[BUF_SIZE];
|
|
int64_t buf_len = BUF_SIZE;
|
|
int64_t pos = 0;
|
|
int ret = OB_SUCCESS;
|
|
ret = schema.serialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
buf_len = pos;
|
|
pos = 0;
|
|
ret = schema.deserialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(schema.get_serialize_size(), tenant_schema.get_serialize_size());
|
|
}
|
|
//------test for ObDatabaseSchema------//
|
|
TEST(ObSchemaStructTest, ob_database_schema_test)
|
|
{
|
|
int ret = OB_SUCCESS;
|
|
ObDatabaseSchema database_schema;
|
|
database_schema.set_tenant_id(1);
|
|
database_schema.set_database_id(1);
|
|
database_schema.set_database_name("yyy");
|
|
database_schema.set_comment("oceanbase RD");
|
|
database_schema.add_zone("zone1");
|
|
|
|
ObDatabaseSchema *new_database = NULL;
|
|
const int64_t size = database_schema.get_convert_size();
|
|
char *buf = static_cast<char *>(ob_malloc(size));
|
|
ObDataBuffer data_buf(buf + sizeof(ObDatabaseSchema), size - sizeof(ObDatabaseSchema));
|
|
ASSERT_TRUE(NULL != buf);
|
|
//test construct
|
|
new_database = new(buf)ObDatabaseSchema(&data_buf);
|
|
ASSERT_TRUE(NULL != new_database);
|
|
|
|
//test assign
|
|
*new_database = database_schema;
|
|
ASSERT_EQ(true, new_database->is_valid());
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(new_database->get_tenant_id(), database_schema.get_tenant_id());
|
|
ASSERT_EQ(new_database->get_database_id(), database_schema.get_database_id());
|
|
ASSERT_EQ(new_database->get_database_name_str(), database_schema.get_database_name_str());
|
|
ASSERT_EQ(new_database->get_comment_str(), database_schema.get_comment_str());
|
|
ASSERT_EQ(new_database->get_tenant_database_id(), database_schema.get_tenant_database_id());
|
|
|
|
ObDatabaseSchema copy_schema(database_schema);
|
|
ASSERT_EQ(copy_schema.get_tenant_id(), database_schema.get_tenant_id());
|
|
ASSERT_EQ(copy_schema.get_database_id(), database_schema.get_database_id());
|
|
ASSERT_EQ(copy_schema.get_database_name_str(), database_schema.get_database_name_str());
|
|
ASSERT_EQ(copy_schema.get_comment_str(), database_schema.get_comment_str());
|
|
ASSERT_EQ(copy_schema.get_tenant_database_id(), database_schema.get_tenant_database_id());
|
|
ob_free(buf);
|
|
buf = NULL;
|
|
|
|
//test serialize and deserialize
|
|
ObDatabaseSchema schema(database_schema);
|
|
char tmp[BUF_SIZE];
|
|
int64_t buf_len = BUF_SIZE;
|
|
int64_t pos = 0;
|
|
ret = schema.serialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
buf_len = pos;
|
|
pos = 0;
|
|
ret = schema.deserialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(schema.get_serialize_size(), database_schema.get_serialize_size());
|
|
}
|
|
//--------test for ObTablegroupSchema-------//
|
|
TEST(ObSchemaStructTest, ob_tablegroup_schema_test)
|
|
{
|
|
ObTablegroupSchema tablegroup_schema;
|
|
tablegroup_schema.set_tenant_id(1);
|
|
tablegroup_schema.set_tablegroup_id(1);
|
|
tablegroup_schema.set_tablegroup_name("yyy");
|
|
tablegroup_schema.set_comment("oceanbase RD");
|
|
tablegroup_schema.set_schema_version(ObTimeUtility::current_time());
|
|
|
|
ObTablegroupSchema *new_tablegroup = NULL;
|
|
const int64_t size = tablegroup_schema.get_convert_size();
|
|
char *buf = static_cast<char *>(ob_malloc(size));
|
|
ObDataBuffer data_buf(buf + sizeof(ObTablegroupSchema), size - sizeof(ObTablegroupSchema));
|
|
ASSERT_TRUE(NULL != buf);
|
|
//test construct
|
|
new_tablegroup = new(buf)ObTablegroupSchema(&data_buf);
|
|
ASSERT_TRUE(NULL != new_tablegroup);
|
|
|
|
//test assign()
|
|
*new_tablegroup = tablegroup_schema;
|
|
EXPECT_EQ(true, new_tablegroup->is_valid());
|
|
ASSERT_EQ(new_tablegroup->get_tenant_id(), tablegroup_schema.get_tenant_id());
|
|
ASSERT_EQ(new_tablegroup->get_tablegroup_id(), tablegroup_schema.get_tablegroup_id());
|
|
ASSERT_EQ(new_tablegroup->get_tablegroup_name_str(),
|
|
tablegroup_schema.get_tablegroup_name_str());
|
|
ASSERT_EQ(new_tablegroup->get_comment_str(), tablegroup_schema.get_comment_str());
|
|
ASSERT_EQ(new_tablegroup->get_tenant_tablegroup_id(),
|
|
tablegroup_schema.get_tenant_tablegroup_id());
|
|
|
|
//test copy constructor
|
|
ObTablegroupSchema schema(*new_tablegroup);
|
|
EXPECT_EQ(true, schema.is_valid());
|
|
ASSERT_EQ(new_tablegroup->get_tenant_id(), schema.get_tenant_id());
|
|
ASSERT_EQ(new_tablegroup->get_tablegroup_id(), schema.get_tablegroup_id());
|
|
ASSERT_EQ(new_tablegroup->get_tablegroup_name_str(), schema.get_tablegroup_name_str());
|
|
ASSERT_EQ(new_tablegroup->get_comment_str(), schema.get_comment_str());
|
|
ASSERT_EQ(new_tablegroup->get_tenant_tablegroup_id(), schema.get_tenant_tablegroup_id());
|
|
ob_free(buf);
|
|
buf = NULL;
|
|
|
|
//test serialize and deserialize
|
|
ObTablegroupSchema copy_schema(tablegroup_schema);
|
|
char tmp[BUF_SIZE];
|
|
int64_t buf_len = BUF_SIZE;
|
|
int64_t pos = 0;
|
|
int ret = OB_SUCCESS;
|
|
ret = copy_schema.serialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
buf_len = pos;
|
|
pos = 0;
|
|
ret = copy_schema.deserialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(copy_schema.get_serialize_size(), tablegroup_schema.get_serialize_size());
|
|
}
|
|
//--------test for ObPartitionOption--------//
|
|
TEST(ObSchemaStructTest, ob_partition_option)
|
|
{
|
|
ObPartitionOption partition_option;
|
|
ObPartitionFuncType part_func_type = PARTITION_FUNC_TYPE_KEY;
|
|
ASSERT_TRUE(partition_option.is_valid());
|
|
partition_option.set_part_expr(ObString::make_string("test_ob_partition_option"));
|
|
partition_option.set_part_num(1111);
|
|
partition_option.set_part_func_type(part_func_type);
|
|
ASSERT_STREQ("test_ob_partition_option", partition_option.get_part_func_expr_str().ptr());
|
|
ASSERT_STREQ("test_ob_partition_option", partition_option.get_part_func_expr());
|
|
ASSERT_EQ(1111, partition_option.get_part_num());
|
|
ASSERT_EQ(PARTITION_FUNC_TYPE_KEY, partition_option.get_part_func_type());
|
|
|
|
ObPartitionOption *new_option = NULL;
|
|
const int64_t size = partition_option.get_convert_size();
|
|
char *buf = static_cast<char *>(ob_malloc(size));
|
|
ObDataBuffer data_buf(buf + sizeof(ObPartitionOption), size - sizeof(ObPartitionOption));
|
|
ASSERT_NE(static_cast<char *>(NULL), buf);
|
|
new_option = new(buf)ObPartitionOption(&data_buf);
|
|
ASSERT_NE(static_cast<ObPartitionOption *>(NULL), new_option);
|
|
|
|
*new_option = partition_option;
|
|
ASSERT_TRUE(*new_option == partition_option);
|
|
ASSERT_FALSE(*new_option != partition_option);
|
|
|
|
ObPartitionOption copy_option(partition_option);
|
|
ASSERT_TRUE(*new_option == copy_option);
|
|
ASSERT_TRUE(copy_option == partition_option);
|
|
ob_free(buf);
|
|
buf = NULL;
|
|
|
|
//test serialize and deserialize
|
|
ObPartitionOption option(partition_option);
|
|
char tmp[BUF_SIZE];
|
|
int64_t buf_len = BUF_SIZE;
|
|
int64_t pos = 0;
|
|
int ret = OB_SUCCESS;
|
|
ret = option.serialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
buf_len = pos;
|
|
pos = 0;
|
|
ret = option.deserialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(option.get_serialize_size(), partition_option.get_serialize_size());
|
|
}
|
|
//--------test for ObViewSchema-------//
|
|
TEST(ObSchemaStructTest, ob_view_schema_test)
|
|
{
|
|
ObViewSchema view_schema;
|
|
view_schema.set_view_is_updatable(false);
|
|
view_schema.set_view_definition("abc");
|
|
view_schema.set_view_definition("chenqun");
|
|
|
|
ObViewSchema *new_view = NULL;
|
|
const int64_t size = view_schema.get_convert_size();
|
|
char *buf = (char*)ob_malloc(size);
|
|
ObDataBuffer data_buf(buf + sizeof(ObViewSchema), size - sizeof(ObViewSchema));
|
|
ASSERT_TRUE(NULL != buf);
|
|
//test construct
|
|
new_view = new(buf)ObViewSchema(&data_buf);
|
|
ASSERT_TRUE(NULL != new_view);
|
|
|
|
//test assign()
|
|
*new_view = view_schema;
|
|
EXPECT_EQ(true, new_view->is_valid());
|
|
ASSERT_EQ(new_view->get_view_definition_str(), view_schema.get_view_definition_str());
|
|
ASSERT_EQ(new_view->get_view_is_updatable(), view_schema.get_view_is_updatable());
|
|
|
|
//test copy constructor
|
|
ObViewSchema copy_schema(view_schema);
|
|
EXPECT_EQ(true, copy_schema.is_valid());
|
|
ASSERT_EQ(copy_schema.get_view_definition_str(), view_schema.get_view_definition_str());
|
|
ASSERT_EQ(copy_schema.get_view_is_updatable(), view_schema.get_view_is_updatable());
|
|
ob_free(buf);
|
|
buf = NULL;
|
|
|
|
//test serialize and deserialize
|
|
ObViewSchema schema(view_schema);
|
|
char tmp[BUF_SIZE];
|
|
int64_t buf_len = BUF_SIZE;
|
|
int64_t pos = 0;
|
|
int ret = OB_SUCCESS;
|
|
ret = schema.serialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
buf_len = pos;
|
|
pos = 0;
|
|
ret = schema.deserialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(schema.get_serialize_size(), view_schema.get_serialize_size());
|
|
}
|
|
//--------test for ObTableSchemaHashWrapper-------//
|
|
TEST(ObSchemaStructTest, ob_table_schema_hash_wrapper_test)
|
|
{
|
|
ObString name_1 = ObString::make_string("name_1");
|
|
ObString name_2 = ObString::make_string("name_2");
|
|
uint64_t tenant_id_1 = 1;
|
|
uint64_t tenant_id_2 = 2;
|
|
uint64_t database_id_1 = 1;
|
|
uint64_t database_id_2 = 2;
|
|
ObTableSchemaHashWrapper tmp;
|
|
ObNameCaseMode mode = OB_ORIGIN_AND_INSENSITIVE;
|
|
ObTableSchemaHashWrapper a(tenant_id_1, database_id_1, mode, name_1);
|
|
ObTableSchemaHashWrapper b(tenant_id_2, database_id_2, mode, name_2);
|
|
ASSERT_NE(a.get_tenant_id(), b.get_tenant_id());
|
|
ASSERT_NE(a.get_database_id(), b.get_database_id());
|
|
ASSERT_NE(a.get_table_name(), b.get_table_name());
|
|
ASSERT_NE(a.hash(), b.hash());
|
|
ASSERT_FALSE(a == b);
|
|
}
|
|
//--------test for ObDatabaseSchemaHashWrapper-------//
|
|
TEST(ObSchemaStructTest, ob_database_schema_hash_wrapper_test)
|
|
{
|
|
ObString name_1 = ObString::make_string("name_1");
|
|
ObString name_2 = ObString::make_string("name_2");
|
|
uint64_t tenant_id_1 = 1;
|
|
uint64_t tenant_id_2 = 2;
|
|
ObDatabaseSchemaHashWrapper tmp;
|
|
ObNameCaseMode mode = OB_ORIGIN_AND_INSENSITIVE;
|
|
ObDatabaseSchemaHashWrapper a(tenant_id_1, mode, name_1);
|
|
ObDatabaseSchemaHashWrapper b(tenant_id_2, mode, name_2);
|
|
ASSERT_NE(a.get_tenant_id(), b.get_tenant_id());
|
|
ASSERT_NE(a.get_database_name(), b.get_database_name());
|
|
ASSERT_NE(a.hash(), b.hash());
|
|
ASSERT_FALSE(a == b);
|
|
}
|
|
//--------test for ObTablegroupSchemaHashWrapper-------//
|
|
TEST(ObSchemaStructTest, ob_tablegroup_schema_hash_wrapper_test)
|
|
{
|
|
ObString name_1 = ObString::make_string("name_1");
|
|
ObString name_2 = ObString::make_string("name_2");
|
|
uint64_t tenant_id_1 = 1;
|
|
uint64_t tenant_id_2 = 2;
|
|
ObTablegroupSchemaHashWrapper tmp;
|
|
ObTablegroupSchemaHashWrapper a(tenant_id_1, name_1);
|
|
ObTablegroupSchemaHashWrapper b(tenant_id_2, name_2);
|
|
ASSERT_NE(a.get_tenant_id(), b.get_tenant_id());
|
|
ASSERT_NE(a.get_tablegroup_name(), b.get_tablegroup_name());
|
|
ASSERT_NE(a.hash(), b.hash());
|
|
ASSERT_FALSE(a == b);
|
|
}
|
|
//--------test for ObTenantUserId----------//
|
|
TEST(ObSchemaStructTest, ob_tenant_user_id)
|
|
{
|
|
ObTenantUserId a;
|
|
ASSERT_FALSE(a.is_valid());
|
|
ObTenantUserId b(1, 1);
|
|
ObTenantUserId c(1, 2);
|
|
ObTenantUserId d(2, 1);
|
|
ObTenantUserId e(2, 1);
|
|
ObTenantUserId f = c;
|
|
ASSERT_TRUE(b.is_valid());
|
|
ASSERT_TRUE(c.is_valid());
|
|
ASSERT_TRUE(d.is_valid());
|
|
ASSERT_TRUE(e.is_valid());
|
|
ASSERT_TRUE(d == e);
|
|
ASSERT_TRUE(b < c);
|
|
ASSERT_TRUE(b < d);
|
|
ASSERT_FALSE(d < e);
|
|
ASSERT_TRUE(c < d);
|
|
ASSERT_TRUE(c == f);
|
|
ASSERT_EQ(d.hash(), e.hash());
|
|
ASSERT_TRUE(b != c);
|
|
ASSERT_FALSE(d != e);
|
|
}
|
|
//--------test for ObPriv--------------//
|
|
TEST(ObSchemaStructTest, ob_priv)
|
|
{
|
|
ObPriv op;
|
|
ASSERT_FALSE(op.is_valid());
|
|
op.set_tenant_id(1);
|
|
op.set_user_id(1);
|
|
op.set_schema_version(11);
|
|
op.set_priv(1);
|
|
op.set_priv_set(1111);
|
|
ASSERT_TRUE(op.is_valid());
|
|
ASSERT_EQ(1, op.get_tenant_id());
|
|
ASSERT_EQ(1, op.get_user_id());
|
|
ASSERT_EQ(1111, op.get_priv_set());
|
|
|
|
ObPriv copy_op = op;
|
|
ObTenantUserId tuid1(2, 2);
|
|
ObTenantUserId tuid2(1, 1);
|
|
ASSERT_TRUE(ObPriv::cmp_tenant_user_id(&op, tuid1));
|
|
ASSERT_TRUE(ObPriv::equal_tenant_user_id(&op, tuid2));
|
|
ASSERT_TRUE(ObPriv::cmp_tenant_id(&op, 2));
|
|
}
|
|
//--------test ObUserInfoHashWrapper----------//
|
|
TEST(ObSchemaStructTest, ob_user_info_hash_wrapper)
|
|
{
|
|
ObString name_1 = ObString::make_string("name_1");
|
|
ObString name_2 = ObString::make_string("name_2");
|
|
uint64_t tenant_id_1 = 1;
|
|
uint64_t tenant_id_2 = 2;
|
|
ObUserInfoHashWrapper tmp;
|
|
ObUserInfoHashWrapper a(tenant_id_1, name_1);
|
|
ObUserInfoHashWrapper b(tenant_id_2, name_2);
|
|
ASSERT_NE(a.get_tenant_id(), b.get_tenant_id());
|
|
ASSERT_NE(a.get_user_name(), b.get_user_name());
|
|
ASSERT_NE(a.hash(), b.hash());
|
|
ASSERT_FALSE(a == b);
|
|
}
|
|
//---------test ObUserInfo-----------//
|
|
TEST(ObSchemaStructTest, ob_user_info)
|
|
{
|
|
ObUserInfo info;
|
|
ASSERT_FALSE(info.is_valid());
|
|
info.set_user_name("charles");
|
|
ASSERT_STREQ("charles", info.get_user_name());
|
|
info.set_user_name(ObString::make_string("charles2"));
|
|
ASSERT_STREQ("charles2", info.get_user_name_str().ptr());
|
|
info.set_host("host1");
|
|
ASSERT_STREQ("host1", info.get_host());
|
|
info.set_host(ObString::make_string("host2"));
|
|
ASSERT_STREQ("host2", info.get_host_str().ptr());
|
|
info.set_passwd("passwd1");
|
|
ASSERT_STREQ("passwd1", info.get_passwd());
|
|
info.set_passwd(ObString::make_string("passwd2"));
|
|
ASSERT_STREQ("passwd2", info.get_passwd_str().ptr());
|
|
info.set_info("info1");
|
|
ASSERT_STREQ("info1", info.get_info());
|
|
info.set_info(ObString::make_string("info2"));
|
|
ASSERT_STREQ("info2", info.get_info_str().ptr());
|
|
info.set_is_locked(true);
|
|
ASSERT_TRUE(info.get_is_locked());
|
|
|
|
ObUserInfo *new_info = NULL;
|
|
const int64_t size = info.get_convert_size();
|
|
char *buf = static_cast<char *>(ob_malloc(size));
|
|
ObDataBuffer data_buf(buf + sizeof(ObUserInfo), size - sizeof(ObUserInfo));
|
|
ASSERT_NE(static_cast<char *>(NULL), buf);
|
|
new_info = new(buf)ObUserInfo(&data_buf);
|
|
ASSERT_NE(static_cast<ObUserInfo *>(NULL), new_info);
|
|
|
|
*new_info = info;
|
|
ASSERT_TRUE(ObUserInfo::equal(&info, new_info));
|
|
ASSERT_FALSE(ObUserInfo::cmp(&info, new_info));
|
|
|
|
ObUserInfo copy_info(info);
|
|
ASSERT_TRUE(ObUserInfo::equal(&info, new_info));
|
|
ASSERT_FALSE(ObUserInfo::cmp(&info, new_info));
|
|
ob_free(buf);
|
|
buf = NULL;
|
|
|
|
//test serialize and deserialize
|
|
ObUserInfo serialize_info(info);
|
|
char tmp[BUF_SIZE];
|
|
int64_t buf_len = BUF_SIZE;
|
|
int64_t pos = 0;
|
|
int ret = OB_SUCCESS;
|
|
ret = serialize_info.serialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
buf_len = pos;
|
|
pos = 0;
|
|
ret = serialize_info.deserialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(serialize_info.get_serialize_size(), info.get_serialize_size());
|
|
}
|
|
//---------test for ObDBPrivSortKey------------//
|
|
TEST(ObSchemaStructTest, ob_db_priv_sort_key)
|
|
{
|
|
ObDBPrivSortKey key;
|
|
key.tenant_id_ = 1;
|
|
key.user_id_ = 1;
|
|
ObDBPrivSortKey new_key(1, 1, 0);
|
|
ASSERT_EQ(key, new_key);
|
|
ASSERT_FALSE(key != new_key);
|
|
ASSERT_FALSE(key < new_key);
|
|
}
|
|
//----------test for ObOriginalDBKey------------//
|
|
TEST(ObSchemaStructTest, ob_original_db_key)
|
|
{
|
|
ObOriginalDBKey key;
|
|
ASSERT_FALSE(key.is_valid());
|
|
key.tenant_id_ = 1;
|
|
key.user_id_ = 1;
|
|
key.db_ = ObString::make_string("database");
|
|
ObOriginalDBKey new_key(1, 1, ObString::make_string("database"));
|
|
ASSERT_EQ(key, new_key);
|
|
ASSERT_FALSE(key != new_key);
|
|
ASSERT_FALSE(key < new_key);
|
|
ASSERT_EQ(key.hash(), new_key.hash());
|
|
}
|
|
//---------test for ObDBPriv-----------//
|
|
TEST(ObSchemaStructTest, ob_db_priv)
|
|
{
|
|
ObDBPriv priv;
|
|
ASSERT_FALSE(priv.is_valid());
|
|
priv.set_database_name("database");
|
|
ASSERT_STREQ("database", priv.get_database_name());
|
|
priv.set_database_name(ObString::make_string("database2"));
|
|
ASSERT_STREQ("database2", priv.get_database_name_str().ptr());
|
|
priv.set_sort(1);
|
|
ASSERT_EQ(1, priv.get_sort());
|
|
|
|
ObDBPriv *new_priv = NULL;
|
|
const int64_t size = priv.get_convert_size();
|
|
char *buf = static_cast<char *>(ob_malloc(size));
|
|
ObDataBuffer data_buf(buf + sizeof(ObDBPriv), size - sizeof(ObDBPriv));
|
|
ASSERT_NE(static_cast<char *>(NULL), buf);
|
|
new_priv = new(buf)ObDBPriv(&data_buf);
|
|
ASSERT_NE(static_cast<ObDBPriv *>(NULL), new_priv);
|
|
|
|
*new_priv = priv;
|
|
ASSERT_FALSE(ObDBPriv::cmp(&priv, new_priv));
|
|
ASSERT_FALSE(ObDBPriv::cmp_sort_key(new_priv, priv.get_sort_key()));
|
|
ASSERT_TRUE(ObDBPriv::equal(&priv, new_priv));
|
|
priv.reset();
|
|
ASSERT_FALSE(ObDBPriv::cmp(&priv, new_priv));
|
|
ob_free(buf);
|
|
buf = NULL;
|
|
|
|
//test serialize and deserialize
|
|
ObDBPriv copy_priv(priv);
|
|
char tmp[BUF_SIZE];
|
|
int64_t buf_len = BUF_SIZE;
|
|
int64_t pos = 0;
|
|
int ret = OB_SUCCESS;
|
|
ret = copy_priv.serialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
buf_len = pos;
|
|
pos = 0;
|
|
ret = copy_priv.deserialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(copy_priv.get_serialize_size(), priv.get_serialize_size());
|
|
}
|
|
//---------test for ObTablePrivDBKey----------//
|
|
TEST(ObSchemaStructTest, ob_table_priv_db_key)
|
|
{
|
|
ObTablePrivDBKey key1;
|
|
ObTablePrivDBKey key2(1, 1, ObString::make_string("test"));
|
|
ASSERT_NE(key1, key2);
|
|
key1.tenant_id_ = 1;
|
|
key1.user_id_ = 1;
|
|
key1.db_ = ObString::make_string("test");
|
|
ASSERT_EQ(key1, key2);
|
|
ASSERT_FALSE(key1 < key2);
|
|
}
|
|
//--------test for ObTablePrivSortKey--------//
|
|
TEST(ObSchemaStructTest, ob_table_priv_sort_key)
|
|
{
|
|
ObTablePrivSortKey key1;
|
|
ObTablePrivSortKey key2(1, 1, ObString("database"), ObString("table"));
|
|
ASSERT_FALSE(key1.is_valid());
|
|
ASSERT_TRUE(key2.is_valid());
|
|
ASSERT_NE(key1, key2);
|
|
ASSERT_NE(key1.hash(), key2.hash());
|
|
key1.tenant_id_ = 1;
|
|
key1.user_id_ = 1;
|
|
key1.db_ = ObString::make_string("database");
|
|
key1.table_ = ObString::make_string("table");
|
|
ASSERT_EQ(key1, key2);
|
|
ASSERT_FALSE(key1 < key2);
|
|
ASSERT_EQ(key1.hash(), key2.hash());
|
|
}
|
|
//---------test for ObTablePriv----------//
|
|
TEST(ObSchemaStructTest, ob_table_priv)
|
|
{
|
|
ObTablePriv priv;
|
|
ASSERT_FALSE(priv.is_valid());
|
|
priv.set_database_name("database1");
|
|
ASSERT_STREQ("database1", priv.get_database_name());
|
|
priv.set_database_name(ObString("database2"));
|
|
ASSERT_STREQ("database2", priv.get_database_name_str().ptr());
|
|
priv.set_table_name("table1");
|
|
ASSERT_STREQ("table1", priv.get_table_name());
|
|
priv.set_table_name(ObString("table2"));
|
|
ASSERT_STREQ("table2", priv.get_table_name_str().ptr());
|
|
|
|
ObTablePriv *new_priv = NULL;
|
|
const int64_t size = priv.get_convert_size();
|
|
char *buf = static_cast<char *>(ob_malloc(size));
|
|
ObDataBuffer data_buf(buf + sizeof(ObTablePriv), size - sizeof(ObTablePriv));
|
|
ASSERT_NE(static_cast<char *>(NULL), buf);
|
|
new_priv = new(buf)ObTablePriv(&data_buf);
|
|
ASSERT_NE(static_cast<ObTablePriv *>(NULL), new_priv);
|
|
|
|
*new_priv = priv;
|
|
ASSERT_FALSE(ObTablePriv::cmp(&priv, new_priv));
|
|
ASSERT_FALSE(ObTablePriv::cmp_sort_key(new_priv, priv.get_sort_key()));
|
|
ASSERT_TRUE(ObTablePriv::equal(&priv, new_priv));
|
|
ASSERT_FALSE(ObTablePriv::cmp_db_key(new_priv, priv.get_db_key()));
|
|
priv.reset();
|
|
ASSERT_FALSE(priv.is_valid());
|
|
ob_free(buf);
|
|
buf = NULL;
|
|
|
|
//test serialize and deserialize
|
|
ObTablePriv copy_priv(priv);
|
|
char tmp[BUF_SIZE];
|
|
int64_t buf_len = BUF_SIZE;
|
|
int64_t pos = 0;
|
|
int ret = OB_SUCCESS;
|
|
ret = copy_priv.serialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
buf_len = pos;
|
|
pos = 0;
|
|
ret = copy_priv.deserialize(tmp, buf_len, pos);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(copy_priv.get_serialize_size(), priv.get_serialize_size());
|
|
}
|
|
//---------test for ob_priv_level_str---------//
|
|
TEST(ObSchemaStructTest, ob_priv_level_str)
|
|
{
|
|
ASSERT_STREQ("Unknown", ob_priv_level_str(OB_PRIV_INVALID_LEVEL));
|
|
ASSERT_STREQ("USER_LEVEL", ob_priv_level_str(OB_PRIV_USER_LEVEL));
|
|
ASSERT_STREQ("DB_LEVEL", ob_priv_level_str(OB_PRIV_DB_LEVEL));
|
|
ASSERT_STREQ("TABLE_LEVEL", ob_priv_level_str(OB_PRIV_TABLE_LEVEL));
|
|
ASSERT_STREQ("DB_ACCESS_LEVEL", ob_priv_level_str(OB_PRIV_DB_ACCESS_LEVEL));
|
|
ASSERT_STREQ("Unknown", ob_priv_level_str(OB_PRIV_MAX_LEVEL));
|
|
}
|
|
//----------test for ObNeedPriv-----------//
|
|
TEST(ObSchemaStructTest, ob_need_priv)
|
|
{
|
|
int ret = OB_SUCCESS;
|
|
ObNeedPriv priv1;
|
|
ObNeedPriv priv2;
|
|
void *data = ob_malloc(BUF_SIZE);
|
|
memset(data, 0, BUF_SIZE);
|
|
ObDataBuffer buf(static_cast<char *>(data), BUF_SIZE);
|
|
priv1.db_ = ObString::make_string("database");
|
|
priv1.priv_level_ = OB_PRIV_DB_LEVEL;
|
|
ret = priv2.deep_copy(priv1, buf);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_STREQ(priv1.db_.ptr(), priv2.db_.ptr());
|
|
ASSERT_NE(priv1.db_.ptr(), priv2.db_.ptr());
|
|
ob_free(data);
|
|
data = NULL;
|
|
}
|
|
//--------test for ObStmtNeedPrivs----------//
|
|
TEST(ObSchemaStructTest, ob_stmt_need_privs)
|
|
{
|
|
ObStmtNeedPrivs privs1;
|
|
ObStmtNeedPrivs privs2;
|
|
ObNeedPriv priv;
|
|
void *data = ob_malloc(BUF_SIZE);
|
|
ObDataBuffer buf(static_cast<char *>(data), BUF_SIZE);
|
|
ASSERT_EQ(0, privs1.need_privs_.count());
|
|
ASSERT_EQ(0, privs2.need_privs_.count());
|
|
privs1.need_privs_.push_back(priv);
|
|
privs1.need_privs_.push_back(priv);
|
|
privs2.deep_copy(privs1, buf);
|
|
ASSERT_EQ(privs1.need_privs_.count(), privs2.need_privs_.count());
|
|
privs1.reset();
|
|
ASSERT_EQ(0, privs1.need_privs_.count());
|
|
ob_free(data);
|
|
data = NULL;
|
|
}
|
|
//--------test for ObSessionPrivInfo--------//
|
|
TEST(ObSchemaStructTest, ob_session_priv_info)
|
|
{
|
|
ObSessionPrivInfo info1;
|
|
ObSessionPrivInfo info2(1, 1, ObString("test"), 1111, 11);
|
|
ASSERT_FALSE(info1.is_valid());
|
|
ASSERT_TRUE(info2.is_valid());
|
|
}
|
|
//--------test for ObUserLoginInfo--------//
|
|
TEST(ObSchemaStructTest, ob_user_login_info)
|
|
{
|
|
ObUserLoginInfo info1;
|
|
ObString tenant("charles");
|
|
ObString user("ccc");
|
|
ObString passwd("word");
|
|
ObString db("db_test");
|
|
ObUserLoginInfo info2(tenant, user, passwd, db);
|
|
info1.tenant_name_ = tenant;
|
|
info1.user_name_ = user;
|
|
info1.passwd_ = passwd;
|
|
info1.db_ = db;
|
|
ASSERT_EQ(info1.tenant_name_.ptr(), info2.tenant_name_.ptr());
|
|
ASSERT_EQ(info1.user_name_.ptr(), info2.user_name_.ptr());
|
|
ASSERT_EQ(info1.passwd_.ptr(), info2.passwd_.ptr());
|
|
ASSERT_EQ(info1.db_.ptr(), info2.db_.ptr());
|
|
}
|
|
#endif
|
|
|
|
#if 0
|
|
TEST(ObTablePartitionKeyIter, partition_key_iter)
|
|
{
|
|
const uint64_t table_id = 1;
|
|
const int64_t part_num = 3;
|
|
const int64_t subpart_num = 5;
|
|
//PARTITION LEVEL TWO
|
|
ObTablePartitionKeyIter key_iter(table_id, part_num, subpart_num, PARTITION_LEVEL_TWO);
|
|
|
|
ASSERT_EQ(part_num * subpart_num, key_iter.get_partition_cnt());
|
|
int ret = OB_SUCCESS;
|
|
for (int64_t i = 0; OB_SUCC(ret) && i < part_num * subpart_num; ++i) {
|
|
int64_t part_idx = i / subpart_num;
|
|
int64_t subpart_idx = i % subpart_num;
|
|
ObPartitionKey pkey;
|
|
if (OB_FAIL(key_iter.next_partition_key(pkey))) {
|
|
} else {
|
|
int64_t partition_id = pkey.get_partition_id();
|
|
ASSERT_EQ(table_id, pkey.get_table_id());
|
|
ASSERT_EQ(part_idx, extract_part_idx(partition_id));
|
|
ASSERT_EQ(subpart_idx, extract_subpart_idx(partition_id));
|
|
}
|
|
}
|
|
//Partition level one
|
|
ObTablePartitionKeyIter key_iter_one(table_id, part_num, 0, PARTITION_LEVEL_ONE);
|
|
ASSERT_EQ(part_num, key_iter_one.get_partition_cnt());
|
|
for (int64_t i = 0; OB_SUCC(ret) && i < part_num; ++i) {
|
|
ObPartitionKey pkey;
|
|
if (OB_FAIL(key_iter.next_partition_key(pkey))) {
|
|
} else {
|
|
int64_t partition_id = pkey.get_partition_id();
|
|
ASSERT_EQ(i, partition_id);
|
|
ASSERT_EQ(table_id, pkey.get_table_id());
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
#endif
|
|
|
|
TEST(ObTablePartitionKeyIter, partition_key_iter_v2)
|
|
{
|
|
const uint64_t table_id = 1;
|
|
ObTableSchema table;
|
|
|
|
// zero
|
|
table.set_table_id(table_id);
|
|
table.set_part_level(PARTITION_LEVEL_ZERO);
|
|
table.set_partition_num(1);
|
|
|
|
bool check_dropped_schema = false;
|
|
ObTablePartitionKeyIter key_iter(table, check_dropped_schema);
|
|
ASSERT_EQ(1, key_iter.get_partition_cnt());
|
|
ObPartitionKey pkey;
|
|
ASSERT_EQ(OB_SUCCESS, key_iter.next_partition_key_v2(pkey));
|
|
ASSERT_EQ(table_id, pkey.get_table_id());
|
|
ASSERT_EQ(0, pkey.get_partition_id());
|
|
|
|
// level one
|
|
table.reset();
|
|
table.set_table_id(table_id);
|
|
table.set_part_level(PARTITION_LEVEL_ONE);
|
|
table.get_part_option().set_part_func_type(PARTITION_FUNC_TYPE_RANGE);
|
|
table.get_part_option().set_part_num(3);
|
|
ObPartition part;
|
|
part.set_part_id(1);
|
|
ObString part_name("p1");
|
|
table.add_partition(part);
|
|
part.set_part_id(3);
|
|
part_name = ObString("p3");
|
|
part.set_part_name(part_name);
|
|
table.add_partition(part);
|
|
part.set_part_id(5);
|
|
part_name = ObString("p5");
|
|
part.set_part_name(part_name);
|
|
table.add_partition(part);
|
|
|
|
ObTablePartitionKeyIter key_iter_level_one(table, check_dropped_schema);
|
|
ASSERT_EQ(3, key_iter_level_one.get_partition_cnt());
|
|
|
|
ASSERT_EQ(OB_SUCCESS, key_iter_level_one.next_partition_key_v2(pkey));
|
|
ASSERT_EQ(table_id, pkey.get_table_id());
|
|
ASSERT_EQ(1, pkey.get_partition_id());
|
|
|
|
ASSERT_EQ(OB_SUCCESS, key_iter_level_one.next_partition_key_v2(pkey));
|
|
ASSERT_EQ(table_id, pkey.get_table_id());
|
|
ASSERT_EQ(3, pkey.get_partition_id());
|
|
|
|
ASSERT_EQ(OB_SUCCESS, key_iter_level_one.next_partition_key_v2(pkey));
|
|
ASSERT_EQ(table_id, pkey.get_table_id());
|
|
ASSERT_EQ(5, pkey.get_partition_id());
|
|
|
|
// level two
|
|
table.reset();
|
|
table.set_table_id(table_id);
|
|
const int64_t part_num = 2;
|
|
const int64_t subpart_num = 3;
|
|
table.set_part_level(PARTITION_LEVEL_TWO);
|
|
table.get_part_option().set_part_func_type(PARTITION_FUNC_TYPE_RANGE);
|
|
table.get_part_option().set_part_num(part_num);
|
|
table.get_sub_part_option().set_part_func_type(PARTITION_FUNC_TYPE_HASH);
|
|
table.get_sub_part_option().set_part_num(subpart_num);
|
|
|
|
part.set_part_id(1);
|
|
part_name = ObString("p1");
|
|
part.set_part_name(part_name);
|
|
table.add_partition(part);
|
|
part.set_part_id(3);
|
|
part_name = ObString("p3");
|
|
part.set_part_name(part_name);
|
|
table.add_partition(part);
|
|
|
|
ObTablePartitionKeyIter key_iter_level_two(table, check_dropped_schema);
|
|
int64_t part_ids[] = {1, 3};
|
|
int64_t subpart_ids[] = {0, 1, 2};
|
|
ASSERT_EQ(6, key_iter_level_two.get_partition_cnt());
|
|
for (int i = 0; i < 2; ++i) {
|
|
for (int j = 0; j < 3; ++j) {
|
|
ASSERT_EQ(table_id, pkey.get_table_id());
|
|
ASSERT_EQ(OB_SUCCESS, key_iter_level_two.next_partition_key_v2(pkey));
|
|
ASSERT_EQ(common::generate_phy_part_id(part_ids[i], subpart_ids[j]), pkey.get_partition_id());
|
|
}
|
|
}
|
|
}
|
|
|
|
// TEST_F(TestSchemaStruct, hash_map)
|
|
TEST(ObSchemaStructTest, hash_map)
|
|
{
|
|
ObArenaAllocator allocator;
|
|
ColumnHashMap map(allocator);
|
|
int32_t value = 0;
|
|
int ret = map.get(1, value);
|
|
ASSERT_EQ(OB_NOT_INIT, ret);
|
|
ret = map.set(1, 20);
|
|
ASSERT_EQ(OB_NOT_INIT, ret);
|
|
|
|
int64_t bucket_num = 100;
|
|
ret = map.init(bucket_num);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ret = map.init(bucket_num);
|
|
ASSERT_EQ(OB_INIT_TWICE, ret);
|
|
|
|
ret = map.get(1, value);
|
|
ASSERT_EQ(OB_HASH_NOT_EXIST, ret);
|
|
ret = map.set(1, 20);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ret = map.set(1, 30);
|
|
ASSERT_EQ(OB_HASH_EXIST, ret);
|
|
ret = map.get(1, value);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(20, value);
|
|
|
|
for (int64_t i = 1; i < 1000; ++i) {
|
|
ret = map.set(i + 1, 88);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ret = map.get(i + 1, value);
|
|
ASSERT_EQ(OB_SUCCESS, ret);
|
|
ASSERT_EQ(88, value);
|
|
}
|
|
}
|
|
|
|
// TEST_F(TestSchemaStruct, hash_map)
|
|
TEST(ObSchemaStructTest, ObHostnameStuct)
|
|
{
|
|
ObString host_name("192.168.0.0/16");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.1", host_name));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.0", host_name));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.255", host_name));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.-1", host_name));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.-1.1", host_name));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.256.1", host_name));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.256", host_name));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.169.1.1", host_name));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.0.1.1", host_name));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.1", host_name));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("hello", host_name));
|
|
|
|
ObString host_name_ipv6("fe80:90fa:2017:ff00::/56");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff03::0a:02", host_name_ipv6));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff00:00e8:0074:0a:02", host_name_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("fe80:90fa:2017:fe00:00e8:0074:0a:02", host_name_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match(":90fa:2017:fe00:00e8:0074:0a:02", host_name_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff:", host_name_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("::", host_name_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("::1", host_name_ipv6));
|
|
|
|
ObString host_name2("0.0.0.0/0");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.1", host_name2));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.0", host_name2));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.255", host_name2));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.-1", host_name2));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.-1.1", host_name2));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.256.1", host_name2));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.256", host_name2));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.169.1.1", host_name2));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.0.1.1", host_name2));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.1", host_name2));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("hello", host_name2));
|
|
|
|
ObString host_name2_ipv6("::/0");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff03::0a:02", host_name2_ipv6));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff03::", host_name2_ipv6));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("::", host_name2_ipv6));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("::1", host_name2_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.1", host_name2));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match(":2017:ff03::", host_name2_ipv6));
|
|
|
|
ObString host_name3("192.168.1.1/32");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.1", host_name3));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.0", host_name3));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.255", host_name3));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.-1", host_name3));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.-1.1", host_name3));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.256.1", host_name3));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.256", host_name3));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.169.1.1", host_name3));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.0.1.1", host_name3));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.1", host_name3));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("hello", host_name3));
|
|
|
|
ObString host_name4("192.168.11.0/255.255.255.0");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.1", host_name4));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.0", host_name4));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.255", host_name4));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.-1", host_name4));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.256", host_name4));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.1", host_name4));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.10.1", host_name4));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.0.1.1", host_name4));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.1", host_name4));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("hello", host_name4));
|
|
|
|
ObString host_name4_ipv6("fe80:90fa:2017:ff80::/ffff:ffff:ffff:ffff:0:0:0:0");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff80:00e8:ff74:0a:02", host_name4_ipv6));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff80::", host_name4_ipv6));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff80:e8::0a:02", host_name4_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff00:00e8:0074:0a:02", host_name4_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff00::", host_name4_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("::", host_name4_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("::1", host_name4_ipv6));
|
|
|
|
ObString host_name5("0.0.0.0/0.0.0.0");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.1", host_name5));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.0", host_name5));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.255", host_name5));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.-1", host_name5));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.256", host_name5));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.1.1", host_name5));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.10.1", host_name5));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.0.1.1", host_name5));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.1", host_name5));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("hello", host_name5));
|
|
|
|
ObString host_name5_ipv6("::/::");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff00:00e8:0074:0a:02", host_name5_ipv6));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("::" host_name5_ipv6));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("::1", host_name5_ipv6));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("ff:ff:ff:ff:ff:ff:ff:ff", host_name5_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("90fa:2017:ff00:00e8:0074:0a:02", host_name5_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff00:00e8:0074:0a:-1", host_name5_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("fe80:90fa:2017:ff00:00e8:0074:0a:g1", host_name5_ipv6));
|
|
|
|
ObString host_name6("192.168.11.1/255.255.255.255");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.1", host_name6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.0", host_name6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.255", host_name6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.-1", host_name6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.256", host_name6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.1", host_name6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.10.1", host_name6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.0.1.1", host_name6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.1", host_name6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("hello", host_name6));
|
|
|
|
ObString host_name10("192.168.11.1");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("192.168.11.1", host_name10));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.0", host_name10));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.255", host_name10));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.-1", host_name10));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.256", host_name10));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.1.1", host_name10));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.10.1", host_name10));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.0.1.1", host_name10));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.1", host_name10));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("hello", host_name10));
|
|
|
|
ObString host_name10_ipv6("2017::a:2");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("2017:0:0:0:0:0:a:2", host_name10_ipv6));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_ip_match("2017::0a:02", host_name10_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("2017:2::0a:02", host_name10_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("::", host_name10_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("::1", host_name10_ipv6));
|
|
|
|
ObString host_name7("192.168.11.1/33");
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.1", host_name7));
|
|
ObString host_name8("192.168.11.1/-1");
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.1", host_name8));
|
|
ObString host_name9("192.168.11.1/");
|
|
EXPECT_EQ(false, ObHostnameStuct::is_ip_match("192.168.11.1", host_name9));
|
|
|
|
ObString host_name11("192.168.11.%");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("192.168.11.0", host_name11));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("192.168.11.255", host_name11));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("192.168.11.-1", host_name11));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("192.168.11.256", host_name11));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.168.1.1", host_name11));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.168.10.1", host_name11));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.0.1.1", host_name11));
|
|
|
|
ObString host_name11_ipv6("fe80:fe20:ffff:%");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("fe80:fe20:ffff:2014:0506:02:56:80", host_name11_ipv6));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("fe80:fe20:ffff::", host_name11_ipv6));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("fe80:fe20:ffff:2019::", host_name11_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("fe80:fe20:fffe::", host_name11_ipv6));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("fe80:fe20:8fff::2084:92:23:78:ff30", host_name11_ipv6));
|
|
|
|
ObString host_name12("192.168.11._");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_wild_match("192.168.11.0", host_name12));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.168.11.255", host_name12));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.168.11.-1", host_name12));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.168.11.256", host_name12));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.168.1.1", host_name12));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.168.10.1", host_name12));
|
|
EXPECT_EQ(false, ObHostnameStuct::is_wild_match("192.0.1.1", host_name12));
|
|
|
|
int64_t value = 0;
|
|
EXPECT_EQ(OB_SUCCESS, ObHostnameStuct::get_int_value("12", value));
|
|
EXPECT_EQ(12, value);
|
|
EXPECT_EQ(OB_SUCCESS, ObHostnameStuct::get_int_value("-12", value));
|
|
EXPECT_EQ(-12, value);
|
|
EXPECT_EQ(OB_SUCCESS, ObHostnameStuct::get_int_value("0", value));
|
|
EXPECT_EQ(0, value);
|
|
EXPECT_EQ(OB_SUCCESS, ObHostnameStuct::get_int_value("65536", value));
|
|
EXPECT_EQ(65536, value);
|
|
EXPECT_EQ(OB_SUCCESS, ObHostnameStuct::get_int_value("-65536", value));
|
|
EXPECT_EQ(-65536, value);
|
|
EXPECT_EQ(OB_INVALID_DATA, ObHostnameStuct::get_int_value("12sds", value));
|
|
EXPECT_EQ(OB_INVALID_DATA, ObHostnameStuct::get_int_value("12 sddf", value));
|
|
EXPECT_EQ(OB_INVALID_DATA, ObHostnameStuct::get_int_value("++12", value));
|
|
EXPECT_EQ(OB_INVALID_DATA, ObHostnameStuct::get_int_value("--12", value));
|
|
|
|
ObString ip_white_list1("");
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("192.0.1.1", ip_white_list1));
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("%", ip_white_list1));
|
|
|
|
ObString ip_white_list2;
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("192.0.1.1", ip_white_list2));
|
|
|
|
ObString ip_white_list3("%");
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("192.0.1.1", ip_white_list3));
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("192.0.1.-1", ip_white_list3));
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("hello", ip_white_list3));
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("", ip_white_list3));
|
|
|
|
ObString ip_white_list4("192.0.1.0/24");
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("192.0.1.1", ip_white_list4));
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("192.0.1.-1", ip_white_list4));
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("hello", ip_white_list4));
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("", ip_white_list4));
|
|
|
|
ObString ip_white_list5("192.0.1.0/24, %");
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("192.0.1.1", ip_white_list5));
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("192.0.1.-1", ip_white_list5));
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("hello", ip_white_list5));
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("", ip_white_list5));
|
|
|
|
ObString ip_white_list6("192.0.1.0/24,%");
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("192.0.1.1", ip_white_list6));
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("192.0.1.-1", ip_white_list6));
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("hello", ip_white_list6));
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("", ip_white_list6));
|
|
|
|
ObString ip_white_list7(",192.0.1,192.0.1.0/24");
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("192.0.1.1", ip_white_list7));
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("192.0.1.-1", ip_white_list7));
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("hello", ip_white_list7));
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("", ip_white_list7));
|
|
|
|
ObString ip_white_list8("10.125.224.0/255.255.252.0");
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("10.125.224.15", ip_white_list8));
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("10.125.224.5", ip_white_list8));
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("192.0.1.-1", ip_white_list8));
|
|
|
|
ObString ip_white_list9("10.125.224.0/22");
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("10.125.224.15", ip_white_list9));
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("10.125.224.5", ip_white_list9));
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("192.0.1.-1", ip_white_list9));
|
|
|
|
ObString ip_white_list10("255.255.224.0/22");
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.15", ip_white_list10));
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.5", ip_white_list10));
|
|
ASSERT_EQ(false, ObHostnameStuct::is_in_white_list("255.255.255.15", ip_white_list10));
|
|
|
|
ObString ip_white_list11("255.255.224.15");
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.15", ip_white_list11));
|
|
|
|
ObString ip_white_list12("255.255.224.15,255.255.224.14,255.255.224.13,255.255.224.12,255.255.224.11");
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.15", ip_white_list12));
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.14", ip_white_list12));
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.13", ip_white_list12));
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.12", ip_white_list12));
|
|
ASSERT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.11", ip_white_list12));
|
|
|
|
ObString ip_white_list13(" 255.255.224.15, 255.255.224.14, 255.255.224.13, 255.255.224.12");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.15", ip_white_list13));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.14", ip_white_list13));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.13", ip_white_list13));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.12", ip_white_list13));
|
|
|
|
ObString ip_white_list14(" 255.255.224.15/32 , 255.255.224.14/32 , 255.255.224.13/32 , 255.255.224.12/32");
|
|
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.15", ip_white_list14));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.14", ip_white_list14));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.13", ip_white_list14));
|
|
EXPECT_EQ(true, ObHostnameStuct::is_in_white_list("255.255.224.12", ip_white_list14));
|
|
}
|
|
} // end of namespace schema
|
|
} // end of namespace share
|
|
} // end of namespace oceanbase
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
oceanbase::common::ObLogger::get_logger().set_log_level("DEBUG");
|
|
// OB_LOGGER.set_file_name("test_schema.log", true);
|
|
::testing::InitGoogleTest(&argc, argv);
|
|
return RUN_ALL_TESTS();
|
|
}
|