From: <svn...@op...> - 2009-03-23 15:55:43
|
Author: bellmich Date: Mon Mar 23 16:55:38 2009 New Revision: 1007 URL: http://libsyncml.opensync.org/changeset/1007 Log: added code to test the http server transport Modified: trunk/tests/check_libsoup.c Modified: trunk/tests/check_libsoup.c ============================================================================== --- trunk/tests/check_libsoup.c Mon Mar 23 15:48:13 2009 (r1006) +++ trunk/tests/check_libsoup.c Mon Mar 23 16:55:38 2009 (r1007) @@ -34,6 +34,8 @@ #endif static int server_messages; +static int server_connects; +static int server_disconnects; static int server_errors; static int client_messages; @@ -129,6 +131,7 @@ SmlThread *server_thread; SmlQueue *queue; SoupServer *server; +SmlLink *server_link; static void init_server(unsigned int port) { smlTrace(TRACE_ENTRY, "%s", __func__); @@ -204,7 +207,7 @@ } -SmlBool _recv_client_event( +SmlBool _recv_event( SmlTransport *tsp, SmlLink *link, SmlTransportEventType type, @@ -214,24 +217,59 @@ { smlTrace(TRACE_ENTRY, "%s(%d)", __func__, type); - sml_fail_unless(GPOINTER_TO_INT(userdata) == 1, NULL); + int source = GPOINTER_TO_INT(userdata); switch (type) { case SML_TRANSPORT_EVENT_CONNECT_DONE: - g_atomic_int_inc(&client_connects); + if (source == 1) + g_atomic_int_inc(&client_connects); + else + g_atomic_int_inc(&server_connects); break; case SML_TRANSPORT_EVENT_DISCONNECT_DONE: - g_atomic_int_inc(&client_disconnects); + if (source == 1) + g_atomic_int_inc(&client_disconnects); + else + g_atomic_int_inc(&server_disconnects); break; case SML_TRANSPORT_EVENT_DATA: - sml_fail_unless(!strcmp(data->data, "answer"), NULL); - sml_fail_unless(data->size == 6, NULL); - sml_fail_unless(data->type == SML_MIMETYPE_XML, NULL); - g_atomic_int_inc(&client_messages); + sml_fail_unless(1 <= source && source <= 2, NULL); + if (source == 1) { + sml_fail_unless(!strcmp(data->data, "answer"), NULL); + sml_fail_unless(data->size == 6, NULL); + sml_fail_unless(data->type == SML_MIMETYPE_XML, NULL); + g_atomic_int_inc(&client_messages); + } else { + if (link) { + server_link = link; + smlLinkRef(server_link); + } + + sml_fail_unless(!strcmp(data->data, "test"), NULL); + sml_fail_unless(data->size == 4, NULL); + sml_fail_unless(data->type == SML_MIMETYPE_XML, NULL); + g_atomic_int_inc(&server_messages); + + SmlTransportData *data; + data = smlTransportDataNew( + "answer", 6, + SML_MIMETYPE_XML, FALSE, + &error); + sml_fail_unless(data != NULL, NULL); + sml_fail_unless(error == NULL, NULL); + + sml_fail_unless(smlTransportSend(tsp, server_link, data, &error), NULL); + sml_fail_unless(error == NULL, NULL); + + smlTransportDataDeref(data); + } break; case SML_TRANSPORT_EVENT_ERROR: sml_fail_unless(error != NULL, NULL); - g_atomic_int_inc(&client_errors); + if (source == 1) + g_atomic_int_inc(&client_errors); + else + g_atomic_int_inc(&server_errors); break; default: sml_fail_unless(FALSE, "An unexpected transport event %d was received.", type); @@ -251,7 +289,7 @@ SmlTransport *client = smlTransportNew(SML_TRANSPORT_HTTP_CLIENT, &error); sml_fail_unless(smlTransportSetConfigOption(client, "URL", url, &error), NULL); - smlTransportSetEventCallback(client, _recv_client_event, GINT_TO_POINTER(1)); + smlTransportSetEventCallback(client, _recv_event, GINT_TO_POINTER(1)); sml_fail_unless(smlTransportInitialize(client, &error), "%s", smlErrorPrint(&error)); /* send test message */ @@ -385,6 +423,42 @@ } END_TEST +START_TEST (libsoup_http_server) +{ + smlTrace(TRACE_ENTRY, "%s", __func__); + init_testbed(); + SmlError *error = NULL; + + /* init server transport */ + + SmlTransport *server = smlTransportNew(SML_TRANSPORT_HTTP_SERVER, &error); + sml_fail_unless(server != NULL, "%s", smlErrorPrint(&error)); + sml_fail_unless(smlTransportSetConfigOption(server, "PORT", "13003", &error), NULL); + smlTransportSetEventCallback(server, _recv_event, GINT_TO_POINTER(2)); + sml_fail_unless(smlTransportInitialize(server, &error), "%s", smlErrorPrint(&error)); + + /* client stuff */ + + run_transport_client("http://127.0.0.1:13003"); + + /* cleanup server transport */ + + sml_fail_unless(smlTransportDisconnect(server, server_link, &error), NULL); + smlLinkDeref(server_link); + int64_t sleep_max = 5000000000LL; + int64_t sleep_interval = 50000000; + int64_t sleep_total = 0; + while (server_disconnects < 1 && sleep_total < sleep_max) + { + sml_sleep(sleep_interval); + sleep_total += sleep_interval; + } + sml_fail_unless(sleep_total < sleep_max, "server disconnect timed out"); + sml_fail_unless(smlTransportFinalize(server, &error), NULL); + smlTransportFree(server); +} +END_TEST + Suite *http_suite(void) { Suite *s = suite_create("libsoup validation"); @@ -392,6 +466,7 @@ create_case(s, "libsoup_async", libsoup_async); create_case(s, "libsoup_http_client", libsoup_http_client); + create_case(s, "libsoup_http_server", libsoup_http_server); return s; } |