Add test case for txn try

This commit is contained in:
James Rouzier 2017-10-25 20:56:12 -04:00
parent 2f1f4b19a0
commit 088e811da4
5 changed files with 56 additions and 1 deletions

View File

@ -67,6 +67,7 @@ void testcase_setup(const char *casename, actor_params &params,
configure_actor(last_space_id, ac_hill, nullptr, 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);
log_notice("<<< testcase_setup(%s): done", casename);
} else {
failure("unknown testcase `%s`", casename);

View File

@ -20,7 +20,7 @@
#define ACTOR_ID_MAX INT16_MAX
enum actor_testcase { ac_none, ac_hill, ac_deadread, ac_deadwrite, ac_jitter };
enum actor_testcase { ac_none, ac_hill, ac_deadread, ac_deadwrite, ac_jitter, ac_try };
enum actor_status {
as_unknown,

View File

@ -29,6 +29,8 @@ const char *testcase2str(const actor_testcase testcase) {
return "deadwrite";
case ac_jitter:
return "jitter";
case ac_try:
return "try";
}
}
@ -443,6 +445,9 @@ bool test_execute(const actor_config &config) {
case ac_jitter:
test.reset(new testcase_jitter(config, pid));
break;
case ac_try:
test.reset(new testcase_try(config, pid));
break;
default:
test.reset(new testcase(config, pid));
break;

View File

@ -190,3 +190,14 @@ public:
bool run();
bool teardown();
};
class testcase_try : public testcase {
typedef testcase inherited;
public:
testcase_try(const actor_config &config, const mdbx_pid_t pid)
: testcase(config, pid) {}
bool setup();
bool run();
bool teardown();
};

38
test/try.cc Normal file
View File

@ -0,0 +1,38 @@
#include "test.h"
bool testcase_try::setup() {
log_trace(">> setup");
if (!inherited::setup())
return false;
log_trace("<< setup");
return true;
}
bool testcase_try::run() {
db_open();
assert(!txn_guard);
MDBX_txn *txn = nullptr;
MDBX_txn *txn2 = nullptr;
int rc =
mdbx_txn_begin(db_guard.get(), nullptr, 0, &txn);
if (unlikely(rc != MDBX_SUCCESS))
failure_perror("mdbx_txn_begin(MDBX_TRYTXN)", rc);
else {
rc = mdbx_txn_begin(db_guard.get(), nullptr, MDBX_TRYTXN, &txn2);
if (unlikely(rc != MDBX_BUSY))
failure_perror("mdbx_txn_begin(MDBX_TRYTXN)", rc);
}
txn_guard.reset(txn);
return true;
}
bool testcase_try::teardown() {
log_trace(">> teardown");
cursor_guard.release();
txn_guard.release();
db_guard.release();
return inherited::teardown();
}