summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRoss Burton <ross@linux.intel.com>2009-02-10 15:41:06 +0000
committerRoss Burton <ross@linux.intel.com>2009-02-10 15:57:19 +0000
commit0154679b9d4f798b9a3390ceb97de23d81f2b987 (patch)
treebfc13a84ee8dd4d6100de15197a22a92dd797ddb /tests
parent64e7b1fa57bc5c2ed4c2f74a9a5aef74dd4fc967 (diff)
Add a very basic test suite
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am8
-rw-r--r--tests/echo.c116
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;
+}