mdbx: add db-copy testcase.

Change-Id: Ib554880ebbabcb5dfc55bdb3c71767d0fa1630fd
This commit is contained in:
Leonid Yuriev 2018-11-04 18:57:36 +03:00
parent 40e3f735ab
commit 24d42c1583
9 changed files with 81 additions and 30 deletions

View File

@ -3,6 +3,7 @@ README-RU.md
pcrf_test/CMakeLists.txt
src/tools/CMakeLists.txt
test/CMakeLists.txt
test/copy.cc
tutorial/CMakeLists.txt
tutorial/sample-mdbx.c
AUTHORS

View File

@ -1,4 +1,4 @@
set(TARGET mdbx_test)
set(TARGET mdbx_test)
project(${TARGET})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-missing-declarations")
@ -11,6 +11,7 @@ add_executable(${TARGET}
chrono.h
config.cc
config.h
copy.cc
dead.cc
hill.cc
jitter.cc
@ -26,7 +27,7 @@ add_executable(${TARGET}
try.cc
utils.cc
utils.h
)
)
target_link_libraries(${TARGET}
mdbx

View File

@ -1,4 +1,4 @@
/*
/*
* Copyright 2017-2018 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
@ -68,6 +68,7 @@ void testcase_setup(const char *casename, actor_params &params,
configure_actor(last_space_id, ac_jitter, nullptr, params);
configure_actor(last_space_id, ac_hill, nullptr, params);
configure_actor(last_space_id, ac_try, nullptr, params);
configure_actor(last_space_id, ac_copy, nullptr, params);
log_notice("<<< testcase_setup(%s): done", casename);
} else {
failure("unknown testcase `%s`", casename);

View File

@ -1,4 +1,4 @@
/*
/*
* Copyright 2017-2018 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
@ -26,7 +26,8 @@ enum actor_testcase {
ac_deadread,
ac_deadwrite,
ac_jitter,
ac_try
ac_try,
ac_copy
};
enum actor_status {

26
test/copy.cc Normal file
View File

@ -0,0 +1,26 @@
#include "test.h"
void testcase_copy::copy_db(const bool with_compaction) {
int err = osal_removefile(copy_pathname);
if (err != MDBX_SUCCESS && err != MDBX_ENOFILE)
failure_perror("mdbx_removefile()", err);
err = mdbx_env_copy(db_guard.get(), copy_pathname.c_str(),
with_compaction ? MDBX_CP_COMPACT : 0);
if (unlikely(err != MDBX_SUCCESS))
failure_perror(with_compaction ? "mdbx_env_copy(MDBX_CP_COMPACT)"
: "mdbx_env_copy(MDBX_CP_ASIS)",
err);
}
bool testcase_copy::run() {
jitter_delay();
db_open();
assert(!txn_guard);
const bool order = flipcoin();
jitter_delay();
copy_db(order);
jitter_delay();
copy_db(!order);
return true;
}

View File

@ -1,4 +1,4 @@
/*
/*
* Copyright 2017-2018 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
@ -337,6 +337,10 @@ int main(int argc, char *const argv[]) {
configure_actor(last_space_id, ac_deadwrite, value, params);
continue;
}
if (config::parse_option(argc, argv, narg, "copy", nullptr)) {
configure_actor(last_space_id, ac_copy, value, params);
continue;
}
if (config::parse_option(argc, argv, narg, "failfast",
global::config::failfast))
continue;

View File

@ -1,4 +1,4 @@
/*
/*
* Copyright 2017-2018 Leonid Yuriev <leo@yuriev.ru>
* and other libmdbx authors: please see AUTHORS file.
* All rights reserved.
@ -31,6 +31,8 @@ const char *testcase2str(const actor_testcase testcase) {
return "jitter";
case ac_try:
return "try";
case ac_copy:
return "copy";
}
}
@ -453,6 +455,9 @@ bool test_execute(const actor_config &config) {
case ac_try:
test.reset(new testcase_try(config, pid));
break;
case ac_copy:
test.reset(new testcase_copy(config, pid));
break;
default:
test.reset(new testcase(config, pid));
break;

View File

@ -185,3 +185,14 @@ public:
: testcase(config, pid) {}
bool run();
};
class testcase_copy : public testcase {
const std::string copy_pathname;
void copy_db(const bool with_compaction);
public:
testcase_copy(const actor_config &config, const mdbx_pid_t pid)
: testcase(config, pid),
copy_pathname(config.params.pathname_db + "-copy") {}
bool run();
};

View File

@ -184,6 +184,7 @@
<ClCompile Include="cases.cc" />
<ClCompile Include="chrono.cc" />
<ClCompile Include="config.cc" />
<ClCompile Include="copy.cc" />
<ClCompile Include="dead.cc" />
<ClCompile Include="hill.cc" />
<ClCompile Include="try.cc" />