/* Given a synthetic session, use the same logic as * QofSession::save_as to save it to a specified sql url, then load it * back and compare. */ void test_dbi_store_and_reload( const gchar* driver, QofSession* session_1, const gchar* url ) { QofSession* session_2; QofSession* session_3; gchar *msg = "[gnc_dbi_unlock()] There was no lock entry in the Lock table"; gchar *log_domain = "gnc.backend.dbi"; guint loglevel = G_LOG_LEVEL_WARNING, hdlr; TestErrorStruct check = { loglevel, log_domain, msg }; g_test_message ( "Testing %s\n", driver ); // Save the session data session_2 = qof_session_new(); hdlr = g_log_set_handler (log_domain, loglevel, (GLogFunc)test_checked_handler, &check); qof_session_begin( session_2, url, FALSE, TRUE, TRUE ); if (session_2 && qof_session_get_error(session_2) != ERR_BACKEND_NO_ERR) { g_warning("Session Error: %d, %s", qof_session_get_error(session_2), qof_session_get_error_message(session_2)); do_test( FALSE, "First DB Session Creation Failed"); return; } qof_session_swap_data( session_1, session_2 ); qof_session_save( session_2, NULL ); if (session_2 && qof_session_get_error(session_2) != ERR_BACKEND_NO_ERR) { g_warning("Session Error: %s", qof_session_get_error_message(session_2)); do_test( FALSE, "First DB Session Save Failed"); return; } // Reload the session data session_3 = qof_session_new(); qof_session_begin( session_3, url, TRUE, FALSE, FALSE ); if (session_3 && qof_session_get_error(session_3) != ERR_BACKEND_NO_ERR) { g_warning("Session Error: %s", qof_session_get_error_message(session_3)); do_test( FALSE, "Second DB Session Creation Failed"); return; } qof_session_load( session_3, NULL ); if (session_3 && qof_session_get_error(session_3) != ERR_BACKEND_NO_ERR) { g_warning("Session Error: %s", qof_session_get_error_message(session_3)); do_test( FALSE, "Second DBI Session Load Failed"); return; } // Compare with the original data compare_books( qof_session_get_book( session_2 ), qof_session_get_book( session_3 ) ); qof_session_end( session_1 ); qof_session_destroy( session_1 ); qof_session_end( session_2 ); qof_session_destroy( session_2 ); qof_session_end( session_3 ); qof_session_destroy( session_3 ); g_log_remove_handler (log_domain, hdlr); }
/* Given an already-created url (yeah, bad testing practice: Should * start fresh from a synthetic session) load and safe-save it, then * load it again into a new session and compare the two. Since * safe-save is a more-or-less atomic function call, there's no way to * be sure that it's actually doing what it's supposed to without * running this test in a debugger and stopping in the middle of the * safe-save and inspecting the database. */ void test_dbi_safe_save( const gchar* driver, const gchar* url ) { QofSession *session_1 = NULL, *session_2 = NULL; printf( "Testing safe save %s\n", driver ); // Load the session data session_1 = qof_session_new(); qof_session_begin( session_1, url, TRUE, FALSE, FALSE ); if (session_1 && qof_session_get_error(session_1) != ERR_BACKEND_NO_ERR) { g_warning("Session Error: %d, %s", qof_session_get_error(session_1), qof_session_get_error_message(session_1)); do_test( FALSE, "DB Session Creation Failed"); goto cleanup; } qof_session_load( session_1, NULL ); /* Do a safe save */ qof_session_safe_save( session_1, NULL ); if (session_1 && qof_session_get_error(session_1) != ERR_BACKEND_NO_ERR) { g_warning("Session Error: %s", qof_session_get_error_message(session_1)); do_test( FALSE, "DB Session Safe Save Failed"); goto cleanup; } /* Destroy the session and reload it */ session_2 = qof_session_new(); qof_session_begin( session_2, url, TRUE, FALSE, FALSE ); if (session_2 && qof_session_get_error(session_2) != ERR_BACKEND_NO_ERR) { g_warning("Session Error: %d, %s", qof_session_get_error(session_2), qof_session_get_error_message(session_2)); do_test( FALSE, "DB Session re-creation Failed"); goto cleanup; } qof_session_load( session_2, NULL ); compare_books( qof_session_get_book( session_1 ), qof_session_get_book( session_2 ) ); cleanup: if (session_2 != NULL) { qof_session_end( session_2 ); qof_session_destroy( session_2 ); } if (session_1 != NULL) { qof_session_end( session_1 ); qof_session_destroy( session_1 ); } return; }
/* Given a synthetic session, use the same logic as * QofSession::save_as to save it to a specified sql url, then load it * back and compare. */ void test_dbi_store_and_reload( const gchar* driver, QofSession* session_1, const gchar* url ) { QofSession* session_2; QofSession* session_3; printf( "Testing %s\n", driver ); // Save the session data session_2 = qof_session_new(); qof_session_begin( session_2, url, FALSE, TRUE, TRUE ); if (session_2 && qof_session_get_error(session_2) != ERR_BACKEND_NO_ERR) { g_warning("Session Error: %d, %s", qof_session_get_error(session_2), qof_session_get_error_message(session_2)); do_test( FALSE, "First DB Session Creation Failed"); return; } qof_session_swap_data( session_1, session_2 ); qof_session_save( session_2, NULL ); if (session_2 && qof_session_get_error(session_2) != ERR_BACKEND_NO_ERR) { g_warning("Session Error: %s", qof_session_get_error_message(session_2)); do_test( FALSE, "First DB Session Save Failed"); return; } // Reload the session data session_3 = qof_session_new(); qof_session_begin( session_3, url, TRUE, FALSE, FALSE ); if (session_3 && qof_session_get_error(session_3) != ERR_BACKEND_NO_ERR) { g_warning("Session Error: %s", qof_session_get_error_message(session_3)); do_test( FALSE, "Second DB Session Creation Failed"); return; } qof_session_load( session_3, NULL ); if (session_3 && qof_session_get_error(session_3) != ERR_BACKEND_NO_ERR) { g_warning("Session Error: %s", qof_session_get_error_message(session_3)); do_test( FALSE, "Second DBI Session Load Failed"); return; } // Compare with the original data compare_books( qof_session_get_book( session_2 ), qof_session_get_book( session_3 ) ); qof_session_end( session_1 ); qof_session_destroy( session_1 ); qof_session_end( session_2 ); qof_session_destroy( session_2 ); g_print(" You may ignore the warning about the lock file having no entries: We had to ignore locking to run two sessions on the same database\n"); qof_session_end( session_3 ); qof_session_destroy( session_3 ); }
void test_dbi_business_store_and_reload( const gchar* driver, QofSession* session_1, const gchar* url ) { QofSession* session_2; QofSession* session_3; gchar *msg = "[gnc_dbi_unlock()] There was no lock entry in the Lock table"; gchar *log_domain = "gnc.backend.dbi"; guint loglevel = G_LOG_LEVEL_WARNING, hdlr; TestErrorStruct check = { loglevel, log_domain, msg }; g_test_message ( "Testing %s\n", driver ); // Save the session data session_2 = qof_session_new(); qof_session_begin( session_2, url, FALSE, TRUE, TRUE ); qof_session_swap_data( session_1, session_2 ); qof_session_save( session_2, NULL ); // Reload the session data session_3 = qof_session_new(); qof_session_begin( session_3, url, TRUE, FALSE, FALSE ); qof_session_load( session_3, NULL ); // Compare with the original data compare_books( qof_session_get_book( session_2 ), qof_session_get_book( session_3 ) ); qof_session_end( session_1 ); qof_session_destroy( session_1 ); qof_session_end( session_2 ); qof_session_destroy( session_2 ); hdlr = g_log_set_handler (log_domain, loglevel, (GLogFunc)test_checked_handler, &check); qof_session_end( session_3 ); g_log_remove_handler (log_domain, hdlr); qof_session_destroy( session_3 ); }
/* Given an already-created url (yeah, bad testing practice: Should * start fresh from a synthetic session) load and safe-save it, then * load it again into a new session and compare the two. Since * safe-save is a more-or-less atomic function call, there's no way to * be sure that it's actually doing what it's supposed to without * running this test in a debugger and stopping in the middle of the * safe-save and inspecting the database. */ void test_dbi_safe_save( const gchar* driver, const gchar* url ) { QofSession *session_1 = NULL, *session_2 = NULL; gchar *msg = "[gnc_dbi_unlock()] There was no lock entry in the Lock table"; gchar *log_domain = "gnc.backend.dbi"; guint loglevel = G_LOG_LEVEL_WARNING, hdlr; TestErrorStruct check = { loglevel, log_domain, msg }; g_test_message ( "Testing safe save %s\n", driver ); // Load the session data session_1 = qof_session_new(); qof_session_begin( session_1, url, TRUE, FALSE, FALSE ); if (session_1 && qof_session_get_error(session_1) != ERR_BACKEND_NO_ERR) { g_warning("Session Error: %d, %s", qof_session_get_error(session_1), qof_session_get_error_message(session_1)); do_test( FALSE, "DB Session Creation Failed"); goto cleanup; } qof_session_load( session_1, NULL ); /* Do a safe save */ qof_session_safe_save( session_1, NULL ); if (session_1 && qof_session_get_error(session_1) != ERR_BACKEND_NO_ERR) { g_warning("Session Error: %s", qof_session_get_error_message(session_1)); do_test( FALSE, "DB Session Safe Save Failed"); goto cleanup; } /* Destroy the session and reload it */ session_2 = qof_session_new(); qof_session_begin( session_2, url, TRUE, FALSE, FALSE ); if (session_2 && qof_session_get_error(session_2) != ERR_BACKEND_NO_ERR) { g_warning("Session Error: %d, %s", qof_session_get_error(session_2), qof_session_get_error_message(session_2)); do_test( FALSE, "DB Session re-creation Failed"); goto cleanup; } qof_session_load( session_2, NULL ); compare_books( qof_session_get_book( session_1 ), qof_session_get_book( session_2 ) ); cleanup: hdlr = g_log_set_handler (log_domain, loglevel, (GLogFunc)test_checked_handler, &check); if (session_2 != NULL) { qof_session_end( session_2 ); qof_session_destroy( session_2 ); } if (session_1 != NULL) { qof_session_end( session_1 ); qof_session_destroy( session_1 ); } g_log_remove_handler (log_domain, hdlr); return; }