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();
 | 
						|
}
 |