diff options
author | Ross Burton <ross@linux.intel.com> | 2009-02-10 15:41:06 +0000 |
---|---|---|
committer | Ross Burton <ross@linux.intel.com> | 2009-02-10 15:57:19 +0000 |
commit | 0154679b9d4f798b9a3390ceb97de23d81f2b987 (patch) | |
tree | bfc13a84ee8dd4d6100de15197a22a92dd797ddb /tests | |
parent | 64e7b1fa57bc5c2ed4c2f74a9a5aef74dd4fc967 (diff) | |
download | librest-0154679b9d4f798b9a3390ceb97de23d81f2b987.tar.gz |
Add a very basic test suite
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 8 | ||||
-rw-r--r-- | tests/echo.c | 116 |
2 files changed, 124 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index e69de29..ce582bb 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -0,0 +1,8 @@ +TESTS = echo + +AM_CPPFLAGS = $(SOUP_CFLAGS) -I$(top_srcdir) +AM_LDFLAGS = $(SOUP_LIBS) ../rest/librest.la + +check_PROGRAMS = echo + +echo_SOURCES = echo.c diff --git a/tests/echo.c b/tests/echo.c new file mode 100644 index 0000000..f951b3f --- /dev/null +++ b/tests/echo.c @@ -0,0 +1,116 @@ +#include <string.h> +#include <libsoup/soup.h> +#include <rest/rest-proxy.h> + +static int errors = 0; + +static void +server_callback (SoupServer *server, SoupMessage *msg, + const char *path, GHashTable *query, + SoupClientContext *client, gpointer user_data) +{ + if (g_str_equal (path, "/echo")) { + const char *value; + + value = g_hash_table_lookup (query, "value"); + soup_message_set_response (msg, "text/plain", SOUP_MEMORY_COPY, + value, strlen (value)); + soup_message_set_status (msg, SOUP_STATUS_OK); + } else if (g_str_equal (path, "/reverse")) { + char *value; + + value = g_strdup (g_hash_table_lookup (query, "value")); + g_strreverse (value); + + soup_message_set_response (msg, "text/plain", SOUP_MEMORY_TAKE, + value, strlen (value)); + soup_message_set_status (msg, SOUP_STATUS_OK); + } +} + +static void +echo_test (RestProxy *proxy) +{ + RestProxyCall *call; + GError *error = NULL; + + call = rest_proxy_new_call (proxy); + rest_proxy_call_set_function (call, "echo"); + rest_proxy_call_add_param (call, "value", "echome"); + + if (!rest_proxy_call_run (call, NULL, &error)) { + g_printerr ("Call failed: %s\n", error->message); + g_error_free (error); + errors++; + g_object_unref (call); + return; + } + + if (rest_proxy_call_get_payload_length (call) != 6) { + g_printerr ("wrong length returned\n"); + errors++; + return; + } + if (strcmp ("echome", rest_proxy_call_get_payload (call)) != 0) { + g_printerr ("wrong string returned\n"); + errors++; + return; + } +} + +static void +reverse_test (RestProxy *proxy) +{ + RestProxyCall *call; + GError *error = NULL; + + call = rest_proxy_new_call (proxy); + rest_proxy_call_set_function (call, "reverse"); + rest_proxy_call_add_param (call, "value", "reverseme"); + + if (!rest_proxy_call_run (call, NULL, &error)) { + g_printerr ("Call failed: %s\n", error->message); + g_error_free (error); + errors++; + g_object_unref (call); + return; + } + + if (rest_proxy_call_get_payload_length (call) != 9) { + g_printerr ("wrong length returned\n"); + errors++; + return; + } + if (strcmp ("emesrever", rest_proxy_call_get_payload (call)) != 0) { + g_printerr ("wrong string returned\n"); + errors++; + return; + } +} + +int +main (int argc, char **argv) +{ + SoupSession *session; + SoupServer *server; + char *url; + RestProxy *proxy; + + g_thread_init (NULL); + g_type_init (); + + session = soup_session_async_new (); + + server = soup_server_new (NULL); + soup_server_add_handler (server, NULL, server_callback, NULL, NULL); + soup_server_run_async (server); + + url = g_strdup_printf ("http://localhost:%d/", soup_server_get_port (server)); + proxy = rest_proxy_new (url, FALSE); + g_free (url); + + echo_test (proxy); + reverse_test (proxy); + + return errors != 0; +} |