mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55: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 cwd[1024];
|
||||||
char *filename;
|
char *filename;
|
||||||
|
|
||||||
g_return_if_fail (session && filename);
|
g_return_if_fail (session && filename_base);
|
||||||
|
|
||||||
getcwd (cwd, sizeof (cwd));
|
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");
|
save_xml_file (session_2, "test_file_2");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static char *
|
||||||
run_test (void)
|
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;
|
||||||
GNCSession *session_db;
|
GNCSession *session_db;
|
||||||
GNCBackendError io_err;
|
|
||||||
char *filename;
|
|
||||||
gboolean ok;
|
gboolean ok;
|
||||||
|
|
||||||
session = get_random_session ();
|
session = get_random_session ();
|
||||||
@ -65,52 +214,43 @@ run_test (void)
|
|||||||
add_random_transactions_to_session (session,
|
add_random_transactions_to_session (session,
|
||||||
get_random_int_in_range (1, 20));
|
get_random_int_in_range (1, 20));
|
||||||
|
|
||||||
filename = g_strdup ("postgres://localhost:7777/gnc_test?mode=single-file");
|
if (!save_db_file (session, db_name, mode))
|
||||||
|
return FALSE;
|
||||||
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;
|
|
||||||
|
|
||||||
session_db = gnc_session_new ();
|
session_db = gnc_session_new ();
|
||||||
|
|
||||||
gnc_session_begin (session_db, filename, FALSE, FALSE);
|
if (!load_db_file (session_db, db_name, mode))
|
||||||
io_err = gnc_session_get_error (session_db);
|
return FALSE;
|
||||||
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;
|
|
||||||
|
|
||||||
ok = gnc_book_equal (gnc_session_get_book (session),
|
ok = gnc_book_equal (gnc_session_get_book (session),
|
||||||
gnc_session_get_book (session_db));
|
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)
|
if (!ok)
|
||||||
|
{
|
||||||
save_xml_files (session, session_db);
|
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
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user