summaryrefslogtreecommitdiff
path: root/tests/dbus/test-tpl-log-store-pidgin.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/dbus/test-tpl-log-store-pidgin.c')
-rw-r--r--tests/dbus/test-tpl-log-store-pidgin.c571
1 files changed, 571 insertions, 0 deletions
diff --git a/tests/dbus/test-tpl-log-store-pidgin.c b/tests/dbus/test-tpl-log-store-pidgin.c
new file mode 100644
index 0000000..bcaaeb3
--- /dev/null
+++ b/tests/dbus/test-tpl-log-store-pidgin.c
@@ -0,0 +1,571 @@
+/* FIXME: hugly kludge: we need to include all the declarations which are used
+ * by the GInterface and thus not in the -internal.h */
+#include "../../telepathy-logger/log-store-pidgin.c"
+
+
+#include "../lib/util.h"
+#include "../lib/simple-account.h"
+#include "../lib/simple-account-manager.h"
+
+#include <telepathy-logger/log-store-pidgin-internal.h>
+#include <telepathy-logger/event-text-internal.h>
+
+#include <telepathy-glib/debug-sender.h>
+
+/* it was defined in telepathy-logger/log-store-pidgin.c */
+#undef DEBUG_FLAG
+#define DEBUG_FLAG TPL_DEBUG_TESTSUITE
+#include <telepathy-logger/debug-internal.h>
+
+#include <glib.h>
+
+#define ACCOUNT_PATH_JABBER TP_ACCOUNT_OBJECT_PATH_BASE "foo/jabber/baz"
+#define ACCOUNT_PATH_IRC TP_ACCOUNT_OBJECT_PATH_BASE "foo/irc/baz"
+
+typedef struct
+{
+ gchar *basedir;
+
+ GMainLoop *main_loop;
+
+ TpDBusDaemon *dbus;
+ TpAccount *account;
+ TpTestsSimpleAccount *account_service;
+
+ TplLogStorePidgin *store;
+} PidginTestCaseFixture;
+
+#ifdef ENABLE_DEBUG
+static TpDebugSender *debug_sender = NULL;
+static gboolean stamp_logs = FALSE;
+
+
+static void
+log_to_debug_sender (const gchar *log_domain,
+ GLogLevelFlags log_level,
+ const gchar *string)
+{
+ GTimeVal now;
+
+ g_return_if_fail (TP_IS_DEBUG_SENDER (debug_sender));
+
+ g_get_current_time (&now);
+
+ tp_debug_sender_add_message (debug_sender, &now, log_domain, log_level,
+ string);
+}
+
+
+static void
+log_handler (const gchar *log_domain,
+ GLogLevelFlags log_level,
+ const gchar *message,
+ gpointer user_data)
+{
+ if (stamp_logs)
+ {
+ GTimeVal now;
+ gchar now_str[32];
+ gchar *tmp;
+ struct tm tm;
+
+ g_get_current_time (&now);
+ localtime_r (&(now.tv_sec), &tm);
+ strftime (now_str, 32, "%Y-%m-%d %H:%M:%S", &tm);
+ tmp = g_strdup_printf ("%s.%06ld: %s",
+ now_str, now.tv_usec, message);
+
+ g_log_default_handler (log_domain, log_level, tmp, NULL);
+
+ g_free (tmp);
+ }
+ else
+ {
+ g_log_default_handler (log_domain, log_level, message, NULL);
+ }
+
+ log_to_debug_sender (log_domain, log_level, message);
+}
+#endif /* ENABLE_DEBUG */
+
+
+static void
+account_prepare_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ PidginTestCaseFixture *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_service (PidginTestCaseFixture* fixture,
+ gconstpointer user_data)
+{
+ GQuark account_features[] = { TP_ACCOUNT_FEATURE_CORE, 0 };
+ const gchar *account_path;
+ GValue *boxed_params;
+ GHashTable *params = (GHashTable *) user_data;
+ GError *error = NULL;
+
+ g_assert (params != NULL);
+
+ fixture->dbus = tp_tests_dbus_daemon_dup_or_die ();
+ g_assert (fixture->dbus != NULL);
+
+ tp_dbus_daemon_request_name (fixture->dbus,
+ 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 = g_value_get_string (
+ (const GValue *) g_hash_table_lookup (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_dbus_daemon_register_object (fixture->dbus, account_path,
+ fixture->account_service);
+
+ fixture->account = tp_account_new (fixture->dbus, account_path, NULL);
+ g_assert (fixture->account != NULL);
+ tp_proxy_prepare_async (fixture->account, account_features,
+ account_prepare_cb, fixture);
+ g_main_loop_run (fixture->main_loop);
+
+ g_assert (tp_account_is_prepared (fixture->account,
+ TP_ACCOUNT_FEATURE_CORE));
+
+ tp_g_value_slice_free (boxed_params);
+}
+
+static void
+setup (PidginTestCaseFixture* fixture,
+ gconstpointer user_data)
+{
+ DEBUG ("setting up");
+
+ fixture->main_loop = g_main_loop_new (NULL, FALSE);
+ g_assert (fixture->main_loop != NULL);
+
+ fixture->basedir = g_build_path (G_DIR_SEPARATOR_S,
+ g_getenv ("TPL_TEST_LOG_DIR"), "purple", NULL);
+ DEBUG ("basedir is %s", fixture->basedir);
+
+ fixture->store = g_object_new (TPL_TYPE_LOG_STORE_PIDGIN,
+ "name", "testcase",
+ "testmode", TRUE,
+ NULL);
+
+ if (user_data != NULL)
+ setup_service (fixture, user_data);
+
+ DEBUG ("set up finished");
+}
+
+static void
+teardown_service (PidginTestCaseFixture* fixture,
+ gconstpointer user_data)
+{
+ GError *error = NULL;
+
+ g_assert (user_data != NULL);
+
+ if (fixture->account != NULL)
+ {
+ /* FIXME is it useful in this suite */
+ tp_tests_proxy_run_until_dbus_queue_processed (fixture->account);
+
+ g_object_unref (fixture->account);
+ fixture->account = NULL;
+ }
+
+ tp_dbus_daemon_unregister_object (fixture->dbus, fixture->account_service);
+ g_object_unref (fixture->account_service);
+ fixture->account_service = NULL;
+
+ tp_dbus_daemon_release_name (fixture->dbus, TP_ACCOUNT_MANAGER_BUS_NAME,
+ &error);
+ g_assert_no_error (error);
+
+ g_object_unref (fixture->dbus);
+ fixture->dbus = NULL;
+}
+
+static void
+teardown (PidginTestCaseFixture* fixture,
+ gconstpointer user_data)
+{
+ g_free (fixture->basedir);
+ fixture->basedir = NULL;
+
+ g_object_unref (fixture->store);
+ fixture->store = NULL;
+
+ if (user_data != NULL)
+ teardown_service (fixture, user_data);
+
+ g_main_loop_unref (fixture->main_loop);
+ fixture->main_loop = NULL;
+}
+
+static void
+test_basedir (PidginTestCaseFixture *fixture,
+ gconstpointer user_data)
+{
+ TplLogStorePidgin *store;
+ gchar *dir;
+
+ g_assert_cmpstr (log_store_pidgin_get_basedir (fixture->store), ==,
+ fixture->basedir);
+
+ /* try to instantiate the default store, without passing basedir, it has to
+ * match the real libpurple basedir */
+ store = g_object_new (TPL_TYPE_LOG_STORE_PIDGIN,
+ "name", "testcase",
+ "readable", FALSE,
+ "writable", FALSE,
+ NULL);
+ dir = g_build_path (G_DIR_SEPARATOR_S, g_get_home_dir (), ".purple",
+ "logs", NULL);
+ g_assert_cmpstr (log_store_pidgin_get_basedir (store), ==, dir);
+
+ g_object_unref (store);
+ g_free (dir);
+}
+
+static void
+test_get_dates_jabber (PidginTestCaseFixture *fixture,
+ gconstpointer user_data)
+{
+ GList *dates = NULL;
+ GDate *date = NULL;
+
+ /* Chatroom messages */
+ dates = log_store_pidgin_get_dates (TPL_LOG_STORE (fixture->store), fixture->account,
+ "test@conference.collabora.co.uk", TPL_EVENT_SEARCH_TEXT_ROOM);
+
+ g_assert_cmpint (g_list_length (dates), ==, 2);
+
+ date = g_list_nth_data (dates, 0);
+ g_assert_cmpint (0, ==,
+ g_date_compare (date, g_date_new_dmy (12, G_DATE_APRIL, 2010)));
+
+ g_date_free (date);
+
+ date = g_list_nth_data (dates, 1);
+ g_assert_cmpint (0, ==,
+ g_date_compare (date, g_date_new_dmy (29, G_DATE_APRIL, 2010)));
+
+ g_date_free (date);
+ g_list_free (dates);
+
+ /* 1-1 messages */
+ dates = log_store_pidgin_get_dates (TPL_LOG_STORE (fixture->store), fixture->account,
+ "user2@collabora.co.uk", TPL_EVENT_SEARCH_TEXT);
+
+ g_assert_cmpint (g_list_length (dates), ==, 1);
+
+ date = g_list_nth_data (dates, 0);
+ g_assert_cmpint (0, ==,
+ g_date_compare (date, g_date_new_dmy (10, G_DATE_DECEMBER, 2010)));
+
+ g_date_free (date);
+ g_list_free (dates);
+}
+
+static void
+test_get_dates_irc (PidginTestCaseFixture *fixture,
+ gconstpointer user_data)
+{
+ GList *dates = NULL;
+ GDate *date = NULL;
+
+ dates = log_store_pidgin_get_dates (TPL_LOG_STORE (fixture->store), fixture->account,
+ "#telepathy", TPL_EVENT_SEARCH_TEXT_ROOM);
+
+ g_assert_cmpint (g_list_length (dates), ==, 1);
+
+ date = g_list_nth_data (dates, 0);
+ g_assert_cmpint (0, ==,
+ g_date_compare (date, g_date_new_dmy (30, G_DATE_NOVEMBER, 2010)));
+
+ g_list_foreach (dates, (GFunc) g_date_free, NULL);
+ g_list_free (dates);
+}
+
+static void
+test_get_time (PidginTestCaseFixture *fixture,
+ gconstpointer user_data)
+{
+ GDate *date;
+
+ date = log_store_pidgin_get_time ("2010-04-29.140346+0100BST.html");
+
+ g_assert_cmpint (g_date_get_day (date), ==, 29);
+ g_assert_cmpint (g_date_get_month (date), ==, G_DATE_APRIL);
+ g_assert_cmpint (g_date_get_year (date), ==, 2010);
+
+ g_date_free (date);
+}
+
+static void
+test_get_name (PidginTestCaseFixture *fixture,
+ gconstpointer user_data)
+{
+ const gchar *name;
+
+ name = log_store_pidgin_get_name (TPL_LOG_STORE (fixture->store));
+
+ g_assert_cmpstr (name, ==, "testcase");
+}
+
+static void
+test_get_events_for_date_jabber (PidginTestCaseFixture *fixture,
+ gconstpointer user_data)
+{
+ GList *l;
+ TplEventText *msg = NULL;
+ GDate *date = g_date_new_dmy (12, G_DATE_APRIL, 2010);
+
+ /* chatroom messages */
+ l = log_store_pidgin_get_events_for_date (TPL_LOG_STORE (fixture->store),
+ fixture->account,
+ "test@conference.collabora.co.uk", TPL_EVENT_SEARCH_TEXT_ROOM,
+ date);
+
+ g_assert_cmpint (g_list_length (l), ==, 6);
+
+ msg = g_list_nth_data (l, 0);
+ g_assert (_tpl_event_text_is_chatroom (msg) == TRUE);
+ g_assert_cmpstr (tpl_event_text_get_message (msg), ==, NULL);
+
+ g_list_foreach (l, (GFunc) g_object_unref, NULL);
+ g_list_free (l);
+
+ /* 1-1 messages */
+ g_date_set_dmy (date, 10, G_DATE_DECEMBER, 2010);
+ l = log_store_pidgin_get_events_for_date (TPL_LOG_STORE (fixture->store),
+ fixture->account,
+ "user2@collabora.co.uk", FALSE,
+ date);
+
+ g_assert_cmpint (g_list_length (l), ==, 2);
+
+ msg = g_list_nth_data (l, 0);
+ g_assert (_tpl_event_text_is_chatroom (msg) == FALSE);
+ g_assert_cmpstr (tpl_event_text_get_message (msg), ==, NULL);
+
+ g_list_foreach (l, (GFunc) g_object_unref, NULL);
+ g_list_free (l);
+
+ g_date_free (date);
+}
+
+static void
+test_get_entities_jabber (PidginTestCaseFixture *fixture,
+ gconstpointer user_data)
+{
+ GList *l = NULL;
+ TplEntity *entity;
+
+ l = log_store_pidgin_get_entities (TPL_LOG_STORE (fixture->store),
+ fixture->account);
+
+ /* FIXME: currently the docstring says it should return both 1-1 and chatrooms
+ * chats, but code for the existing stores only return the 1-1 chats */
+ g_assert_cmpint (g_list_length (l), ==, 1);
+
+ entity = g_list_nth_data (l, 0);
+ g_assert_cmpstr (tpl_entity_get_identifier (entity), ==,
+ "user2@collabora.co.uk");
+ g_assert (tpl_entity_get_entity_type (entity) == TPL_ENTITY_CONTACT);
+
+ g_list_foreach (l, (GFunc) g_object_unref, NULL);
+ g_list_free (l);
+}
+
+static void
+test_search_in_identifier (PidginTestCaseFixture *fixture,
+ gconstpointer user_data)
+{
+ GList *l = NULL;
+ TplLogSearchHit *hit;
+
+ l = log_store_pidgin_search_in_identifier (
+ TPL_LOG_STORE (fixture->store), fixture->account,
+ "user2@collabora.co.uk", TPL_EVENT_SEARCH_TEXT, "bla bla");
+
+ g_assert_cmpint (g_list_length (l), ==, 0);
+
+ tpl_log_manager_search_free (l);
+
+ l = log_store_pidgin_search_in_identifier (
+ TPL_LOG_STORE (fixture->store), fixture->account,
+ "user2@collabora.co.uk", TPL_EVENT_SEARCH_TEXT, "hey you");
+
+ g_assert_cmpint (g_list_length (l), ==, 1);
+ hit = g_list_nth_data (l, 0);
+ g_assert (hit->type == TPL_EVENT_SEARCH_TEXT);
+ g_assert_cmpstr (hit->id, ==, "user2@collabora.co.uk");
+
+ g_assert_cmpint (g_date_get_day (hit->date), ==, 10);
+ g_assert_cmpint (g_date_get_month (hit->date), ==, G_DATE_DECEMBER);
+ g_assert_cmpint (g_date_get_year (hit->date), ==, 2010);
+
+ tpl_log_manager_search_free (l);
+
+ return;
+}
+
+static void
+test_search_new (PidginTestCaseFixture *fixture,
+ gconstpointer user_data)
+{
+ GList *l = NULL;
+ TplLogSearchHit *hit;
+
+ /* empty search */
+ l = log_store_pidgin_search_new (TPL_LOG_STORE (fixture->store),
+ "I do not exist in this log store data base!");
+
+ g_assert_cmpint (g_list_length (l), ==, 0);
+
+ tpl_log_manager_search_free (l);
+
+ /* non empty search matching 1-1 */
+ l = log_store_pidgin_search_new (TPL_LOG_STORE (fixture->store),
+ "hey you");
+
+ g_assert_cmpint (g_list_length (l), ==, 1);
+
+ hit = g_list_nth_data (l, 0);
+
+ tpl_log_manager_search_free (l);
+
+ /* non empty search, checking chatrooms are also searched */
+ l = log_store_pidgin_search_new (TPL_LOG_STORE (fixture->store),
+ "disco remote servers");
+
+ g_assert_cmpint (g_list_length (l), ==, 1);
+
+ hit = g_list_nth_data (l, 0);
+
+ tpl_log_manager_search_free (l);
+}
+
+
+static void
+setup_debug (void)
+{
+ tp_debug_divert_messages (g_getenv ("TPL_LOGFILE"));
+
+#ifdef ENABLE_DEBUG
+ _tpl_debug_set_flags_from_env ();
+
+ stamp_logs = (g_getenv ("TPL_TIMING") != NULL);
+ debug_sender = tp_debug_sender_dup ();
+
+ g_log_set_default_handler (log_handler, NULL);
+#endif /* ENABLE_DEBUG */
+}
+
+
+int
+main (int argc, char **argv)
+{
+ GHashTable *params = NULL;
+ GList *l = NULL;
+ int retval;
+
+ g_type_init ();
+
+ setup_debug ();
+
+ /* no account tests */
+ g_test_init (&argc, &argv, NULL);
+ g_test_bug_base ("http://bugs.freedesktop.org/show_bug.cgi?id=");
+
+ g_test_add ("/log-store-pidgin/get-name",
+ PidginTestCaseFixture, NULL,
+ setup, test_get_name, teardown);
+
+ g_test_add ("/log-store-pidgin/get-time",
+ PidginTestCaseFixture, NULL,
+ setup, test_get_time, teardown);
+
+ /* this searches all over the account in the log stores */
+ g_test_add ("/log-store-pidgin/search-new",
+ PidginTestCaseFixture, NULL,
+ setup, test_search_new, teardown);
+
+ /* jabber account tests */
+ params = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
+ (GDestroyNotify) tp_g_value_slice_free);
+ g_assert (params != NULL);
+
+ l = g_list_prepend (l, params);
+
+ 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 (ACCOUNT_PATH_JABBER));
+
+ g_test_add ("/log-store-pidgin/basedir",
+ PidginTestCaseFixture, params,
+ setup, test_basedir, teardown);
+
+ g_test_add ("/log-store-pidgin/get-dates-jabber",
+ PidginTestCaseFixture, params,
+ setup, test_get_dates_jabber, teardown);
+
+ g_test_add ("/log-store-pidgin/get-events-for-date-jabber",
+ PidginTestCaseFixture, params,
+ setup, test_get_events_for_date_jabber, teardown);
+
+ g_test_add ("/log-store-pidgin/get-entities-jabber",
+ PidginTestCaseFixture, params,
+ setup, test_get_entities_jabber, teardown);
+
+ g_test_add ("/log-store-pidgin/search-in-identifier",
+ PidginTestCaseFixture, params, setup,
+ test_search_in_identifier, teardown);
+
+ /* IRC account tests */
+ params = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
+ (GDestroyNotify) tp_g_value_slice_free);
+ g_assert (params != NULL);
+
+ l = g_list_prepend (l, params);
+
+ g_hash_table_insert (params, "account",
+ tp_g_value_slice_new_static_string ("user"));
+ g_hash_table_insert (params, "server",
+ tp_g_value_slice_new_static_string ("irc.freenode.net"));
+ g_hash_table_insert (params, "account-path",
+ tp_g_value_slice_new_static_string (ACCOUNT_PATH_IRC));
+
+ g_test_add ("/log-store-pidgin/get-dates-irc",
+ PidginTestCaseFixture, params,
+ setup, test_get_dates_irc, teardown);
+
+ retval = g_test_run ();
+
+ g_list_foreach (l, (GFunc) g_hash_table_unref, NULL);
+
+ return retval;
+}