oceanbase/unittest/clog/test_info_block_handler.cpp
gm 4a92b6d7df reformat source code
according to code styles, 'AccessModifierOffset' should be -2.
2021-06-17 10:40:36 +08:00

191 lines
6.6 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 "clog/ob_info_block_handler.h"
#include <gtest/gtest.h>
#include "share/ob_define.h"
#include "common/ob_partition_key.h"
namespace oceanbase {
using namespace common;
using namespace clog;
namespace unittest {
class ObInfoBlockHandlerTest : public testing::Test {
public:
static void SetUpTestCase()
{
EXPECT_EQ(OB_SUCCESS, commit_handler_.init());
EXPECT_EQ(OB_SUCCESS, index_handler_.init());
}
static void TearDownTestCase()
{
commit_handler_.destroy();
index_handler_.destroy();
}
static ObCommitInfoBlockHandler commit_handler_;
static ObIndexInfoBlockHandler index_handler_;
};
ObCommitInfoBlockHandler ObInfoBlockHandlerTest::commit_handler_;
ObIndexInfoBlockHandler ObInfoBlockHandlerTest::index_handler_;
TEST_F(ObInfoBlockHandlerTest, commit_info_block_handler)
{
const int64_t MAX_BUF_LEN = 512 * 1024;
char buf[MAX_BUF_LEN];
common::ObPartitionKey key1(1099511627777, 1, 1);
common::ObPartitionKey key2(1099511627778, 1, 1);
common::ObPartitionKey key3(1099511627779, 1, 1);
commit_handler_.update_info(key1, 10, 100);
commit_handler_.update_info(key1, 11, 110);
commit_handler_.update_info(key1, 100, 1000);
commit_handler_.update_info(key2, 20, 200);
commit_handler_.update_info(key2, 21, 210);
commit_handler_.update_info(key2, 200, 2000);
commit_handler_.update_info(key3, 30, 300);
commit_handler_.update_info(key3, 31, 310);
commit_handler_.update_info(key3, 300, 3000);
EXPECT_EQ(3, commit_handler_.get_entry_cnt());
uint64_t max_log_id = OB_INVALID_ID;
EXPECT_EQ(OB_SUCCESS, commit_handler_.get_max_log_id(key1, max_log_id));
EXPECT_EQ(100, max_log_id);
int64_t max_submit_timestamp = 0;
EXPECT_EQ(OB_SUCCESS, commit_handler_.get_max_submit_timestamp(max_submit_timestamp));
EXPECT_EQ(3000, max_submit_timestamp);
int64_t pos = 0;
EXPECT_EQ(OB_SUCCESS, commit_handler_.build_info_block(buf, MAX_BUF_LEN, pos));
EXPECT_NE(0, pos);
ObCommitInfoBlockHandler tmp_handler;
EXPECT_EQ(OB_SUCCESS, tmp_handler.init());
pos = 0;
EXPECT_EQ(OB_SUCCESS, tmp_handler.resolve_info_block(buf, MAX_BUF_LEN, pos));
EXPECT_NE(0, pos);
EXPECT_EQ(3, tmp_handler.get_entry_cnt());
EXPECT_EQ(OB_SUCCESS, tmp_handler.get_max_log_id(key1, max_log_id));
EXPECT_EQ(100, max_log_id);
EXPECT_EQ(OB_SUCCESS, tmp_handler.get_max_log_id(key2, max_log_id));
EXPECT_EQ(200, max_log_id);
EXPECT_EQ(OB_SUCCESS, tmp_handler.get_max_log_id(key3, max_log_id));
EXPECT_EQ(300, max_log_id);
max_submit_timestamp = 0;
EXPECT_EQ(OB_SUCCESS, tmp_handler.get_max_submit_timestamp(max_submit_timestamp));
EXPECT_EQ(3000, max_submit_timestamp);
tmp_handler.destroy();
}
TEST_F(ObInfoBlockHandlerTest, index_info_block_handler)
{
const int64_t MAX_BUF_LEN = 512 * 1024;
char buf[MAX_BUF_LEN];
common::ObPartitionKey key1(1099511627777, 1, 1);
common::ObPartitionKey key2(1099511627778, 1, 1);
common::ObPartitionKey key3(1099511627779, 1, 1);
common::ObPartitionKey key4(1099511627780, 1, 1);
uint64_t min_log_id = OB_INVALID_ID;
uint64_t max_log_id = OB_INVALID_ID;
index_handler_.update_info(key1, 10, 100);
index_handler_.update_info(key1, 11, 110);
index_handler_.update_info(key1, 100, 1000);
index_handler_.update_info(key2, 20, 200);
index_handler_.update_info(key2, 21, 210);
index_handler_.update_info(key2, 200, 2000);
index_handler_.update_info(key3, 30, 300);
index_handler_.update_info(key3, 31, 310);
index_handler_.update_info(key3, 300, 3000);
EXPECT_EQ(3, index_handler_.get_entry_cnt());
EXPECT_EQ(OB_SUCCESS, index_handler_.get_max_log_id(key1, max_log_id));
EXPECT_EQ(100, max_log_id);
EXPECT_EQ(OB_SUCCESS, index_handler_.get_min_log_id(key1, min_log_id));
EXPECT_EQ(10, min_log_id);
EXPECT_EQ(OB_SUCCESS, index_handler_.get_min_log_id(key2, min_log_id));
EXPECT_EQ(20, min_log_id);
EXPECT_EQ(OB_SUCCESS, index_handler_.get_min_log_id(key3, min_log_id));
EXPECT_EQ(30, min_log_id);
EXPECT_EQ(OB_ENTRY_NOT_EXIST, index_handler_.get_min_log_id(key4, min_log_id));
int64_t max_submit_timestamp = 0;
EXPECT_EQ(OB_SUCCESS, index_handler_.get_max_submit_timestamp(max_submit_timestamp));
EXPECT_EQ(3000, max_submit_timestamp);
ObIndexInfoBlockHandler::MinLogIdInfo min_log_id_info;
EXPECT_EQ(OB_SUCCESS, index_handler_.get_all_min_log_id_info(min_log_id_info));
EXPECT_EQ(3, min_log_id_info.size());
EXPECT_EQ(OB_SUCCESS, min_log_id_info.get(key1, min_log_id));
EXPECT_EQ(10, min_log_id);
EXPECT_EQ(OB_SUCCESS, min_log_id_info.get(key2, min_log_id));
EXPECT_EQ(20, min_log_id);
EXPECT_EQ(OB_SUCCESS, min_log_id_info.get(key3, min_log_id));
EXPECT_EQ(30, min_log_id);
EXPECT_EQ(OB_ENTRY_NOT_EXIST, min_log_id_info.get(key4, min_log_id));
int64_t pos = 0;
EXPECT_EQ(OB_SUCCESS, index_handler_.build_info_block(buf, MAX_BUF_LEN, pos));
EXPECT_NE(0, pos);
ObIndexInfoBlockHandler tmp_handler;
EXPECT_EQ(OB_SUCCESS, tmp_handler.init());
pos = 0;
EXPECT_EQ(OB_SUCCESS, tmp_handler.resolve_info_block(buf, MAX_BUF_LEN, pos));
EXPECT_NE(0, pos);
EXPECT_EQ(3, tmp_handler.get_entry_cnt());
EXPECT_EQ(OB_SUCCESS, tmp_handler.get_max_log_id(key1, max_log_id));
EXPECT_EQ(100, max_log_id);
EXPECT_EQ(OB_SUCCESS, tmp_handler.get_max_log_id(key2, max_log_id));
EXPECT_EQ(200, max_log_id);
EXPECT_EQ(OB_SUCCESS, tmp_handler.get_max_log_id(key3, max_log_id));
EXPECT_EQ(300, max_log_id);
EXPECT_EQ(OB_SUCCESS, tmp_handler.get_min_log_id(key1, min_log_id));
EXPECT_EQ(10, min_log_id);
EXPECT_EQ(OB_SUCCESS, tmp_handler.get_min_log_id(key2, min_log_id));
EXPECT_EQ(20, min_log_id);
EXPECT_EQ(OB_SUCCESS, tmp_handler.get_min_log_id(key3, min_log_id));
EXPECT_EQ(30, min_log_id);
EXPECT_EQ(OB_ENTRY_NOT_EXIST, tmp_handler.get_min_log_id(key4, min_log_id));
max_submit_timestamp = 0;
EXPECT_EQ(OB_SUCCESS, tmp_handler.get_max_submit_timestamp(max_submit_timestamp));
EXPECT_EQ(3000, max_submit_timestamp);
}
} // namespace unittest
} // namespace oceanbase
int main(int argc, char** argv)
{
OB_LOGGER.set_file_name("test_info_block_handler.log", true);
OB_LOGGER.set_log_level("TRACE");
CLOG_LOG(INFO, "begin unittest: test_info_block_handler");
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}