159 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			5.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.
 | 
						|
 */
 | 
						|
 | 
						|
#include <gtest/gtest.h>
 | 
						|
#include "lib/utility/ob_test_util.h"
 | 
						|
#include "share/backup/ob_backup_io_adapter.h"
 | 
						|
#include "common/storage/ob_fd_simulator.h"
 | 
						|
#include "share/ob_device_manager.h"
 | 
						|
 | 
						|
using namespace oceanbase::common;
 | 
						|
 | 
						|
class TestCosShareCommon
 | 
						|
{
 | 
						|
public:
 | 
						|
  TestCosShareCommon()
 | 
						|
  {
 | 
						|
    databuff_printf(storage_info, sizeof(storage_info), "host=%s&access_id=%s&access_key=%s&appid=%s",
 | 
						|
        endpoint, secretid, secretkey, appid);
 | 
						|
  }
 | 
						|
  ~TestCosShareCommon()
 | 
						|
  {}
 | 
						|
protected:
 | 
						|
  char storage_info[OB_MAX_URI_LENGTH];
 | 
						|
  const char* dir_name = "cos_unittest_share_dir";
 | 
						|
  char bucket[OB_MAX_URI_LENGTH] = "cos://ob-dbt3-test-1304889018";
 | 
						|
  char endpoint[OB_MAX_URI_LENGTH] = "cos.ap-shanghai.myqcloud.com";
 | 
						|
  char secretid[OB_MAX_URI_LENGTH] = "";
 | 
						|
  char secretkey[OB_MAX_URI_LENGTH] = "";
 | 
						|
  char appid[OB_MAX_URI_LENGTH] = "";
 | 
						|
  char uri[OB_MAX_URI_LENGTH];
 | 
						|
  ObBackupIoAdapter util;
 | 
						|
};
 | 
						|
 | 
						|
//use to clean the env
 | 
						|
class TestCosShareCommonCleanOp : public ObBaseDirEntryOperator, public TestCosShareCommon
 | 
						|
{
 | 
						|
public:
 | 
						|
  TestCosShareCommonCleanOp()
 | 
						|
  {
 | 
						|
  }
 | 
						|
  ~TestCosShareCommonCleanOp() {}
 | 
						|
  int func(const dirent *entry) override;
 | 
						|
private :
 | 
						|
};
 | 
						|
 | 
						|
int TestCosShareCommonCleanOp::func(const dirent *entry)
 | 
						|
{
 | 
						|
  int ret = OB_SUCCESS;
 | 
						|
  if (OB_FAIL(databuff_printf(uri, sizeof(uri), "%s/%s/%s", bucket, dir_name, entry->d_name))) {
 | 
						|
  } else if (OB_FAIL(util.del_file(uri, storage_info))) {
 | 
						|
  }
 | 
						|
  return ret;
 | 
						|
}
 | 
						|
 | 
						|
class TestStorageCosShare: public ::testing::Test, public TestCosShareCommon
 | 
						|
{
 | 
						|
public:
 | 
						|
  TestStorageCosShare() {}
 | 
						|
  virtual ~TestStorageCosShare(){}
 | 
						|
  virtual void SetUp()
 | 
						|
  {
 | 
						|
    //clean the test dir, do it in setup or teardown
 | 
						|
    char dir_uri[OB_MAX_URI_LENGTH];
 | 
						|
    TestCosShareCommonCleanOp clean_op;
 | 
						|
    ASSERT_EQ(OB_SUCCESS, databuff_printf(dir_uri, sizeof(dir_uri), "%s/%s/", bucket, dir_name));
 | 
						|
    ASSERT_EQ(OB_SUCCESS, util.list_files(dir_uri, storage_info, clean_op));
 | 
						|
  }
 | 
						|
  virtual void TearDown() {}
 | 
						|
 | 
						|
  static void SetUpTestCase() {}
 | 
						|
 | 
						|
  static void TearDownTestCase() {}
 | 
						|
private:
 | 
						|
  // disallow copy
 | 
						|
  DISALLOW_COPY_AND_ASSIGN(TestStorageCosShare);
 | 
						|
protected:
 | 
						|
  // function members
 | 
						|
protected:
 | 
						|
};
 | 
						|
 | 
						|
TEST_F(TestStorageCosShare, del_1001)
 | 
						|
{
 | 
						|
  char dir_uri[OB_MAX_URI_LENGTH];
 | 
						|
  ObArray<ObString> del_files;
 | 
						|
  ObArenaAllocator allocator;
 | 
						|
  ObFileListArrayOp del_op(del_files, allocator);
 | 
						|
  ASSERT_EQ(OB_SUCCESS, databuff_printf(dir_uri, sizeof(dir_uri), "%s/%s/", bucket, "data/1/yuanzhi.zy.backup"));
 | 
						|
  ASSERT_EQ(OB_SUCCESS, util.list_files(dir_uri, storage_info, del_op));
 | 
						|
  //ASSERT_EQ(OB_SUCCESS, databuff_printf(dir_uri, sizeof(dir_uri), "%s/%s/", bucket, "data/1/yuanzhi.zy.backup.backup"));
 | 
						|
  //ASSERT_EQ(OB_SUCCESS, util.list_files(dir_uri, storage_info, del_op));
 | 
						|
  for (int i = 0; i < del_files.count(); i++) {
 | 
						|
    ASSERT_EQ(OB_SUCCESS, databuff_printf(uri, sizeof(uri), "%s%s", dir_uri, del_files[i].ptr()));
 | 
						|
    ASSERT_EQ(OB_SUCCESS, util.del_file(uri, storage_info));
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
//COS test
 | 
						|
TEST_F(TestStorageCosShare, test_get_pkeys_from_dir)
 | 
						|
{
 | 
						|
  char dir_uri[OB_MAX_URI_LENGTH];
 | 
						|
  char dir_name_sp[OB_MAX_URI_LENGTH];
 | 
						|
  const int64_t ts = ObTimeUtility::current_time();
 | 
						|
 | 
						|
  // format dir path uri
 | 
						|
  ASSERT_EQ(OB_SUCCESS, databuff_printf(dir_name_sp, sizeof(dir_name_sp), "cos_unittest_share_dir/%ld", ts));
 | 
						|
  ASSERT_EQ(OB_SUCCESS, databuff_printf(dir_uri, sizeof(dir_uri), "%s/%s/", bucket, dir_name_sp));
 | 
						|
 | 
						|
  char buffer[1024] = "abcdefghijklmnopqrstuvwxyz";
 | 
						|
  // create 10 partitions
 | 
						|
  const int partitions_cnt = 10;
 | 
						|
  for (int i = 0; i < partitions_cnt; i++) {
 | 
						|
    // format object path uri
 | 
						|
    ASSERT_EQ(OB_SUCCESS, databuff_printf(uri, sizeof(uri), "%s%ld_%d", dir_uri, ts, i));
 | 
						|
    ASSERT_EQ(OB_SUCCESS, util.write_single_file(uri, storage_info,  buffer, strlen(buffer)));
 | 
						|
  }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
TEST_F(TestStorageCosShare, test_set_append_strategy)
 | 
						|
{
 | 
						|
    ObIODOpts opts;
 | 
						|
    ObIODOpt opt[4];
 | 
						|
    opts.opts_ = opt;
 | 
						|
    opts.opt_cnt_ = 0;
 | 
						|
    int64_t epoch = 99;
 | 
						|
 | 
						|
    ASSERT_EQ(OB_SUCCESS, util.set_append_strategy(&opts, true, epoch, 4));
 | 
						|
    ASSERT_EQ(2, opts.opt_cnt_);
 | 
						|
    ASSERT_EQ(0, STRCMP(opt[0].key_, "AppendStrategy"));
 | 
						|
    ASSERT_EQ(0, STRCMP(opt[0].value_.value_str, "OB_APPEND_USE_SLICE_PUT"));
 | 
						|
    ASSERT_EQ(0, STRCMP(opt[1].key_, "AppendVersion"));
 | 
						|
    ASSERT_EQ(epoch, opt[1].value_.value_int64);
 | 
						|
 | 
						|
    opts.opt_cnt_ = 0;
 | 
						|
    ASSERT_EQ(OB_SUCCESS, util.set_append_strategy(&opts, false, epoch, 4));
 | 
						|
    ASSERT_EQ(1, opts.opt_cnt_);
 | 
						|
    ASSERT_EQ(0, STRCMP(opt[0].key_, "AppendStrategy"));
 | 
						|
    ASSERT_EQ(0, STRCMP(opt[0].value_.value_str, "OB_APPEND_USE_OVERRITE"));
 | 
						|
}
 | 
						|
 | 
						|
/*TODO: ObBackupIoAdapter::set_append_strategy need UT*/
 | 
						|
int main(int argc, char **argv)
 | 
						|
{
 | 
						|
  system("rm -f test_storage_cos_adapter.log");
 | 
						|
  OB_LOGGER.set_file_name("test_storage_cos_adapter.log");
 | 
						|
  OB_LOGGER.set_log_level("INFO");
 | 
						|
  ::testing::InitGoogleTest(&argc,argv);
 | 
						|
  return RUN_ALL_TESTS();
 | 
						|
}
 |