diff --git a/src/backend/postgres/test/.cvsignore b/src/backend/postgres/test/.cvsignore index bfc22c2b30..39c324c265 100644 --- a/src/backend/postgres/test/.cvsignore +++ b/src/backend/postgres/test/.cvsignore @@ -2,4 +2,3 @@ Makefile Makefile.in gnc_test test-db -test-file-* diff --git a/src/backend/postgres/test/Makefile.am b/src/backend/postgres/test/Makefile.am index 1d31cf075c..95b198846b 100644 --- a/src/backend/postgres/test/Makefile.am +++ b/src/backend/postgres/test/Makefile.am @@ -32,5 +32,3 @@ INCLUDES = \ EXTRA_DIST = \ db-control.sh -CLEANFILES = test-file-* - diff --git a/src/backend/postgres/test/run-tests.sh b/src/backend/postgres/test/run-tests.sh index c11fd4feda..88a7e8ebc4 100755 --- a/src/backend/postgres/test/run-tests.sh +++ b/src/backend/postgres/test/run-tests.sh @@ -17,6 +17,5 @@ diff -u test-file-1 test-file-2 || EXIT_VALUE=1 if test $EXIT_VALUE != 0; then exit $EXIT_VALUE; fi #./db-control.sh destroy -rm -f test-file-* exit $EXIT_VALUE diff --git a/src/backend/postgres/test/test-db.c b/src/backend/postgres/test/test-db.c index 323ab9adbb..492161f2e0 100644 --- a/src/backend/postgres/test/test-db.c +++ b/src/backend/postgres/test/test-db.c @@ -16,33 +16,12 @@ static void run_test (void) { GNCBook *book; + GNCBook *book_db; GNCBackendError io_err; - char cwd[1024]; char *filename; book = get_random_book (); - getcwd (cwd, sizeof (cwd)); - - filename = g_strconcat ("file:/", cwd, "/test-file-1", NULL); - gnc_book_begin (book, filename, FALSE, TRUE); - g_free (filename); - - io_err = gnc_book_get_error (book); - if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Beginning test-file-1")) - return; - - gnc_book_save (book); - if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Saving test-file-1")) - return; - - gnc_book_end (book); - if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Ending test-file-1")) - return; - - if (!do_test (gnc_book_get_url (book) == NULL, "book url not NULL")) - return; - filename = g_strdup ("postgres://localhost:7777/gnc_test?mode=single-file"); gnc_book_begin (book, filename, FALSE, TRUE); @@ -58,58 +37,48 @@ run_test (void) if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Ending gnc_test")) return; - gnc_book_destroy (book); + if (!do_test (gnc_book_get_url (book) == NULL, "book url not NULL")) + return; - book = gnc_book_new (); + book_db = gnc_book_new (); - gnc_book_begin (book, filename, FALSE, FALSE); + gnc_book_begin (book_db, filename, FALSE, FALSE); g_free (filename); - io_err = gnc_book_get_error (book); + io_err = gnc_book_get_error (book_db); if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Beginning gnc_test load")) return; - gnc_book_load (book); + gnc_book_load (book_db); if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Loading gnc_test")) return; - gnc_book_end (book); + gnc_book_end (book_db); if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Ending gnc_test load")) return; - filename = g_strconcat ("file:/", cwd, "/test-file-2", NULL); - gnc_book_begin (book, filename, FALSE, TRUE); - g_free (filename); - - io_err = gnc_book_get_error (book); - if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Beginning test-file-2")) - return; - - gnc_book_save (book); - if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Saving test-file-2")) - return; - - gnc_book_end (book); - if (!do_test (io_err == ERR_BACKEND_NO_ERR, "Ending test-file-2")) - return; + do_test (gnc_book_equal (book, book_db), "Books not equal"); } static void guile_main (int argc, char **argv) { - GNCBook *book; - gnc_module_system_init (); gnc_module_load ("gnucash/engine", 0); glist_exclude_type (KVP_TYPE_BINARY); glist_exclude_type (KVP_TYPE_GLIST); + /* The random double generator is making values * that postgres doesn't like. */ glist_exclude_type (KVP_TYPE_DOUBLE); + set_max_kvp_depth (3); set_max_kvp_frame_elements (3); + set_max_group_depth (3); + set_max_group_accounts (5); + xaccLogDisable (); run_test (); @@ -121,7 +90,7 @@ guile_main (int argc, char **argv) int main (int argc, char ** argv) { - getchar (); + /* getchar (); */ gh_enter (argc, argv, guile_main); diff --git a/src/engine/gnc-book.c b/src/engine/gnc-book.c index 84180904b7..fa2d00666d 100644 --- a/src/engine/gnc-book.c +++ b/src/engine/gnc-book.c @@ -738,6 +738,26 @@ gnc_book_destroy (GNCBook *book) LEAVE(" "); } +gboolean +gnc_book_equal (GNCBook *book_1, GNCBook *book_2) +{ + if (book_1 == book_2) return TRUE; + if (!book_1 || !book_2) return FALSE; + + if (!xaccGroupEqual (gnc_book_get_group (book_1), + gnc_book_get_group (book_2), + TRUE)) + return FALSE; + + if (!gnc_pricedb_equal (gnc_book_get_pricedb (book_1), + gnc_book_get_pricedb (book_2))) + return FALSE; + + /* FIXME: do scheduled transactions and template group */ + + return TRUE; +} + gboolean gnc_book_events_pending (GNCBook *book) { diff --git a/src/engine/gnc-book.h b/src/engine/gnc-book.h index f47def413e..b80881c3e7 100644 --- a/src/engine/gnc-book.h +++ b/src/engine/gnc-book.h @@ -182,6 +182,10 @@ gboolean gnc_book_save_may_clobber_data (GNCBook *book); void gnc_book_save (GNCBook *book); void gnc_book_end (GNCBook *book); +/* The gnc_book_equal() method returns TRUE if the engine data + * in the two given books is equal. */ +gboolean gnc_book_equal (GNCBook *book_1, GNCBook *book_2); + /* The gnc_book_events_pending() method will return TRUE if the backend * has pending events which must be processed to bring the engine * up to date with the backend. diff --git a/src/engine/test-core/test-engine-stuff.c b/src/engine/test-core/test-engine-stuff.c index 8fa1e979fb..4c8f396ce4 100644 --- a/src/engine/test-core/test-engine-stuff.c +++ b/src/engine/test-core/test-engine-stuff.c @@ -23,12 +23,26 @@ static GHashTable *exclude_kvp_types = NULL; static gint kvp_max_depth = G_MAXINT; static gint kvp_frame_max_elements = 10; +static gint max_group_depth = 4; +static gint max_group_accounts = 10; static kvp_value* get_random_kvp_value_depth (int type, gint depth); /***********************************************************************/ +void +set_max_group_depth (gint max_group_depth_in) +{ + max_group_depth = MAX (max_group_depth_in, 1); +} + +void +set_max_group_accounts (gint max_group_accounts_in) +{ + max_group_accounts = MAX (max_group_accounts_in, 1); +} + void set_max_kvp_depth (gint max_kvp_depth) { @@ -427,7 +441,8 @@ get_random_group_depth(int depth) group = xaccMallocAccountGroup (); - num_accounts = get_random_int_in_range (1, 10); + num_accounts = get_random_int_in_range (1, max_group_accounts); + while (num_accounts-- > 0) { Account *account = get_random_account (); @@ -445,7 +460,7 @@ get_random_group(void) { int depth; - depth = get_random_int_in_range (1, 4); + depth = get_random_int_in_range (1, max_group_depth); return get_random_group_depth (depth); } diff --git a/src/engine/test-core/test-engine-stuff.h b/src/engine/test-core/test-engine-stuff.h index e3c16b70d4..b56e2a7211 100644 --- a/src/engine/test-core/test-engine-stuff.h +++ b/src/engine/test-core/test-engine-stuff.h @@ -34,6 +34,8 @@ void random_glist_strings_only (gboolean strings_only); void glist_exclude_type (kvp_value_t kvp_type); void set_max_kvp_depth (gint max_kvp_depth); void set_max_kvp_frame_elements (gint max_kvp_frame_elements); +void set_max_group_depth (gint max_group_depth); +void set_max_group_accounts (gint max_group_accounts); GNCPrice * get_random_price(void); void make_random_pricedb (GNCPriceDB *pdb);