145 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			4.1 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 <cstdint>
 | |
| #include <gtest/gtest.h>
 | |
| #include "cluster/simple_server/env/ob_simple_cluster_test_base.h"
 | |
| #include "lib/mysqlclient/ob_isql_client.h"
 | |
| #include "lib/net/ob_addr.h"
 | |
| #include "lib/ob_define.h"
 | |
| #include "lib/string/ob_string.h"
 | |
| #include "lib/time/ob_time_utility.h"
 | |
| #include "observer/ob_server_struct.h"
 | |
| #include "share/backup/ob_backup_struct.h"
 | |
| #include "share/restore/ob_log_archive_source_mgr.h"
 | |
| 
 | |
| namespace oceanbase
 | |
| {
 | |
| namespace unittest
 | |
| {
 | |
| using namespace oceanbase::share;
 | |
| class TestLogArchiveSource : public ObSimpleClusterTestBase
 | |
| {
 | |
| public:
 | |
|   int init(const uint64_t tenant_id, ObISQLClient *proxy)
 | |
|   {
 | |
|     return mgr_.init(tenant_id, proxy);
 | |
|   }
 | |
|   int insert_service_source(const int64_t recovery_until_ts_ns, const ObAddr &addr)
 | |
|   {
 | |
|     return mgr_.add_service_source(recovery_until_ts_ns, addr);
 | |
|   }
 | |
|   int insert_location_source(const int64_t recovery_until_ts_ns, const ObString &dest)
 | |
|   {
 | |
|     return mgr_.add_location_source(recovery_until_ts_ns, dest);
 | |
|   }
 | |
|   int insert_piece_array(const int64_t recovery_until_ts_ns, DirArray &array)
 | |
|   {
 | |
|     return mgr_.add_rawpath_source(recovery_until_ts_ns, array);
 | |
|   }
 | |
|   int update_until_ts(const int64_t ts)
 | |
|   {
 | |
|     return mgr_.update_recovery_until_ts(ts);
 | |
|   }
 | |
|   int get_source(ObLogArchiveSourceItem &item)
 | |
|   {
 | |
|     return mgr_.get_source(item);
 | |
|   }
 | |
|   int delete_source()
 | |
|   {
 | |
|     return mgr_.delete_source();
 | |
|   }
 | |
|   int get_backup_dest(ObLogArchiveSourceItem &item, ObBackupDest &dest)
 | |
|   {
 | |
|     return mgr_.get_backup_dest(item, dest);
 | |
|   }
 | |
| private:
 | |
|   share::ObLogArchiveSourceMgr mgr_;
 | |
| };
 | |
| TEST_F(TestLogArchiveSource, insert_source)
 | |
| {
 | |
|   int ret = OB_SUCCESS;
 | |
|   uint64_t tenant_id = OB_INVALID_TENANT_ID;
 | |
|   int64_t ts = common::ObTimeUtility::current_time_ns();
 | |
|   ObLogArchiveSourceItem item;
 | |
|   ret = create_tenant();
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   while (true) {
 | |
|     if (OB_SUCC(get_tenant_id(tenant_id))) {
 | |
|       break;
 | |
|     } else {
 | |
|       sleep(1);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   ret = init(tenant_id, GCTX.sql_proxy_);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   /*
 | |
|   ret = insert_service_source(ts, GCONF.self_addr_);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
|   ret = get_source(item);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
|   */
 | |
| 
 | |
|   /*
 | |
|   ret = insert_location_source(ts, ObString("oss://backup_dir/?host=xxx.com&access_id=111&access_key=222"));
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
|   ret = get_source(item);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
|   */
 | |
| 
 | |
|   ObString path("file:///data/1/");
 | |
|   ret = insert_location_source(ts, path);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
|   ret = get_source(item);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
|   ret = path.case_compare(item.value_);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
|   EXPECT_EQ(ts, item.until_ts_);
 | |
| 
 | |
|   ts = common::ObTimeUtility::current_time_ns();
 | |
|   ret = update_until_ts(ts);
 | |
|   ret = get_source(item);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
|   ret = path.case_compare(item.value_);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
|   EXPECT_EQ(ts, item.until_ts_);
 | |
| 
 | |
|   ObString oss_path("oss://backup_dir/?host=xxx.com&access_id=111&access_key=222");
 | |
|   ret = insert_location_source(ts, oss_path);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
|   ret = get_source(item);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
|   ObBackupDest dest;
 | |
|   ret = get_backup_dest(item, dest);
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
| 
 | |
|   ret = delete_source();
 | |
|   EXPECT_EQ(OB_SUCCESS, ret);
 | |
|   ret = get_source(item);
 | |
|   EXPECT_EQ(OB_ERR_NULL_VALUE, ret);
 | |
| }
 | |
| 
 | |
| } // namespace unittest
 | |
| } // namespace oceanbase
 | |
| 
 | |
| 
 | |
| int main(int argc, char **argv)
 | |
| {
 | |
|   OB_LOGGER.set_file_name("test_log_archive_source.log", true, false, "test_log_archive_source_rs.log", "test_archive_election.log");
 | |
|   OB_LOGGER.set_log_level("INFO");
 | |
|   ::testing::InitGoogleTest(&argc, argv);
 | |
|   return RUN_ALL_TESTS();
 | |
| }
 | 
