/** * 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 #include #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(); }