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

154 lines
3.8 KiB
C++

/**
* Copyright (c) 2021 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#define USING_LOG_PREFIX SHARE
#include <gtest/gtest.h>
#include "lib/utility/ob_print_utils.h"
#include "share/ob_lease_struct.h"
namespace oceanbase
{
namespace share
{
using namespace common;
template <typename T>
void try_reset(T &t)
{
try_reset(t, BoolType<HAS_MEMBER(T, reset)>());
}
template <typename T>
void try_reset(T &t, const TrueType &)
{
t.reset();
}
template <typename T>
void try_reset(T &, const FalseType &)
{
return;
}
class TestLeaseStruct : public ::testing::Test
{
protected:
template <typename T>
T *alloc(void)
{
void *ptr = allocator_.alloc(sizeof(T));
memset(ptr, 0, sizeof(T));
return new(ptr) T();
}
template <typename T>
void check_serialize(const T &t)
{
int64_t buf_size = t.get_serialize_size();
char *buf = (char *)allocator_.alloc(buf_size);
int64_t pos = 0;
ASSERT_EQ(OB_SUCCESS, t.serialize(buf, buf_size, pos));
ASSERT_EQ(buf_size, pos);
T *copy = alloc<T>();
try_reset(*copy);
pos = 0;
ASSERT_EQ(OB_SUCCESS, copy->deserialize(buf, buf_size, pos));
ASSERT_EQ(buf_size, pos);
int cmp = memcmp(&t, copy, sizeof(T));
if (0 != cmp) {
LOG_WARN("copy by serialize and deserialize mismatch with original",
"original", t, "copy", *copy,
"original_hex", PHEX(&t, sizeof(T)), "copy_hex", PHEX(copy, sizeof(T)));
}
ASSERT_EQ(0, cmp);
}
ModuleArena allocator_;
};
TEST_F(TestLeaseStruct, ObServerResourceInfo)
{
ObServerResourceInfo &res = *alloc<ObServerResourceInfo>();
LOG_INFO("to_string", K(res));
res.cpu_ = 1;
res.mem_in_use_ = 2;
res.mem_total_ = 3;
res.disk_in_use_ = 4;
res.disk_total_ = 5;
LOG_INFO("to_string", K(res));
check_serialize(res);
}
TEST_F(TestLeaseStruct, ObLeaseRequest)
{
ObLeaseRequest &req = *alloc<ObLeaseRequest>();
LOG_INFO("to_string", K(req));
req.version_ = 1;
req.zone_ = "test";
req.server_.set_ip_addr("127.0.0.8", 80);
req.inner_port_ = 8080;
strcpy(req.build_version_, "test");
LOG_INFO("to_string", K(req));
check_serialize(req);
}
TEST_F(TestLeaseStruct, ObLeaseResponse)
{
ObLeaseResponse &res = *alloc<ObLeaseResponse>();
LOG_INFO("to_string", K(res));
res.version_ = 1;
res.lease_expire_time_ = ::oceanbase::common::ObTimeUtility::current_time();
res.lease_info_version_ = ::oceanbase::common::ObTimeUtility::current_time() + 1024;
res.frozen_version_ = 1024;
res.schema_version_ = ::oceanbase::common::ObTimeUtility::current_time();
LOG_INFO("to_string", K(res));
check_serialize(res);
}
TEST_F(TestLeaseStruct, ObZoneLeaseInfo)
{
ObZoneLeaseInfo &info = *alloc<ObZoneLeaseInfo>();
LOG_INFO("to_string", K(info));
info.zone_ = "test";
info.privilege_version_ = ::oceanbase::common::ObTimeUtility::current_time();
info.config_version_ = ::oceanbase::common::ObTimeUtility::current_time() + 1024;
info.lease_info_version_ = ::oceanbase::common::ObTimeUtility::current_time() + 1234;
info.broadcast_version_ = 3;
info.last_merged_version_ = 2;
info.suspend_merging_ = true;
LOG_INFO("to_string", K(info));
}
} // end namespace share
} // end namespace oceanbase
int main(int argc, char **argv)
{
oceanbase::common::ObLogger::get_logger().set_log_level("INFO");
OB_LOGGER.set_log_level("INFO");
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}