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