diff options
author | Debarshi Ray <debarshir@freedesktop.org> | 2012-08-28 13:43:23 +0200 |
---|---|---|
committer | Debarshi Ray <debarshir@freedesktop.org> | 2012-08-28 19:37:59 +0200 |
commit | 7fe417ebfcf7e86d5b2db51f9b3cb19abe54a4af (patch) | |
tree | 09b41ae22a6f35654b925a34b2f4c60e6719c898 /tests | |
parent | 4c512c2f37529f45021f955d4cc64a6e9ec7f895 (diff) | |
download | telepathy-logger-7fe417ebfcf7e86d5b2db51f9b3cb19abe54a4af.tar.gz |
tests: Add a test for log-walker/get-events
... to cover events coming from multiple stores spanning several days
where multiple events might have the same timestamp.
Fixes: https://bugs.freedesktop.org/41772
Diffstat (limited to 'tests')
-rw-r--r-- | tests/dbus/Makefile.am | 1 | ||||
-rw-r--r-- | tests/dbus/test-tpl-log-walker.c | 293 |
2 files changed, 294 insertions, 0 deletions
diff --git a/tests/dbus/Makefile.am b/tests/dbus/Makefile.am index 624aa16..f0540cf 100644 --- a/tests/dbus/Makefile.am +++ b/tests/dbus/Makefile.am @@ -6,6 +6,7 @@ noinst_PROGRAMS = \ test-tpl-log-store-sqlite \ test-tpl-log-store-xml \ test-tpl-log-iter-xml \ + test-tpl-log-walker \ test-tpl-observer \ $(NULL) diff --git a/tests/dbus/test-tpl-log-walker.c b/tests/dbus/test-tpl-log-walker.c new file mode 100644 index 0000000..cde0f7f --- /dev/null +++ b/tests/dbus/test-tpl-log-walker.c @@ -0,0 +1,293 @@ +#include "lib/simple-account.h" +#include "lib/util.h" + +#include "telepathy-logger/call-event.h" +#include "telepathy-logger/log-manager.h" +#include "telepathy-logger/text-event.h" + +#include <telepathy-glib/telepathy-glib.h> +#include <glib.h> + +#define DEBUG_FLAG TPL_DEBUG_TESTSUITE + + +typedef struct +{ + GList *events; + GMainLoop *main_loop; + TplLogManager *manager; + TpAccount *account; + TpDBusDaemon *bus; + TpSimpleClientFactory *factory; + TpTestsSimpleAccount *account_service; +} WalkerTestCaseFixture; + + +static void +account_prepare_cb (GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + WalkerTestCaseFixture *fixture = user_data; + GError *error = NULL; + + tp_proxy_prepare_finish (source, result, &error); + g_assert_no_error (error); + + g_main_loop_quit (fixture->main_loop); +} + + +static void +setup (WalkerTestCaseFixture* fixture, + gconstpointer user_data) +{ + GArray *features; + GError *error = NULL; + GHashTable *params = (GHashTable *) user_data; + GValue *boxed_params; + const gchar *account_path; + + fixture->main_loop = g_main_loop_new (NULL, FALSE); + g_assert (fixture->main_loop != NULL); + + fixture->manager = tpl_log_manager_dup_singleton (); + + fixture->bus = tp_tests_dbus_daemon_dup_or_die (); + g_assert (fixture->bus != NULL); + + tp_dbus_daemon_request_name (fixture->bus, + TP_ACCOUNT_MANAGER_BUS_NAME, + FALSE, + &error); + g_assert_no_error (error); + + /* Create service-side Account object with the passed parameters */ + fixture->account_service = g_object_new (TP_TESTS_TYPE_SIMPLE_ACCOUNT, + NULL); + g_assert (fixture->account_service != NULL); + + /* account-path will be set-up as parameter as well, this is not an issue */ + account_path = tp_asv_get_string (params, "account-path"); + g_assert (account_path != NULL); + + boxed_params = tp_g_value_slice_new_boxed (TP_HASH_TYPE_STRING_VARIANT_MAP, + params); + g_object_set_property (G_OBJECT (fixture->account_service), + "parameters", + boxed_params); + tp_g_value_slice_free (boxed_params); + + tp_dbus_daemon_register_object (fixture->bus, + account_path, + fixture->account_service); + + fixture->factory = tp_simple_client_factory_new (fixture->bus); + g_assert (fixture->factory != NULL); + + fixture->account = tp_simple_client_factory_ensure_account (fixture->factory, + tp_asv_get_string (params, "account-path"), + params, + &error); + g_assert_no_error (error); + g_assert (fixture->account != NULL); + + features = tp_simple_client_factory_dup_account_features (fixture->factory, + fixture->account); + + tp_proxy_prepare_async (fixture->account, + (GQuark *) features->data, + account_prepare_cb, + fixture); + g_free (features->data); + g_array_free (features, FALSE); + + g_main_loop_run (fixture->main_loop); + + tp_debug_divert_messages (g_getenv ("TPL_LOGFILE")); + +#ifdef ENABLE_DEBUG + _tpl_debug_set_flags_from_env (); +#endif /* ENABLE_DEBUG */ +} + + +static void +teardown (WalkerTestCaseFixture *fixture, + gconstpointer user_data) +{ + GError *error = NULL; + + tp_dbus_daemon_release_name (fixture->bus, + TP_ACCOUNT_MANAGER_BUS_NAME, + &error); + g_assert_no_error (error); + + g_clear_object (&fixture->account); + g_clear_object (&fixture->factory); + + tp_dbus_daemon_unregister_object (fixture->bus, fixture->account_service); + g_clear_object (&fixture->account_service); + + g_clear_object (&fixture->bus); + g_clear_object (&fixture->manager); + g_main_loop_unref (fixture->main_loop); +} + + +static void +get_events_cb (GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + WalkerTestCaseFixture *fixture = user_data; + GError *error = NULL; + + tpl_log_walker_get_events_finish (TPL_LOG_WALKER (source), + result, + &fixture->events, + &error); + g_assert_no_error (error); + + g_main_loop_quit (fixture->main_loop); +} + + +static void +get_events (WalkerTestCaseFixture *fixture, + TplLogWalker *walker, + guint num_events) +{ + tpl_log_walker_get_events_async (walker, num_events, get_events_cb, fixture); + g_main_loop_run (fixture->main_loop); +} + + +static void +test_get_events_call (WalkerTestCaseFixture *fixture, + TplLogWalker *walker, + guint num_events, + gint64 timestamp, + GTimeSpan duration) +{ + GList *events; + + get_events (fixture, walker, num_events); + + events = fixture->events; + g_assert (events != NULL); + g_assert_cmpuint (g_list_length (events), ==, num_events); + g_assert_cmpint (tpl_event_get_timestamp (TPL_EVENT (events->data)), + ==, + timestamp); + g_assert_cmpint (tpl_call_event_get_duration (TPL_CALL_EVENT (events->data)), + ==, + duration); + g_list_free_full (events, g_object_unref); +} + + +static void +test_get_events_text (WalkerTestCaseFixture *fixture, + TplLogWalker *walker, + guint num_events, + gint64 timestamp, + const gchar *message) +{ + GList *events; + + get_events (fixture, walker, num_events); + + events = fixture->events; + g_assert (events != NULL); + g_assert_cmpuint (g_list_length (events), ==, num_events); + g_assert_cmpint (tpl_event_get_timestamp (TPL_EVENT (events->data)), + ==, + timestamp); + g_assert_cmpstr (tpl_text_event_get_message (TPL_TEXT_EVENT (events->data)), + ==, + message); + g_list_free_full (events, g_object_unref); +} + + +static void +test_get_events (WalkerTestCaseFixture *fixture, + gconstpointer user_data) +{ + GList *events; + TplEntity *user5; + TplLogWalker *walker; + + user5 = tpl_entity_new ("user5@collabora.co.uk", TPL_ENTITY_CONTACT, + "User5", ""); + + walker = tpl_log_manager_walk_filtered_events (fixture->manager, + fixture->account, + user5, + TPL_EVENT_MASK_ANY, + NULL, + NULL); + + get_events (fixture, walker, 0); + test_get_events_text (fixture, walker, 2, 1263427264, "L''"); + test_get_events_text (fixture, walker, 5, 1263427262, "J"); + test_get_events_text (fixture, walker, 1, 1263427261, "I'''"); + test_get_events_text (fixture, walker, 5, 1263427205, "12"); + test_get_events_text (fixture, walker, 2, 1263427202, "11'"); + test_get_events_call (fixture, walker, 4, 1263404881, 1); + test_get_events_text (fixture, walker, 4, 1263254401, "5''"); + test_get_events_text (fixture, walker, 2, 1263254401, "5"); + get_events (fixture, walker, 0); + test_get_events_text (fixture, walker, 3, 1263168066, "H'"); + test_get_events_text (fixture, walker, 3, 1263168065, "G''"); + test_get_events_text (fixture, walker, 6, 1263168063, "E"); + test_get_events_text (fixture, walker, 1, 1263168062, "D''"); + test_get_events_text (fixture, walker, 2, 1263168062, "D"); + get_events (fixture, walker, 0); + test_get_events_text (fixture, walker, 4, 1263168005, "4"); + test_get_events_text (fixture, walker, 2, 1263168003, "2"); + test_get_events_text (fixture, walker, 4, 1263081661, "A"); + + tpl_log_walker_get_events_async (walker, 2, get_events_cb, fixture); + g_main_loop_run (fixture->main_loop); + + events = fixture->events; + g_assert (events == NULL); + + g_object_unref (walker); + g_object_unref (user5); +} + + +gint main (gint argc, gchar **argv) +{ + GHashTable *params; + gint retval; + + g_type_init (); + + g_test_init (&argc, &argv, NULL); + g_test_bug_base ("http://bugs.freedesktop.org/show_bug.cgi?id="); + + params = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, + (GDestroyNotify) tp_g_value_slice_free); + g_assert (params != NULL); + + g_hash_table_insert (params, "account", + tp_g_value_slice_new_static_string ("user@collabora.co.uk")); + g_hash_table_insert (params, "account-path", + tp_g_value_slice_new_static_string ( + TP_ACCOUNT_OBJECT_PATH_BASE + "gabble/jabber/user_40collabora_2eco_2euk")); + + g_test_add ("/log-walker/get-events", + WalkerTestCaseFixture, params, + setup, test_get_events, teardown); + + retval = g_test_run (); + + g_hash_table_unref (params); + + return retval; +} |