|
|
|
|
@ -20,7 +20,7 @@ save_xml_file (GNCSession *session, const char *filename_base)
|
|
|
|
|
char cwd[1024];
|
|
|
|
|
char *filename;
|
|
|
|
|
|
|
|
|
|
g_return_if_fail (session && filename);
|
|
|
|
|
g_return_if_fail (session && filename_base);
|
|
|
|
|
|
|
|
|
|
getcwd (cwd, sizeof (cwd));
|
|
|
|
|
|
|
|
|
|
@ -51,66 +51,206 @@ save_xml_files (GNCSession *session_1, GNCSession *session_2)
|
|
|
|
|
save_xml_file (session_2, "test_file_2");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
run_test (void)
|
|
|
|
|
static char *
|
|
|
|
|
db_file_url (const char *db_name, const char *mode)
|
|
|
|
|
{
|
|
|
|
|
g_return_val_if_fail (db_name && mode, NULL);
|
|
|
|
|
|
|
|
|
|
return g_strdup_printf ("postgres://localhost:7777/%s?mode=%s",
|
|
|
|
|
db_name, mode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
|
save_db_file (GNCSession *session, const char *db_name, const char *mode)
|
|
|
|
|
{
|
|
|
|
|
GNCSession *session;
|
|
|
|
|
GNCSession *session_db;
|
|
|
|
|
GNCBackendError io_err;
|
|
|
|
|
char *filename;
|
|
|
|
|
gboolean ok;
|
|
|
|
|
|
|
|
|
|
session = get_random_session ();
|
|
|
|
|
g_return_val_if_fail (session && db_name && mode, FALSE);
|
|
|
|
|
|
|
|
|
|
add_random_transactions_to_session (session,
|
|
|
|
|
get_random_int_in_range (1, 20));
|
|
|
|
|
|
|
|
|
|
filename = g_strdup ("postgres://localhost:7777/gnc_test?mode=single-file");
|
|
|
|
|
filename = db_file_url (db_name, mode);
|
|
|
|
|
|
|
|
|
|
gnc_session_begin (session, filename, FALSE, TRUE);
|
|
|
|
|
io_err = gnc_session_get_error (session);
|
|
|
|
|
if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Beginning gnc_test"))
|
|
|
|
|
return;
|
|
|
|
|
if (!do_test_args (io_err == ERR_BACKEND_NO_ERR,
|
|
|
|
|
"Beginning db session",
|
|
|
|
|
__FILE__, __LINE__,
|
|
|
|
|
"can't begin session for %s in mode %s",
|
|
|
|
|
db_name, mode))
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
gnc_session_save (session);
|
|
|
|
|
io_err = gnc_session_get_error (session);
|
|
|
|
|
if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Saving gnc_test"))
|
|
|
|
|
return;
|
|
|
|
|
if (!do_test_args (io_err == ERR_BACKEND_NO_ERR,
|
|
|
|
|
"Saving db session",
|
|
|
|
|
__FILE__, __LINE__,
|
|
|
|
|
"can't save session for %s in mode %s",
|
|
|
|
|
db_name, mode))
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
gnc_session_end (session);
|
|
|
|
|
io_err = gnc_session_get_error (session);
|
|
|
|
|
if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Ending gnc_test"))
|
|
|
|
|
return;
|
|
|
|
|
if (!do_test_args (io_err == ERR_BACKEND_NO_ERR,
|
|
|
|
|
"Ending db session",
|
|
|
|
|
__FILE__, __LINE__,
|
|
|
|
|
"can't end session for %s in mode %s",
|
|
|
|
|
db_name, mode))
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
if (!do_test (gnc_session_get_url (session) == NULL, "session url not NULL"))
|
|
|
|
|
return;
|
|
|
|
|
do_test (gnc_session_get_url (session) == NULL, "session url not NULL");
|
|
|
|
|
|
|
|
|
|
session_db = gnc_session_new ();
|
|
|
|
|
g_free (filename);
|
|
|
|
|
|
|
|
|
|
gnc_session_begin (session_db, filename, FALSE, FALSE);
|
|
|
|
|
io_err = gnc_session_get_error (session_db);
|
|
|
|
|
if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Beginning gnc_test load"))
|
|
|
|
|
return;
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gnc_session_load (session_db);
|
|
|
|
|
io_err = gnc_session_get_error (session_db);
|
|
|
|
|
if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Loading gnc_test"))
|
|
|
|
|
return;
|
|
|
|
|
static gboolean
|
|
|
|
|
load_db_file (GNCSession *session, const char *db_name, const char *mode)
|
|
|
|
|
{
|
|
|
|
|
GNCBackendError io_err;
|
|
|
|
|
char *filename;
|
|
|
|
|
|
|
|
|
|
gnc_session_end (session_db);
|
|
|
|
|
io_err = gnc_session_get_error (session_db);
|
|
|
|
|
if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Ending gnc_test load"))
|
|
|
|
|
return;
|
|
|
|
|
g_return_val_if_fail (session && db_name && mode, FALSE);
|
|
|
|
|
|
|
|
|
|
filename = db_file_url (db_name, mode);
|
|
|
|
|
|
|
|
|
|
gnc_session_begin (session, filename, FALSE, FALSE);
|
|
|
|
|
io_err = gnc_session_get_error (session);
|
|
|
|
|
if (!do_test_args (io_err == ERR_BACKEND_NO_ERR,
|
|
|
|
|
"Beginning db session",
|
|
|
|
|
__FILE__, __LINE__,
|
|
|
|
|
"can't begin session for %s in mode %s",
|
|
|
|
|
db_name, mode))
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
gnc_session_load (session);
|
|
|
|
|
io_err = gnc_session_get_error (session);
|
|
|
|
|
if (!do_test_args (io_err == ERR_BACKEND_NO_ERR,
|
|
|
|
|
"Loading db session",
|
|
|
|
|
__FILE__, __LINE__,
|
|
|
|
|
"can't load session for %s in mode %s",
|
|
|
|
|
db_name, mode))
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
gnc_session_end (session);
|
|
|
|
|
io_err = gnc_session_get_error (session);
|
|
|
|
|
if (!do_test_args (io_err == ERR_BACKEND_NO_ERR,
|
|
|
|
|
"Ending db session",
|
|
|
|
|
__FILE__, __LINE__,
|
|
|
|
|
"can't end session for %s in mode %s",
|
|
|
|
|
db_name, mode))
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
do_test (gnc_session_get_url (session) == NULL, "session url not NULL");
|
|
|
|
|
|
|
|
|
|
g_free (filename);
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
|
test_access (const char *db_name, const char *mode, gboolean multi_user)
|
|
|
|
|
{
|
|
|
|
|
GNCBackendError io_err;
|
|
|
|
|
GNCSession *session_1;
|
|
|
|
|
GNCSession *session_2;
|
|
|
|
|
char *filename;
|
|
|
|
|
|
|
|
|
|
g_return_val_if_fail (db_name && mode, FALSE);
|
|
|
|
|
|
|
|
|
|
filename = db_file_url (db_name, mode);
|
|
|
|
|
|
|
|
|
|
session_1 = gnc_session_new ();
|
|
|
|
|
|
|
|
|
|
gnc_session_begin (session_1, filename, FALSE, FALSE);
|
|
|
|
|
io_err = gnc_session_get_error (session_1);
|
|
|
|
|
if (!do_test_args (io_err == ERR_BACKEND_NO_ERR,
|
|
|
|
|
"Beginning db session",
|
|
|
|
|
__FILE__, __LINE__,
|
|
|
|
|
"can't begin session for %s in mode %s",
|
|
|
|
|
db_name, mode))
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
session_2 = gnc_session_new ();
|
|
|
|
|
|
|
|
|
|
gnc_session_begin (session_1, filename, FALSE, FALSE);
|
|
|
|
|
io_err = gnc_session_get_error (session_1);
|
|
|
|
|
|
|
|
|
|
if (multi_user)
|
|
|
|
|
{
|
|
|
|
|
if (!do_test_args (io_err == ERR_BACKEND_NO_ERR,
|
|
|
|
|
"Beginning second multi-user db session",
|
|
|
|
|
__FILE__, __LINE__,
|
|
|
|
|
"can't begin second session for %s in mode %s",
|
|
|
|
|
db_name, mode))
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (!do_test_args (io_err != ERR_BACKEND_NO_ERR,
|
|
|
|
|
"Beginning second single-user db session",
|
|
|
|
|
__FILE__, __LINE__,
|
|
|
|
|
"began second session for %s in mode %s",
|
|
|
|
|
db_name, mode))
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gnc_session_destroy (session_1);
|
|
|
|
|
gnc_session_destroy (session_2);
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
|
test_mode (const char *db_name, const char *mode,
|
|
|
|
|
gboolean updates, gboolean multi_user)
|
|
|
|
|
{
|
|
|
|
|
GNCSession *session;
|
|
|
|
|
GNCSession *session_db;
|
|
|
|
|
gboolean ok;
|
|
|
|
|
|
|
|
|
|
session = get_random_session ();
|
|
|
|
|
|
|
|
|
|
add_random_transactions_to_session (session,
|
|
|
|
|
get_random_int_in_range (1, 20));
|
|
|
|
|
|
|
|
|
|
if (!save_db_file (session, db_name, mode))
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
session_db = gnc_session_new ();
|
|
|
|
|
|
|
|
|
|
if (!load_db_file (session_db, db_name, mode))
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
ok = gnc_book_equal (gnc_session_get_book (session),
|
|
|
|
|
gnc_session_get_book (session_db));
|
|
|
|
|
|
|
|
|
|
do_test (ok, "Books not equal");
|
|
|
|
|
do_test_args (ok, "Books equal", __FILE__, __LINE__,
|
|
|
|
|
"Books not equal for session %s in mode %s",
|
|
|
|
|
db_name, mode);
|
|
|
|
|
|
|
|
|
|
if (!ok)
|
|
|
|
|
{
|
|
|
|
|
save_xml_files (session, session_db);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
g_free (filename);
|
|
|
|
|
ok = test_access (db_name, mode, multi_user);
|
|
|
|
|
|
|
|
|
|
gnc_session_destroy (session);
|
|
|
|
|
gnc_session_destroy (session_db);
|
|
|
|
|
|
|
|
|
|
return ok;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
run_test (void)
|
|
|
|
|
{
|
|
|
|
|
if (!test_mode ("single_file", "single-file", FALSE, FALSE))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!test_mode ("single_update", "single-update", FALSE, FALSE))
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
|