diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2011-05-13 12:24:08 +0200 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2011-05-16 11:03:55 +0200 |
commit | d32d1334148c31f133968d1b1979fd29f8fec2a6 (patch) | |
tree | 2bc904edd58f9e02ca1aaff19d73f260f101a596 | |
parent | 0d7638c507a58911a29e45d7830326bf60aa55d9 (diff) |
test DelegateChannels() refusing to delegate
-rw-r--r-- | tests/dbus/base-client.c | 31 | ||||
-rw-r--r-- | tests/lib/simple-channel-dispatcher.c | 36 | ||||
-rw-r--r-- | tests/lib/simple-channel-dispatcher.h | 2 |
3 files changed, 67 insertions, 2 deletions
diff --git a/tests/dbus/base-client.c b/tests/dbus/base-client.c index b26bfe39..0fe60cd9 100644 --- a/tests/dbus/base-client.c +++ b/tests/dbus/base-client.c @@ -1257,6 +1257,7 @@ test_delegate_channels (Test *test, GPtrArray *requests_satisified; GHashTable *info; GList *chans; + GError *error = NULL; tp_base_client_be_a_handler (test->base_client); @@ -1321,6 +1322,36 @@ test_delegate_channels (Test *test, g_assert (tp_base_client_is_handling_channel (test->base_client, test->text_chan_2)); + /* Try delegating the second channel, but MC refuses */ + test->cd_service->refuse_delegate = TRUE; + + chans = g_list_append (NULL, test->text_chan_2); + + tp_base_client_delegate_channels_async (test->base_client, + chans, TP_USER_ACTION_TIME_CURRENT_TIME, NULL, + delegate_channels_cb, test); + + g_list_free (chans); + + test->wait++; + g_main_loop_run (test->mainloop); + g_assert_no_error (test->error); + + g_assert_cmpuint (test->delegated->len, ==, 0); + g_assert_cmpuint (g_hash_table_size (test->not_delegated), ==, 1); + error = g_hash_table_lookup (test->not_delegated, test->text_chan_2); + g_assert_error (error, TP_ERRORS, TP_ERROR_BUSY); + + /* Client is still handling the channel */ + chans = tp_base_client_get_handled_channels (test->base_client); + g_assert_cmpuint (g_list_length (chans), ==, 1); + g_list_free (chans); + + g_assert (!tp_base_client_is_handling_channel (test->base_client, + test->text_chan)); + g_assert (tp_base_client_is_handling_channel (test->base_client, + test->text_chan_2)); + g_ptr_array_foreach (channels, free_channel_details, NULL); g_ptr_array_free (channels, TRUE); g_ptr_array_free (requests_satisified, TRUE); diff --git a/tests/lib/simple-channel-dispatcher.c b/tests/lib/simple-channel-dispatcher.c index 8f3eb359..283ec64e 100644 --- a/tests/lib/simple-channel-dispatcher.c +++ b/tests/lib/simple-channel-dispatcher.c @@ -246,6 +246,12 @@ tp_tests_simple_channel_dispatcher_ensure_channel_with_hints ( g_free (path); } +static void +free_not_delegated_error (gpointer data) +{ + g_boxed_free (TP_STRUCT_TYPE_NOT_DELEGATED_ERROR, data); +} + static void tp_tests_simple_channel_dispatcher_delegate_channels ( @@ -255,13 +261,39 @@ tp_tests_simple_channel_dispatcher_delegate_channels ( const gchar *preferred_handler, DBusGMethodInvocation *context) { + TpTestsSimpleChannelDispatcher *self = (TpTestsSimpleChannelDispatcher *) + dispatcher; + GPtrArray *delegated; GHashTable *not_delegated; + guint i; + + delegated = g_ptr_array_new (); + not_delegated = g_hash_table_new_full (g_str_hash, g_str_equal, + NULL, free_not_delegated_error); - not_delegated = g_hash_table_new (g_str_hash, g_str_equal); + for (i = 0; i < channels->len; i++) + { + gpointer chan_path = g_ptr_array_index (channels, i); + GValueArray *v; + + if (!self->refuse_delegate) + { + g_ptr_array_add (delegated, chan_path); + continue; + } + + v = tp_value_array_build (2, + G_TYPE_STRING, TP_ERROR_STR_BUSY, + G_TYPE_STRING, "Nah!", + G_TYPE_INVALID); + + g_hash_table_insert (not_delegated, chan_path, v); + } - tp_svc_channel_dispatcher_return_from_delegate_channels (context, channels, + tp_svc_channel_dispatcher_return_from_delegate_channels (context, delegated, not_delegated); + g_ptr_array_unref (delegated); g_hash_table_unref (not_delegated); } diff --git a/tests/lib/simple-channel-dispatcher.h b/tests/lib/simple-channel-dispatcher.h index bcc78f9e..42ba45f7 100644 --- a/tests/lib/simple-channel-dispatcher.h +++ b/tests/lib/simple-channel-dispatcher.h @@ -30,6 +30,8 @@ struct _TpTestsSimpleChannelDispatcher { GObject parent; TpTestsSimpleChannelDispatcherPrivate *priv; + + gboolean refuse_delegate; }; GType tp_tests_simple_channel_dispatcher_get_type (void); |