oceanbase/mittest/simple_server/env/ob_simple_server_restart_helper.cpp

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