Commit e4931b77 authored by Rich Prohaska's avatar Rich Prohaska Committed by Yoni Fogel

#2835 refs[t:2835] add some test cases for the multiple process with the same data dir

git-svn-id: file:///svn/toku/tokudb@22552 c7de825b-a66e-492c-adef-691d508d4ae1
parent 18b1037d
......@@ -7,36 +7,186 @@
#include "test.h"
int
test_main (int argc, char * const argv[]) {
parse_args(argc, argv);
static size_t max(size_t a, size_t b) {
return a > b ? a : b;
}
static void
test_env (const char *envdir0, const char *envdir1, int expect_open_return) {
char rmcmd[32 + max(strlen(envdir0), strlen(envdir1)) + 1];
int r;
sprintf(rmcmd, "rm -rf %s", envdir0);
r = system(rmcmd);
CKERR(r);
r = toku_os_mkdir(envdir0, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
if (strcmp(envdir0, envdir1) != 0) {
sprintf(rmcmd, "rm -rf %s", envdir1);
r = system(rmcmd);
CKERR(r);
r = toku_os_mkdir(envdir1, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
}
DB_ENV *env;
r = db_env_create(&env, 0);
CKERR(r);
int envflags = DB_INIT_LOCK | DB_INIT_MPOOL | DB_INIT_TXN | DB_CREATE | DB_PRIVATE | DB_RECOVER;
r = env->open(env, envdir0, envflags, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
DB_ENV *env2;
r = db_env_create(&env2, 0);
CKERR(r);
r = env2->open(env2, envdir1, envflags, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR2(r, expect_open_return);
r = env->close(env, 0);
CKERR(r);
if (expect_open_return != 0) {
r = env2->open(env2, envdir1, envflags, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
}
r = env2->close(env2, 0);
CKERR(r);
}
static void
test_datadir (const char *envdir0, const char *datadir0, const char *envdir1, const char *datadir1, int expect_open_return) {
char s[256];
int r;
sprintf(s, "rm -rf %s", envdir0);
r = system(s);
CKERR(r);
r = toku_os_mkdir(envdir0, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
sprintf(s, "rm -rf %s", datadir0);
r = system(s);
CKERR(r);
r = toku_os_mkdir(datadir0, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
sprintf(s, "rm -rf %s", envdir1);
r = system(s);
CKERR(r);
r = toku_os_mkdir(envdir1, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
sprintf(s, "rm -rf %s", datadir1);
r = system(s);
CKERR(r);
r = toku_os_mkdir(datadir1, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
DB_ENV *env;
r = db_env_create(&env, 0);
CKERR(r);
r = env->set_data_dir(env, datadir0);
CKERR(r);
int envflags = DB_INIT_LOCK | DB_INIT_MPOOL | DB_INIT_TXN | DB_CREATE | DB_PRIVATE | DB_RECOVER;
r = env->open(env, envdir0, envflags, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
DB_ENV *env2;
r = db_env_create(&env2, 0);
CKERR(r);
r = env2->set_data_dir(env2, datadir1);
CKERR(r);
r = env2->open(env2, envdir1, envflags, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR2(r, expect_open_return);
r = env->close(env, 0);
CKERR(r);
if (expect_open_return != 0) {
r = env2->open(env2, envdir1, envflags, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
}
r = env2->close(env2, 0);
CKERR(r);
}
static void
test_logdir (const char *envdir0, const char *datadir0, const char *envdir1, const char *datadir1, int expect_open_return) {
char s[256];
int r;
r = system("rm -rf " ENVDIR);
sprintf(s, "rm -rf %s", envdir0);
r = system(s);
CKERR(r);
r = toku_os_mkdir(envdir0, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
sprintf(s, "rm -rf %s", datadir0);
r = system(s);
CKERR(r);
r = toku_os_mkdir(datadir0, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
sprintf(s, "rm -rf %s", envdir1);
r = system(s);
CKERR(r);
r = toku_os_mkdir(ENVDIR, S_IRWXU+S_IRWXG+S_IRWXO);
r = toku_os_mkdir(envdir1, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
sprintf(s, "rm -rf %s", datadir1);
r = system(s);
CKERR(r);
r = toku_os_mkdir(datadir1, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
DB_ENV *env;
r = db_env_create(&env, 0);
CKERR(r);
r = env->set_lg_dir(env, datadir0);
CKERR(r);
int envflags = DB_INIT_LOCK | DB_INIT_MPOOL | DB_INIT_TXN | DB_CREATE | DB_PRIVATE | DB_RECOVER;
r = env->open(env, ENVDIR, envflags, S_IRWXU+S_IRWXG+S_IRWXO);
r = env->open(env, envdir0, envflags, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
DB_ENV *env2;
r = db_env_create(&env2, 0);
CKERR(r);
r = env2->open(env2, ENVDIR, envflags, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR2(r, EWOULDBLOCK);
r = env2->set_lg_dir(env2, datadir1);
CKERR(r);
r = env2->open(env2, envdir1, envflags, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR2(r, expect_open_return);
r = env->close(env, 0);
CKERR(r);
r = env2->open(env2, ENVDIR, envflags, S_IRWXU+S_IRWXG+S_IRWXO);
if (expect_open_return != 0) {
r = env2->open(env2, envdir1, envflags, S_IRWXU+S_IRWXG+S_IRWXO);
CKERR(r);
}
r = env2->close(env2, 0);
CKERR(r);
}
static char *
full_name(const char *subdir) {
char wd[256];
assert(getcwd(wd, sizeof wd) != NULL);
char *path = toku_malloc(strlen(wd) + strlen(subdir) + 1);
sprintf(path, "%s%s", wd, subdir);
return path;
}
int
test_main (int argc, char * const argv[]) {
parse_args(argc, argv);
const char *env0 = ENVDIR "e0";
const char *env1 = ENVDIR "e1";
test_env(env0, env1, 0);
test_env(env0, env0, EWOULDBLOCK);
char *data0 = full_name(ENVDIR "d0");
char *data1 = full_name(ENVDIR "d1");
test_datadir(env0, data0, env1, data1, 0);
test_datadir(env0, data0, env1, data0, EWOULDBLOCK);
test_logdir(env0, data0, env1, data1, 0);
test_logdir(env0, data0, env1, data0, EWOULDBLOCK);
toku_free(data0);
toku_free(data1);
return 0;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment