mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-20 11:48:30 -06:00
Test locking. Start test for single-update mode.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@5655 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
27f6b35365
commit
6fe7f08a51
@ -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,13 +51,162 @@ 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)
|
||||
{
|
||||
GNCBackendError io_err;
|
||||
char *filename;
|
||||
|
||||
g_return_val_if_fail (session && db_name && mode, FALSE);
|
||||
|
||||
filename = db_file_url (db_name, mode);
|
||||
|
||||
gnc_session_begin (session, filename, FALSE, TRUE);
|
||||
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_save (session);
|
||||
io_err = gnc_session_get_error (session);
|
||||
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_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
|
||||
load_db_file (GNCSession *session, const char *db_name, const char *mode)
|
||||
{
|
||||
GNCBackendError io_err;
|
||||
char *filename;
|
||||
|
||||
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;
|
||||
GNCBackendError io_err;
|
||||
char *filename;
|
||||
gboolean ok;
|
||||
|
||||
session = get_random_session ();
|
||||
@ -65,52 +214,43 @@ run_test (void)
|
||||
add_random_transactions_to_session (session,
|
||||
get_random_int_in_range (1, 20));
|
||||
|
||||
filename = g_strdup ("postgres://localhost:7777/gnc_test?mode=single-file");
|
||||
|
||||
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;
|
||||
|
||||
gnc_session_save (session);
|
||||
io_err = gnc_session_get_error (session);
|
||||
if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Saving gnc_test"))
|
||||
return;
|
||||
|
||||
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 (gnc_session_get_url (session) == NULL, "session url not NULL"))
|
||||
return;
|
||||
if (!save_db_file (session, db_name, mode))
|
||||
return FALSE;
|
||||
|
||||
session_db = gnc_session_new ();
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user