Files
oceanbase/mittest/mtlenv/test_session_serde.cpp

110 lines
3.2 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 SQL
#include <gtest/gtest.h>
#define private public
#define protected public
#include "observer/ob_server.h"
#include "lib/oblog/ob_log.h"
#include "share/schema/ob_server_schema_service.h"
#include "sql/session/ob_sql_session_info.h"
#include "storage/tx/ob_trans_define.h"
#include "observer/omt/ob_tenant_timezone_mgr.h"
#include "mock_tenant_module_env.h"
using namespace oceanbase::common;
using namespace oceanbase::sql;
using namespace oceanbase::share;
using namespace oceanbase::transaction;
namespace oceanbase
{
namespace sql
{
class TestSessionSerDe : public ::testing::Test
{
public:
static void SetUpTestCase()
{
LOG_INFO("SetUpTestCase");
EXPECT_EQ(OB_SUCCESS, MockTenantModuleEnv::get_instance().init());
}
static void TearDownTestCase()
{
LOG_INFO("TearDownTestCase");
MockTenantModuleEnv::get_instance().destroy();
}
};
static ObTZInfoMap map;
int tz_map_getter(const uint64_t tenant_id,
ObTZMapWrap &timezone_wrap) {
UNUSED(tenant_id);
timezone_wrap.set_tz_map(&map);
return OB_SUCCESS;
}
TEST_F(TestSessionSerDe, tx_desc)
{
common::ObArenaAllocator allocator;
ObSQLSessionInfo session;
ObPhysicalPlan plan;
session.cur_phy_plan_ = &plan;
OBSERVER.init_schema();
OBSERVER.init_tz_info_mgr();
omt::ObTenantTimezoneMgr::get_instance().init(tz_map_getter);
ASSERT_EQ(OB_SUCCESS, ObPreProcessSysVars::init_sys_var());
session.test_init(1, 1, 1, &allocator);
session.load_all_sys_vars_default();
ObTxDesc tx;
tx.tenant_id_ = 1;
ASSERT_EQ(tx.flags_.SHADOW_, false);
ObTxPart p;
p.id_ = 1001;
tx.tx_id_ = ObTransID(100);
tx.state_ = ObTxDesc::State::IDLE;
tx.parts_.push_back(p);
session.get_tx_desc() = &tx;
DEFER(session.get_tx_desc() = NULL);
int ret = OB_SUCCESS;
const int64_t buf_len = 4096;
int64_t pos = 0;
char buf[buf_len];
MEMSET(buf, 0, sizeof(buf));
ret = serialization::encode(buf, buf_len, pos, session);
ASSERT_EQ(OB_SUCCESS, ret);
ObSQLSessionInfo session2;
pos = 0;
ret = serialization::decode(buf, buf_len, pos, session2);
session2.is_inited_ = true;
ASSERT_EQ(OB_SUCCESS, ret);
ObTxDesc *tx2 = session2.get_tx_desc();
ASSERT_EQ(tx2->tx_id_, tx.tx_id_);
ASSERT_EQ(tx2->tx_id_.get_id(), 100);
ASSERT_EQ(tx2->flags_.SHADOW_, true);
ASSERT_EQ(tx2->state_, ObTxDesc::State::IDLE);
ASSERT_EQ(tx2->parts_.count(), 1);
ASSERT_EQ(tx2->parts_[0].id_, tx.parts_[0].id_);
LOG_INFO("x", KP(&session), KP(&session2));
}
}
}
int main(int argc, char **argv)
{
OB_LOGGER.set_log_level("INFO");
OB_LOGGER.set_file_name("test_session_serde.log", true);
::testing::InitGoogleTest(&argc,argv);
return RUN_ALL_TESTS();
}