summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorVictor Toso <victortoso@redhat.com>2016-05-23 10:32:33 +0200
committerVictor Toso <victortoso@redhat.com>2016-07-07 16:19:23 +0200
commit95c570274f2e041e12c5eefbe6494d8c5dcce1d6 (patch)
tree29e168b32b9a5ba258b05bf4e5d231d6c1029967 /tests
parent5dc16d27c081047410c6be2beae18bb0f6c2fc9e (diff)
tests: file-transfer agent cancel
Agent only can only send error or cancel from a transfer operation after it was initialized. From SpiceFileTransferTask point of view, error and cancellation is an GError with different code so testing only cancel seems enough. Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/file-transfer.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/tests/file-transfer.c b/tests/file-transfer.c
index 59db201..d4d216d 100644
--- a/tests/file-transfer.c
+++ b/tests/file-transfer.c
@@ -279,6 +279,64 @@ test_cancel_after_read_async(Fixture *f, gconstpointer user_data)
g_main_loop_run (f->loop);
}
+/*******************************************************************************
+ * TEST AGENT CANCEL ON READ
+ ******************************************************************************/
+
+static void
+transfer_agent_cancelled_read_async_cb(GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ SpiceFileTransferTask *xfer_task;
+ gssize count;
+ char *buffer;
+ GError *error = NULL;
+
+ xfer_task = SPICE_FILE_TRANSFER_TASK(source_object);
+ count = spice_file_transfer_task_read_finish(xfer_task, res, &buffer, &error);
+ g_assert_error(error, SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED);
+ g_assert_cmpint(count, ==, -1);
+
+ transfer_xfer_task_on_finished(NULL, NULL, user_data);
+}
+
+static void
+transfer_on_init_async_cb_agent_cancel(GObject *obj, GAsyncResult *res, gpointer data)
+{
+ GFileInfo *info;
+ SpiceFileTransferTask *xfer_task;
+ GError *error = NULL;
+ GCancellable *cancellable;
+
+ xfer_task = SPICE_FILE_TRANSFER_TASK(obj);
+ info = spice_file_transfer_task_init_task_finish(xfer_task, res, &error);
+ g_assert_no_error(error);
+ g_assert_nonnull(info);
+
+ spice_file_transfer_task_read_async(xfer_task, transfer_agent_cancelled_read_async_cb, data);
+
+ error = g_error_new(SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
+ "transfer is cancelled by spice agent");
+ spice_file_transfer_task_completed(xfer_task, error);
+}
+
+static void
+test_agent_cancel_on_read(Fixture *f, gconstpointer user_data)
+{
+ GHashTableIter iter;
+ gpointer key, value;
+
+ f->xfer_tasks = spice_file_transfer_task_create_tasks(f->files, NULL, G_FILE_COPY_NONE, NULL);
+ g_hash_table_iter_init(&iter, f->xfer_tasks);
+ while (g_hash_table_iter_next(&iter, &key, &value)) {
+ SpiceFileTransferTask *xfer_task = SPICE_FILE_TRANSFER_TASK(value);
+ g_signal_connect(xfer_task, "finished", G_CALLBACK(transfer_xfer_task_on_finished), f);
+ spice_file_transfer_task_init_task_async(xfer_task, transfer_on_init_async_cb_agent_cancel, f);
+ }
+ g_main_loop_run (f->loop);
+}
+
/* Tests summary:
*
* This tests are specific to SpiceFileTransferTask in order to verify:
@@ -340,6 +398,10 @@ int main(int argc, char* argv[])
Fixture, GUINT_TO_POINTER(SINGLE_FILE),
f_setup, test_cancel_after_read_async, f_teardown);
+ g_test_add("/spice-file-transfer-task/single/agent/cancel",
+ Fixture, GUINT_TO_POINTER(SINGLE_FILE),
+ f_setup, test_agent_cancel_on_read, f_teardown);
+
g_test_add("/spice-file-transfer-task/multiple/simple-transfer",
Fixture, GUINT_TO_POINTER(MULTIPLE_FILES),
f_setup, test_simple_transfer, f_teardown);
@@ -360,5 +422,9 @@ int main(int argc, char* argv[])
Fixture, GUINT_TO_POINTER(MULTIPLE_FILES),
f_setup, test_cancel_after_read_async, f_teardown);
+ g_test_add("/spice-file-transfer-task/multiple/agent/cancel",
+ Fixture, GUINT_TO_POINTER(MULTIPLE_FILES),
+ f_setup, test_agent_cancel_on_read, f_teardown);
+
return g_test_run();
}