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:
Dave Peticolas 2001-10-15 22:34:12 +00:00
parent 27f6b35365
commit 6fe7f08a51

View File

@ -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