diff --git a/src/tests/test_txn_commit8.c b/src/tests/test_txn_commit8.c new file mode 100644 index 00000000000..7e3faeba7ee --- /dev/null +++ b/src/tests/test_txn_commit8.c @@ -0,0 +1,58 @@ +#include +#include +#include +#include +#include +#include +#include +#include "test.h" + +// like test_txn_abort8.c except commit +void test_abort_close(void) { + + system("rm -rf " ENVDIR); + mkdir(ENVDIR, 0777); + + int r; + DB_ENV *env; + r = db_env_create(&env, 0); assert(r == 0); + r = env->set_data_dir(env, ENVDIR); + r = env->set_lg_dir(env, ENVDIR); + env->set_errfile(env, stdout); + r = env->open(env, 0, DB_INIT_MPOOL + DB_INIT_LOG + DB_INIT_LOCK + DB_INIT_TXN + DB_PRIVATE + DB_CREATE, 0777); + if (r != 0) printf("%s:%d:%d:%s\n", __FILE__, __LINE__, r, db_strerror(r)); + assert(r == 0); + + DB_TXN *txn = 0; + r = env->txn_begin(env, 0, &txn, 0); assert(r == 0); + + DB *db; + r = db_create(&db, env, 0); assert(r == 0); + r = db->open(db, txn, "test.db", 0, DB_BTREE, DB_CREATE, 0777); assert(r == 0); + + { + struct stat statbuf; + r = stat(ENVDIR "/test.db", &statbuf); + assert(r==0); + } + + // Close before commit + r = db->close(db, 0); + + r = txn->commit(txn, 0); assert(r == 0); + + r = env->close(env, 0); assert(r == 0); + + { + struct stat statbuf; + r = stat(ENVDIR "/test.db", &statbuf); + assert(r==0); + } + + +} + +int main(int argc, char *argv[]) { + test_abort_close(); + return 0; +}