110 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			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();
 | |
| }
 | 
