telepathy-logger: tests: Add a test for log-walker/get-events

Nicolas Dufresne nicolasd at kemper.freedesktop.org
Tue Aug 28 13:01:08 PDT 2012


Module: telepathy-logger
Branch: master
Commit: 7fe417ebfcf7e86d5b2db51f9b3cb19abe54a4af
URL:    http://cgit.freedesktop.org/telepathy/telepathy-logger/commit/?id=7fe417ebfcf7e86d5b2db51f9b3cb19abe54a4af

Author: Debarshi Ray <debarshir at freedesktop.org>
Date:   Tue Aug 28 13:43:23 2012 +0200

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

---

 tests/dbus/Makefile.am           |    1 +
 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 at 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 at 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;
+}



More information about the telepathy-commits mailing list