Files
oceanbase/unittest/share/schema/test_schema_struct.cpp
oceanbase-admin cea7de1475 init push
2021-05-31 22:56:52 +08:00

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, &copy_schema));
ASSERT_TRUE(ObTenantSchema::equal_tenant_id(&copy_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();
}