Skip to content

Commit

Permalink
Merge pull request #392 from bareos/dev/pstorz/master/parallel-system…
Browse files Browse the repository at this point in the history
…tests

parallel systemtests
  • Loading branch information
pstorz committed Jan 15, 2020
2 parents 7c426c4 + 05df370 commit e640cd6
Show file tree
Hide file tree
Showing 18 changed files with 140 additions and 127 deletions.
3 changes: 2 additions & 1 deletion core/scripts/bareos-ctl-dir.in
Expand Up @@ -11,7 +11,8 @@ export AWK="@AWK@"
export PIDOF="@PIDOF@"
export PGREP="@PGREP@"

BAREOS_DIRECTOR_BINARY="${BAREOS_BIN_DIR:-@sbindir@/bareos-dir}"
PIDDIR=${PIDDIR:-@piddir@}
BAREOS_DIRECTOR_BINARY="${BAREOS_DIRECTOR_BINARY:-@sbindir@/bareos-dir}"
export BAREOS_CONFIG_DIR=${BAREOS_CONFIG_DIR:-@confdir@}
BAREOS_DIRECTOR_PORT=${BAREOS_DIRECTOR_PORT:-@dir_port@}
BAREOS_DIRECTOR_USER=${BAREOS_DIRECTOR_USER:-@dir_user@}
Expand Down
18 changes: 10 additions & 8 deletions core/scripts/bareos-ctl-fd.in
Expand Up @@ -22,8 +22,10 @@ AWK=@AWK@
# easier to "steal" this code for the development
# environment where they are different.
#
BIN=@sbindir@/bareos-fd
PIDDIR=@piddir@


BAREOS_FILEDAEMON_BINARY=${BAREOS_FILEDAEMON_BINARY:-@sbindir@/bareos-fd}
PIDDIR=${PIDDIR:-@piddir@}
SUBSYSDIR=@subsysdir@

BAREOS_CONFIG_DIR=${BAREOS_CONFIG_DIR:-@confdir@}
Expand All @@ -49,7 +51,7 @@ fi

case "$1" in
start)
if [ -x ${BIN} ]; then
if [ -x ${BAREOS_FILEDAEMON_BINARY} ]; then
echo "Starting the $Bareos File daemon"
OPTIONS=''
if [ "${BAREOS_FD_USER}" != '' ]; then
Expand All @@ -65,17 +67,17 @@ case "$1" in
fi

if [ "x${VALGRIND_FD}" = "x1" ]; then
valgrind --leak-check=full ${BIN} -v $2 $3 ${OPTIONS}
valgrind --leak-check=full ${BAREOS_FILEDAEMON_BINARY} -v $2 $3 ${OPTIONS}
else
${BIN} -v $2 $3 ${OPTIONS}
${BAREOS_FILEDAEMON_BINARY} -v $2 $3 ${OPTIONS}
fi
fi
;;

stop)
if [ -x ${BIN} ]; then
if [ -x ${BAREOS_FILEDAEMON_BINARY} ]; then
echo "Stopping the $Bareos File daemon"
killproc ${BIN} ${BAREOS_FD_PORT}
killproc ${BAREOS_FILEDAEMON_BINARY} ${BAREOS_FD_PORT}
fi
;;

Expand All @@ -86,7 +88,7 @@ case "$1" in
;;

status)
[ -x ${BIN} ] && status ${BIN} ${BAREOS_FD_PORT}
[ -x ${BAREOS_FILEDAEMON_BINARY} ] && status ${BAREOS_FILEDAEMON_BINARY} ${BAREOS_FD_PORT}
exit $?
;;

Expand Down
16 changes: 8 additions & 8 deletions core/scripts/bareos-ctl-sd.in
Expand Up @@ -22,8 +22,8 @@ AWK=@AWK@
# easier to "steal" this code for the development
# environment where they are different.
#
BIN=@sbindir@/bareos-sd
export PIDDIR=@piddir@
BAREOS_STORAGEDAEMON_BINARY=${BAREOS_STORAGEDAEMON_BINARY:-@sbindir@/bareos-sd}
PIDDIR=${PIDDIR:-@piddir@}
SUBSYSDIR=@subsysdir@

BAREOS_CONFIG_DIR=${BAREOS_CONFIG_DIR:-@confdir@}
Expand All @@ -49,7 +49,7 @@ fi

case "$1" in
start)
if [ -x ${BIN} ]; then
if [ -x ${BAREOS_STORAGEDAEMON_BINARY} ]; then
echo "Starting the $Bareos Storage daemon"
OPTIONS=''
if [ "${BAREOS_SD_USER}" != '' ]; then
Expand All @@ -65,17 +65,17 @@ case "$1" in
fi

if [ "x${VALGRIND_SD}" = "x1" ]; then
valgrind --leak-check=full ${BIN} -v $2 $3 ${OPTIONS}
valgrind --leak-check=full ${BAREOS_STORAGEDAEMON_BINARY} -v $2 $3 ${OPTIONS}
else
${BIN} -v $2 $3 ${OPTIONS}
${BAREOS_STORAGEDAEMON_BINARY} -v $2 $3 ${OPTIONS}
fi
fi
;;

stop)
if [ -x ${BIN} ]; then
if [ -x ${BAREOS_STORAGEDAEMON_BINARY} ]; then
echo "Stopping the $Bareos Storage daemon"
killproc ${BIN} ${BAREOS_SD_PORT}
killproc ${BAREOS_STORAGEDAEMON_BINARY} ${BAREOS_SD_PORT}
fi
;;

Expand All @@ -86,7 +86,7 @@ case "$1" in
;;

status)
[ -x ${BIN} ] && status ${BIN} ${BAREOS_SD_PORT}
[ -x ${BAREOS_STORAGEDAEMON_BINARY} ] && status ${BAREOS_STORAGEDAEMON_BINARY} ${BAREOS_SD_PORT}
exit $?
;;

Expand Down
2 changes: 1 addition & 1 deletion core/src/tests/catalog.cc
Expand Up @@ -184,5 +184,5 @@ TEST_F(CatalogTest, database)

time_t time_converted = static_cast<time_t>(StrToUtime(stime.data()));

EXPECT_EQ(time_converted, 1574863489);
EXPECT_EQ(time_converted, StrToUtime("2019-11-27 15:04:49"));
}
38 changes: 28 additions & 10 deletions core/src/tests/run_on_incoming_connect_interval.cc
Expand Up @@ -119,11 +119,21 @@ TEST_F(RunOnIncomingConnectIntervalTest,
EXPECT_TRUE(find(jobs, "backup-bareos-fd-connect-2"));
}

static struct TestResults {
int job_counter{};
int scheduler_sleep_count{};
int timeout{};
std::map<std::string, int> job_names;
} test_results;

class TestTimeSource : public TimeSource {
public:
int counter = 0;
int counter{};
time_t SystemTime() override { return ++counter; }
void SleepFor(std::chrono::seconds /*wait_interval*/) override {}
void SleepFor(std::chrono::seconds /*wait_interval*/) override
{
++test_results.scheduler_sleep_count;
}
void Terminate() override {}
};

Expand All @@ -135,11 +145,6 @@ class TimeAdapter : public SchedulerTimeAdapter {
}
};

static struct TestResults {
int job_counter{};
std::map<std::string, int> job_names;
} test_results;

static void SchedulerJobCallback(JobControlRecord* jcr)
{
++test_results.job_counter;
Expand Down Expand Up @@ -220,13 +225,17 @@ static void RunSchedulerAndSimulateClientConnect(BareosDb& db)
std::make_unique<TimeAdapter>(std::make_unique<TestTimeSource>()),
SchedulerJobCallback);

std::thread scheduler_thread(scheduler_loop, &scheduler);

test_results = TestResults();

SimulateClientConnect("bareos-fd", scheduler, db);

std::this_thread::sleep_for(std::chrono::milliseconds(20));
std::thread scheduler_thread(scheduler_loop, &scheduler);

int timeout{};
while (test_results.scheduler_sleep_count < 3 && timeout < 500) {
std::this_thread::sleep_for(std::chrono::milliseconds(1));
++timeout;
}

scheduler.Terminate();
scheduler_thread.join();
Expand All @@ -237,6 +246,9 @@ TEST_F(RunOnIncomingConnectIntervalTest, no_start_time_found_in_database)
MockDatabase db(MockDatabase::Mode::kFindNoStartTime);
RunSchedulerAndSimulateClientConnect(db);

EXPECT_TRUE(test_results.scheduler_sleep_count > 0)
<< "The scheduler did not sleep";

ASSERT_EQ(test_results.job_counter, 2) << "Not all jobs did run";

EXPECT_NE(test_results.job_names.find("backup-bareos-fd-connect"),
Expand All @@ -253,6 +265,9 @@ TEST_F(RunOnIncomingConnectIntervalTest, start_time_found_in_database)
MockDatabase db(MockDatabase::Mode::kFindStartTime);
RunSchedulerAndSimulateClientConnect(db);

EXPECT_TRUE(test_results.scheduler_sleep_count > 0)
<< "The scheduler did not sleep";

ASSERT_EQ(test_results.job_counter, 1)
<< "backup-bareos-fd-connect did not run";

Expand All @@ -266,6 +281,9 @@ TEST_F(RunOnIncomingConnectIntervalTest, start_time_found_wrong_time_string)
MockDatabase db(MockDatabase::Mode::kFindStartTimeWrongString);
RunSchedulerAndSimulateClientConnect(db);

EXPECT_TRUE(test_results.scheduler_sleep_count > 0)
<< "The scheduler did not sleep";

ASSERT_EQ(test_results.job_counter, 0)
<< "backup-bareos-fd-connect did not run";
}
123 changes: 72 additions & 51 deletions systemtests/CMakeLists.txt
Expand Up @@ -45,10 +45,6 @@ function(ConfigureFilesToSystemtest srcbasedir dirname globexpression
${configure_option}
)
endforeach()
# message(
# STATUS
# "Configured ${COUNT} files from ${srcbasedir}/${srcdirname} to ${dirname} with glob ${globexpression} ${configure_option}"
#)
endfunction()

# generic function to probe for a python module
Expand Down Expand Up @@ -149,6 +145,62 @@ macro(handle_python_plugin_modules test_name)
# endif()
endmacro()




macro(prepare_testdir_for_daemon_run)
set(archivedir ${current_test_directory}/storage)
set(confdir ${current_test_directory}/etc/bareos)
set(config_directory_dir_additional_test_config
${current_test_directory}/etc/bareos/bareos-dir.d/additional_test_config)
set(logdir ${current_test_directory}/log)
set(tmpdir ${current_test_directory}/tmp)
set(tmp ${tmpdir})
set(working_dir ${current_test_directory}/working)
set(python_plugin_module_src_test_dir
${current_test_directory}/python-modules
)
set(piddir ${current_test_directory}/piddir)

file(MAKE_DIRECTORY ${piddir})
file(MAKE_DIRECTORY ${tmpdir})
file(MAKE_DIRECTORY ${archivedir})
file(MAKE_DIRECTORY ${logdir})
file(MAKE_DIRECTORY ${confdir})
file(MAKE_DIRECTORY ${working_dir})
file(MAKE_DIRECTORY ${config_directory_dir_additional_test_config})
# create a bin/bareos and bin/bconsole script in every testdir for
# start/stop and bconsole
file(MAKE_DIRECTORY "${current_test_directory}/bin")
configure_file(
"bin/bconsole" "${current_test_directory}/bin/bconsole" COPYONLY
)
configure_file("bin/bareos" "${current_test_directory}/bin/bareos" COPYONLY)

set(BAREOS_DIRECTOR_BINARY
${current_test_directory}/sbin/bareos-dir-${TEST_NAME}
)
set(BAREOS_STORAGEDAEMON_BINARY
${current_test_directory}/sbin/bareos-sd-${TEST_NAME}
)
set(BAREOS_FILEDAEMON_BINARY
${current_test_directory}/sbin/bareos-fd-${TEST_NAME}
)
file(MAKE_DIRECTORY "${current_test_directory}/sbin")
create_symlink(
"${CMAKE_CURRENT_BINARY_DIR}/sbin/bareos-dir" "${BAREOS_DIRECTOR_BINARY}"
)
create_symlink(
"${CMAKE_CURRENT_BINARY_DIR}/sbin/bareos-sd"
"${BAREOS_STORAGEDAEMON_BINARY}"
)
create_symlink(
"${CMAKE_CURRENT_BINARY_DIR}/sbin/bareos-fd"
"${BAREOS_FILEDAEMON_BINARY}"
)
endmacro()


macro(prepare_test)
# base directory for this test
set(current_test_directory ${PROJECT_BINARY_DIR}/tests/${TEST_NAME})
Expand Down Expand Up @@ -177,37 +229,17 @@ macro(prepare_test)
math(EXPR sd2_port "${BASEPORT} + 3")
math(EXPR php_port "${BASEPORT} + 4")

# set(DEFAULT_DB_TYPE )
set(archivedir ${current_test_directory}/storage)
set(confdir ${current_test_directory}/etc/bareos)
set(config_directory_dir_additional_test_config
${current_test_directory}/etc/bareos/bareos-dir.d/additional_test_config
)

set(logdir ${current_test_directory}/log)
set(tmpdir ${current_test_directory}/tmp)
set(tmp ${tmpdir})
set(working_dir ${current_test_directory}/working)
set(python_plugin_module_src_test_dir
${current_test_directory}/python-modules
)

# skip for tests without etc/bareos ("catalog" test)
if(EXISTS ${current_test_source_directory}/etc/bareos)
file(MAKE_DIRECTORY ${tmpdir})
file(MAKE_DIRECTORY ${archivedir})
file(MAKE_DIRECTORY ${logdir})
file(MAKE_DIRECTORY ${confdir})
file(MAKE_DIRECTORY ${working_dir})
file(MAKE_DIRECTORY ${config_directory_dir_additional_test_config})
# create a bin/bareos and bin/bconsole script in every testdir for start/stop
# and bconsole
file(MAKE_DIRECTORY "${current_test_directory}/bin")
configure_file("bin/bconsole" "${current_test_directory}/bin/bconsole" COPYONLY)
configure_file("bin/bareos" "${current_test_directory}/bin/bareos" COPYONLY)
prepare_testdir_for_daemon_run()
endif()
endmacro()

macro(create_symlink target link)
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${target} ${link})
endmacro()

# extract db version from cats.h
file(STRINGS ${CMAKE_SOURCE_DIR}/core/src/cats/cats.h DB_VERSION_STRING
REGEX .*BDB_VERSION.*
Expand Down Expand Up @@ -280,8 +312,6 @@ set(tmpsrc ${PROJECT_BINARY_DIR}/tmpsrc)
set(working ${PROJECT_BINARY_DIR}/working)
set(working_dir ${PROJECT_BINARY_DIR}/working)

set(piddir ${PROJECT_BINARY_DIR}/piddir)
file(MAKE_DIRECTORY ${piddir})

# set(BASEPORT ${dir_port})

Expand Down Expand Up @@ -321,10 +351,7 @@ file(MAKE_DIRECTORY ${scripts})
file(MAKE_DIRECTORY ${working})
file(MAKE_DIRECTORY ${archivedir})

execute_process(
COMMAND ${CMAKE_COMMAND} -E create_symlink ${scriptdir}/btraceback
${sbindir}/btraceback
)
create_symlink(${scriptdir}/btraceback ${sbindir}/btraceback)

file(REMOVE_RECURSE ${scripts}/ddl)
file(RENAME ${PROJECT_BINARY_DIR}/ddl ${scripts}/ddl)
Expand Down Expand Up @@ -504,6 +531,7 @@ if(ENABLE_WEBUI_SELENIUM_TEST)
foreach(TEST_NAME ${WEBUI_SELENIUM_TESTS})

prepare_test()
prepare_testdir_for_daemon_run()
# split WEBUI_TEST_NAME into PROFILE and TESTNAME
string(REPLACE "-" ";" SELENIUM_TESTCOMPONENTS ${TEST_NAME})
# "webui-admin-restore"
Expand Down Expand Up @@ -580,10 +608,9 @@ set(BINARIES_TO_LINK_TO_SBIN

foreach(BINARY_SOURCEPATH ${BINARIES_TO_LINK_TO_SBIN})
get_filename_component(BINARY_NAME ${BINARY_SOURCEPATH} NAME)
execute_process(
COMMAND ${CMAKE_COMMAND} -E create_symlink
${PROJECT_BINARY_DIR}/../core/src/${BINARY_SOURCEPATH}
${sbindir}/${BINARY_NAME}
create_symlink(
${PROJECT_BINARY_DIR}/../core/src/${BINARY_SOURCEPATH}
${sbindir}/${BINARY_NAME}
)
endforeach()

Expand All @@ -603,19 +630,13 @@ set(BINARIES_TO_LINK_TO_BIN

foreach(BINARY_SOURCEPATH ${BINARIES_TO_LINK_TO_BIN})
get_filename_component(BINARY_NAME ${BINARY_SOURCEPATH} NAME)
execute_process(
COMMAND ${CMAKE_COMMAND} -E create_symlink
${PROJECT_BINARY_DIR}/../core/src/${BINARY_SOURCEPATH}
${bindir}/${BINARY_NAME}
create_symlink(
${PROJECT_BINARY_DIR}/../core/src/${BINARY_SOURCEPATH}
${bindir}/${BINARY_NAME}
)
endforeach()

execute_process(
COMMAND ${CMAKE_COMMAND} -E create_symlink
${PROJECT_BINARY_DIR}/../core/src/console/bconsole ${bindir}/bconsole
)

execute_process(
COMMAND ${CMAKE_COMMAND} -E create_symlink ${scriptdir}/bareos
${bindir}/bareos
create_symlink(
${PROJECT_BINARY_DIR}/../core/src/console/bconsole ${bindir}/bconsole
)
create_symlink(${scriptdir}/bareos ${bindir}/bareos)

0 comments on commit e640cd6

Please sign in to comment.