#include <iostream>
#include <fcntl.h>
#include <assert.h>
#include <errno.h>
#include <db_cxx.h>
#include <memory.h>

int verbose;

#define DIR  __FILE__ ".dir"
#define FNAME "test.tdb"

int test_error_stream(void) {
    int r;

    system("rm -rf " DIR);
    toku_os_mkdir(DIR, 0777);

    DbEnv env(DB_CXX_NO_EXCEPTIONS);
    env.set_errpfx("my_env_error_stream");
    env.set_error_stream(&std::cerr);
    
    r = env.open(DIR, DB_INIT_MPOOL + DB_CREATE + DB_PRIVATE, 0777); assert(r == 0);
    r = env.open(DIR, DB_INIT_MPOOL + DB_CREATE + DB_PRIVATE, 0777); assert(r == EINVAL);

    Db db(&env, 0);
    db.set_errpfx("my_db_error_stream");
    db.set_error_stream(&std::cerr);
    r = db.open(NULL, FNAME, 0, DB_BTREE, DB_CREATE, 0777); assert(r == 0);
    r = db.close(0); assert(r == 0);
    r = db.close(0); assert(r == EINVAL);
    r = env.close(0); assert(r == 0);
    r = env.close(0); assert(r == EINVAL);
    return 0;
}

int usage() {
    printf("test_error_stream [-v] [--verbose]\n");
    return 1;
}

int main(int argc, char *argv[]) {
    for (int i=1; i<argc; i++) {
        char *arg = argv[i];
        if (0 == strcmp(arg, "-h") || 0 == strcmp(arg, "--help")) {
            return usage();
        }
        if (0 == strcmp(arg, "-v") || 0 == strcmp(arg, "--verbose")) {
            verbose = 1; continue;
        }
    }

    return test_error_stream();
}