121 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			4.7 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 <stdlib.h>
 | 
						|
 | 
						|
#define protected public
 | 
						|
#define private public
 | 
						|
 | 
						|
#include "ob_simple_server_restart_helper.h"
 | 
						|
 | 
						|
#include "ob_simple_cluster_test_base.h"
 | 
						|
#include "lib/oblog/ob_log.h"
 | 
						|
#include "share/config/ob_server_config.h"
 | 
						|
 | 
						|
#undef private
 | 
						|
#undef protected
 | 
						|
 | 
						|
bool ObSimpleServerRestartHelper::need_restart_ = false;
 | 
						|
bool ObSimpleServerRestartHelper::is_restart_ = false;
 | 
						|
int ObSimpleServerRestartHelper::sleep_sec_ = 0;
 | 
						|
 | 
						|
// #define RUN_TEST_CASE(type)                                                                      \
 | 
						|
//   sprintf(log_file_name, "%s_%s.log", test_file_name_, #type);                                   \
 | 
						|
//   sprintf(rs_log_file_name, "%s_%s_rs.log", test_file_name_, #type);                             \
 | 
						|
//   sprintf(election_log_file_name, "%s_%s_election.log", test_file_name_, #type);                 \
 | 
						|
//   sprintf(filter_str, "%s*", type##_case_name_);                                                 \
 | 
						|
//                                                                                                  \
 | 
						|
//   OB_LOGGER.set_file_name(log_file_name, true, false, rs_log_file_name, election_log_file_name); \
 | 
						|
//   OB_LOGGER.set_log_level(log_level_);                                                           \
 | 
						|
//   ::testing::InitGoogleTest(&argc_, argv_);                                                      \
 | 
						|
//                                                                                                  \
 | 
						|
//   ::testing::GTEST_FLAG(filter) = filter_str;                                                    \
 | 
						|
//   ret = RUN_ALL_TESTS();
 | 
						|
 | 
						|
 | 
						|
int ObSimpleServerRestartHelper::run()
 | 
						|
{
 | 
						|
  need_restart_ = true;
 | 
						|
  int ret = 0;
 | 
						|
  char log_file_name[name_len];
 | 
						|
  char rs_log_file_name[name_len];
 | 
						|
  char election_log_file_name[name_len];
 | 
						|
  char trace_log_file_name[name_len];
 | 
						|
  char audit_log_file_name[name_len];
 | 
						|
  char filter_str[name_len];
 | 
						|
  memset(log_file_name, 0, name_len);
 | 
						|
  memset(rs_log_file_name, 0, name_len);
 | 
						|
  memset(election_log_file_name, 0, name_len);
 | 
						|
  memset(filter_str, 0, name_len);
 | 
						|
 | 
						|
  GCONF._enable_defensive_check = false;
 | 
						|
  GCONF._private_buffer_size = 1;
 | 
						|
  auto child_pid = fork();
 | 
						|
 | 
						|
  if (child_pid < 0) {
 | 
						|
    perror("fork");
 | 
						|
    exit(EXIT_FAILURE);
 | 
						|
  } else if (child_pid == 0) {
 | 
						|
 | 
						|
    sprintf(log_file_name, "%s_born.log", test_file_name_);
 | 
						|
    sprintf(rs_log_file_name, "%s_born_rs.log", test_file_name_);
 | 
						|
    sprintf(election_log_file_name, "%s_born_election.log", test_file_name_);
 | 
						|
    sprintf(trace_log_file_name, "%s_born_trace.log", test_file_name_);
 | 
						|
    sprintf(audit_log_file_name, "%s_born_audit.log", test_file_name_);
 | 
						|
    sprintf(filter_str, "%s*", born_case_name_);
 | 
						|
 | 
						|
    OB_LOGGER.set_file_name(
 | 
						|
        log_file_name, true, false, rs_log_file_name, election_log_file_name, trace_log_file_name, audit_log_file_name);
 | 
						|
    OB_LOGGER.set_log_level(log_level_);
 | 
						|
    ::testing::InitGoogleTest(&argc_, argv_);
 | 
						|
 | 
						|
    ::testing::GTEST_FLAG(filter) = filter_str;
 | 
						|
    ret = RUN_ALL_TESTS();
 | 
						|
 | 
						|
    fprintf(stdout, "Child process exit ret = %d.\n", ret);
 | 
						|
 | 
						|
  } else {
 | 
						|
    // parent process
 | 
						|
    int status = 0;
 | 
						|
    wait(&status);
 | 
						|
    if (0 != status) {
 | 
						|
      fprintf(stdout, "Child process exit with error code : %d\n", status);
 | 
						|
      ret = status;
 | 
						|
      return ret;
 | 
						|
    } else {
 | 
						|
      fprintf(stdout, "Child process run all test cases done. child ret = %d \n", status);
 | 
						|
    }
 | 
						|
 | 
						|
    ObSimpleServerRestartHelper::is_restart_ = true;
 | 
						|
    // RUN_TEST_CASE(restart);
 | 
						|
    sprintf(log_file_name, "%s_restart.log", test_file_name_);
 | 
						|
    sprintf(rs_log_file_name, "%s_restart_rs.log", test_file_name_);
 | 
						|
    sprintf(election_log_file_name, "%s_restart_election.log", test_file_name_);
 | 
						|
    sprintf(trace_log_file_name, "%s_restart_trace.log", test_file_name_);
 | 
						|
    sprintf(audit_log_file_name, "%s_restart_audit.log", test_file_name_);
 | 
						|
    sprintf(filter_str, "%s*", restart_case_name_);
 | 
						|
 | 
						|
    OB_LOGGER.set_file_name(
 | 
						|
        log_file_name, true, false, rs_log_file_name, election_log_file_name, trace_log_file_name, audit_log_file_name);
 | 
						|
    OB_LOGGER.set_log_level(log_level_);
 | 
						|
    ::testing::InitGoogleTest(&argc_, argv_);
 | 
						|
 | 
						|
    ::testing::GTEST_FLAG(filter) = filter_str;
 | 
						|
    ret = RUN_ALL_TESTS();
 | 
						|
 | 
						|
    fprintf(stdout, "Parent process exit ret = %d\n", ret);
 | 
						|
  }
 | 
						|
 | 
						|
  return ret;
 | 
						|
}
 |