|
rpm-build |
4f3c61 |
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
|
rpm-build |
4f3c61 |
/*
|
|
rpm-build |
4f3c61 |
* Copyright 2008 Red Hat, Inc.
|
|
rpm-build |
4f3c61 |
* Copyright 2015, Collabora ltd.
|
|
rpm-build |
4f3c61 |
*/
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
#include "test-utils.h"
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
static char *uri;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
static GVariant *
|
|
rpm-build |
4f3c61 |
parse_params (SoupMessage *msg, SoupXMLRPCParams *params, const char *signature)
|
|
rpm-build |
4f3c61 |
{
|
|
rpm-build |
4f3c61 |
GVariant *args;
|
|
rpm-build |
4f3c61 |
GError *error = NULL;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
args = soup_xmlrpc_params_parse (params, signature, &error);
|
|
rpm-build |
4f3c61 |
if (!args) {
|
|
rpm-build |
4f3c61 |
soup_xmlrpc_message_set_fault (msg,
|
|
rpm-build |
4f3c61 |
SOUP_XMLRPC_FAULT_SERVER_ERROR_INVALID_METHOD_PARAMETERS,
|
|
rpm-build |
4f3c61 |
"Wrong method signature: expected %s: %s",
|
|
rpm-build |
4f3c61 |
signature, error->message);
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
return args;
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
static void
|
|
rpm-build |
4f3c61 |
do_sum (SoupMessage *msg, SoupXMLRPCParams *params)
|
|
rpm-build |
4f3c61 |
{
|
|
rpm-build |
4f3c61 |
GVariant *args;
|
|
rpm-build |
4f3c61 |
GVariant *child;
|
|
rpm-build |
4f3c61 |
GVariantIter iter;
|
|
rpm-build |
4f3c61 |
double sum = 0.0, val;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
if (!(args = parse_params (msg, params, "(ad)")))
|
|
rpm-build |
4f3c61 |
return;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
child = g_variant_get_child_value (args, 0);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
g_variant_iter_init (&iter, child);
|
|
rpm-build |
4f3c61 |
while (g_variant_iter_loop (&iter, "d", &val))
|
|
rpm-build |
4f3c61 |
sum += val;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
soup_xmlrpc_message_set_response (msg, g_variant_new_double (sum), NULL);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
g_variant_unref (args);
|
|
rpm-build |
4f3c61 |
g_variant_unref (child);
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
static void
|
|
rpm-build |
4f3c61 |
do_countBools (SoupMessage *msg, SoupXMLRPCParams *params)
|
|
rpm-build |
4f3c61 |
{
|
|
rpm-build |
4f3c61 |
GVariant *args;
|
|
rpm-build |
4f3c61 |
GVariant *child;
|
|
rpm-build |
4f3c61 |
GVariantIter iter;
|
|
rpm-build |
4f3c61 |
gboolean val;
|
|
rpm-build |
4f3c61 |
int trues = 0, falses = 0;
|
|
rpm-build |
4f3c61 |
GVariantDict dict;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
if (!(args = parse_params (msg, params, "(ab)")))
|
|
rpm-build |
4f3c61 |
return;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
child = g_variant_get_child_value (args, 0);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
g_variant_iter_init (&iter, child);
|
|
rpm-build |
4f3c61 |
while (g_variant_iter_loop (&iter, "b", &val)) {
|
|
rpm-build |
4f3c61 |
if (val)
|
|
rpm-build |
4f3c61 |
trues++;
|
|
rpm-build |
4f3c61 |
else
|
|
rpm-build |
4f3c61 |
falses++;
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
g_variant_dict_init (&dict, NULL);
|
|
rpm-build |
4f3c61 |
g_variant_dict_insert (&dict, "true", "i", trues);
|
|
rpm-build |
4f3c61 |
g_variant_dict_insert (&dict, "false", "i", falses);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
soup_xmlrpc_message_set_response (msg, g_variant_dict_end (&dict), NULL);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
g_variant_unref (args);
|
|
rpm-build |
4f3c61 |
g_variant_unref (child);
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
static void
|
|
rpm-build |
4f3c61 |
do_md5sum (SoupMessage *msg, SoupXMLRPCParams *params)
|
|
rpm-build |
4f3c61 |
{
|
|
rpm-build |
4f3c61 |
GVariant *args;
|
|
rpm-build |
4f3c61 |
GVariant *child;
|
|
rpm-build |
4f3c61 |
GChecksum *checksum;
|
|
rpm-build |
4f3c61 |
GByteArray *digest;
|
|
rpm-build |
4f3c61 |
gsize digest_len = 16;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
if (!(args = parse_params (msg, params, "(ay)")))
|
|
rpm-build |
4f3c61 |
return;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
child = g_variant_get_child_value (args, 0);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
checksum = g_checksum_new (G_CHECKSUM_MD5);
|
|
rpm-build |
4f3c61 |
g_checksum_update (checksum,
|
|
rpm-build |
4f3c61 |
g_variant_get_data (child),
|
|
rpm-build |
4f3c61 |
g_variant_get_size (child));
|
|
rpm-build |
4f3c61 |
digest = g_byte_array_new ();
|
|
rpm-build |
4f3c61 |
g_byte_array_set_size (digest, digest_len);
|
|
rpm-build |
4f3c61 |
g_checksum_get_digest (checksum, digest->data, &digest_len);
|
|
rpm-build |
4f3c61 |
g_checksum_free (checksum);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
soup_xmlrpc_message_set_response (msg,
|
|
rpm-build |
4f3c61 |
g_variant_new_from_data (G_VARIANT_TYPE_BYTESTRING,
|
|
rpm-build |
4f3c61 |
digest->data, digest_len,
|
|
rpm-build |
4f3c61 |
TRUE, NULL, NULL),
|
|
rpm-build |
4f3c61 |
NULL);
|
|
rpm-build |
4f3c61 |
g_byte_array_free (digest, TRUE);
|
|
rpm-build |
4f3c61 |
g_variant_unref (child);
|
|
rpm-build |
4f3c61 |
g_variant_unref (args);
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
static void
|
|
rpm-build |
4f3c61 |
do_dateChange (SoupMessage *msg, SoupXMLRPCParams *params)
|
|
rpm-build |
4f3c61 |
{
|
|
rpm-build |
4f3c61 |
GVariant *args;
|
|
rpm-build |
4f3c61 |
GVariant *timestamp;
|
|
rpm-build |
4f3c61 |
SoupDate *date;
|
|
rpm-build |
4f3c61 |
GVariant *arg;
|
|
rpm-build |
4f3c61 |
int val;
|
|
rpm-build |
4f3c61 |
GError *error = NULL;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
if (!(args = parse_params (msg, params, "(va{si})")))
|
|
rpm-build |
4f3c61 |
return;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
g_variant_get (args, "(v@a{si})", ×tamp, &arg;;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
date = soup_xmlrpc_variant_get_datetime (timestamp, &error);
|
|
rpm-build |
4f3c61 |
if (!date) {
|
|
rpm-build |
4f3c61 |
soup_xmlrpc_message_set_fault (msg,
|
|
rpm-build |
4f3c61 |
SOUP_XMLRPC_FAULT_SERVER_ERROR_INVALID_METHOD_PARAMETERS,
|
|
rpm-build |
4f3c61 |
"%s", error->message);
|
|
rpm-build |
4f3c61 |
g_clear_error (&error);
|
|
rpm-build |
4f3c61 |
goto fail;
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
if (g_variant_lookup (arg, "tm_year", "i", &val))
|
|
rpm-build |
4f3c61 |
date->year = val + 1900;
|
|
rpm-build |
4f3c61 |
if (g_variant_lookup (arg, "tm_mon", "i", &val))
|
|
rpm-build |
4f3c61 |
date->month = val + 1;
|
|
rpm-build |
4f3c61 |
if (g_variant_lookup (arg, "tm_mday", "i", &val))
|
|
rpm-build |
4f3c61 |
date->day = val;
|
|
rpm-build |
4f3c61 |
if (g_variant_lookup (arg, "tm_hour", "i", &val))
|
|
rpm-build |
4f3c61 |
date->hour = val;
|
|
rpm-build |
4f3c61 |
if (g_variant_lookup (arg, "tm_min", "i", &val))
|
|
rpm-build |
4f3c61 |
date->minute = val;
|
|
rpm-build |
4f3c61 |
if (g_variant_lookup (arg, "tm_sec", "i", &val))
|
|
rpm-build |
4f3c61 |
date->second = val;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
soup_xmlrpc_message_set_response (msg,
|
|
rpm-build |
4f3c61 |
soup_xmlrpc_variant_new_datetime (date),
|
|
rpm-build |
4f3c61 |
NULL);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
soup_date_free (date);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
fail:
|
|
rpm-build |
4f3c61 |
g_variant_unref (args);
|
|
rpm-build |
4f3c61 |
g_variant_unref (arg);
|
|
rpm-build |
4f3c61 |
g_variant_unref (timestamp);
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
static void
|
|
rpm-build |
4f3c61 |
do_echo (SoupMessage *msg, SoupXMLRPCParams *params)
|
|
rpm-build |
4f3c61 |
{
|
|
rpm-build |
4f3c61 |
GVariant *args;
|
|
rpm-build |
4f3c61 |
GVariant *child;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
if (!(args = parse_params (msg, params, "(as)")))
|
|
rpm-build |
4f3c61 |
return;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
child = g_variant_get_child_value (args, 0);
|
|
rpm-build |
4f3c61 |
soup_xmlrpc_message_set_response (msg, child, NULL);
|
|
rpm-build |
4f3c61 |
g_variant_unref (args);
|
|
rpm-build |
4f3c61 |
g_variant_unref (child);
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
static void
|
|
rpm-build |
4f3c61 |
do_ping (SoupMessage *msg, SoupXMLRPCParams *params)
|
|
rpm-build |
4f3c61 |
{
|
|
rpm-build |
4f3c61 |
GVariant *args;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
if (!(args = parse_params (msg, params, "()")))
|
|
rpm-build |
4f3c61 |
return;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
soup_xmlrpc_message_set_response (msg, g_variant_new_string ("pong"), NULL);
|
|
rpm-build |
4f3c61 |
g_variant_unref (args);
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
static void
|
|
rpm-build |
4f3c61 |
server_callback (SoupServer *server, SoupMessage *msg,
|
|
rpm-build |
4f3c61 |
const char *path, GHashTable *query,
|
|
rpm-build |
4f3c61 |
SoupClientContext *context, gpointer data)
|
|
rpm-build |
4f3c61 |
{
|
|
rpm-build |
4f3c61 |
char *method_name;
|
|
rpm-build |
4f3c61 |
SoupXMLRPCParams *params;
|
|
rpm-build |
4f3c61 |
GError *error = NULL;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
if (msg->method != SOUP_METHOD_POST) {
|
|
rpm-build |
4f3c61 |
soup_message_set_status (msg, SOUP_STATUS_NOT_IMPLEMENTED);
|
|
rpm-build |
4f3c61 |
return;
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
soup_message_set_status (msg, SOUP_STATUS_OK);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
method_name = soup_xmlrpc_parse_request (msg->request_body->data,
|
|
rpm-build |
4f3c61 |
msg->request_body->length,
|
|
rpm-build |
4f3c61 |
¶ms, &error);
|
|
rpm-build |
4f3c61 |
if (!method_name) {
|
|
rpm-build |
4f3c61 |
soup_xmlrpc_message_set_fault (msg, SOUP_XMLRPC_FAULT_PARSE_ERROR_NOT_WELL_FORMED,
|
|
rpm-build |
4f3c61 |
"Could not parse method call: %s", error->message);
|
|
rpm-build |
4f3c61 |
g_clear_error (&error);
|
|
rpm-build |
4f3c61 |
return;
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
if (!strcmp (method_name, "sum"))
|
|
rpm-build |
4f3c61 |
do_sum (msg, params);
|
|
rpm-build |
4f3c61 |
else if (!strcmp (method_name, "countBools"))
|
|
rpm-build |
4f3c61 |
do_countBools (msg, params);
|
|
rpm-build |
4f3c61 |
else if (!strcmp (method_name, "md5sum"))
|
|
rpm-build |
4f3c61 |
do_md5sum (msg, params);
|
|
rpm-build |
4f3c61 |
else if (!strcmp (method_name, "dateChange"))
|
|
rpm-build |
4f3c61 |
do_dateChange (msg, params);
|
|
rpm-build |
4f3c61 |
else if (!strcmp (method_name, "echo"))
|
|
rpm-build |
4f3c61 |
do_echo (msg, params);
|
|
rpm-build |
4f3c61 |
else if (!strcmp (method_name, "ping"))
|
|
rpm-build |
4f3c61 |
do_ping (msg, params);
|
|
rpm-build |
4f3c61 |
else {
|
|
rpm-build |
4f3c61 |
soup_xmlrpc_message_set_fault (msg, SOUP_XMLRPC_FAULT_SERVER_ERROR_REQUESTED_METHOD_NOT_FOUND,
|
|
rpm-build |
4f3c61 |
"Unknown method %s", method_name);
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
g_free (method_name);
|
|
rpm-build |
4f3c61 |
soup_xmlrpc_params_free (params);
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
static gboolean
|
|
rpm-build |
4f3c61 |
run_xmlrpc_test (char **argv,
|
|
rpm-build |
4f3c61 |
char **stdout_out,
|
|
rpm-build |
4f3c61 |
char **stderr_out,
|
|
rpm-build |
4f3c61 |
GError **error)
|
|
rpm-build |
4f3c61 |
{
|
|
rpm-build |
4f3c61 |
gboolean ok;
|
|
rpm-build |
4f3c61 |
int status;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
argv[0] = g_test_build_filename (G_TEST_BUILT, "xmlrpc-test", NULL);
|
|
rpm-build |
4f3c61 |
ok = g_spawn_sync (NULL, argv, NULL, 0, NULL, NULL,
|
|
rpm-build |
4f3c61 |
stdout_out, stderr_out, &status,
|
|
rpm-build |
4f3c61 |
error);
|
|
rpm-build |
4f3c61 |
g_free (argv[0]);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
if (!ok)
|
|
rpm-build |
4f3c61 |
return FALSE;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
return g_spawn_check_exit_status (status, error);
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
static void
|
|
rpm-build |
4f3c61 |
do_one_xmlrpc_test (gconstpointer data)
|
|
rpm-build |
4f3c61 |
{
|
|
rpm-build |
4f3c61 |
const char *path = data;
|
|
rpm-build |
4f3c61 |
char *argv[12];
|
|
rpm-build |
4f3c61 |
char *stdout_out, *stderr_out;
|
|
rpm-build |
4f3c61 |
GError *error = NULL;
|
|
rpm-build |
4f3c61 |
int arg;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
argv[0] = NULL;
|
|
rpm-build |
4f3c61 |
argv[1] = "-S";
|
|
rpm-build |
4f3c61 |
argv[2] = "-U";
|
|
rpm-build |
4f3c61 |
argv[3] = uri;
|
|
rpm-build |
4f3c61 |
argv[4] = "-q";
|
|
rpm-build |
4f3c61 |
argv[5] = "-p";
|
|
rpm-build |
4f3c61 |
argv[6] = (char *) path;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
for (arg = 0; arg < debug_level && arg < 3; arg++)
|
|
rpm-build |
4f3c61 |
argv[arg + 7] = "-d";
|
|
rpm-build |
4f3c61 |
argv[arg + 7] = NULL;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
run_xmlrpc_test (argv, &stdout_out, &stderr_out, &error);
|
|
rpm-build |
4f3c61 |
if (stdout_out) {
|
|
rpm-build |
4f3c61 |
g_print ("%s", stdout_out);
|
|
rpm-build |
4f3c61 |
g_free (stdout_out);
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
if (stderr_out) {
|
|
rpm-build |
4f3c61 |
g_printerr ("%s", stderr_out);
|
|
rpm-build |
4f3c61 |
g_free (stderr_out);
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
if ( g_error_matches (error, G_SPAWN_EXIT_ERROR, 1)
|
|
rpm-build |
4f3c61 |
|| g_error_matches (error, G_SPAWN_EXIT_ERROR, 77))
|
|
rpm-build |
4f3c61 |
g_test_fail ();
|
|
rpm-build |
4f3c61 |
else
|
|
rpm-build |
4f3c61 |
g_assert_no_error (error);
|
|
rpm-build |
4f3c61 |
g_clear_error (&error);
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
gboolean run_tests = TRUE;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
static GOptionEntry no_test_entry[] = {
|
|
rpm-build |
4f3c61 |
{ "no-tests", 'n', G_OPTION_FLAG_REVERSE,
|
|
rpm-build |
4f3c61 |
G_OPTION_ARG_NONE, &run_tests,
|
|
rpm-build |
4f3c61 |
"Don't run tests, just run the test server", NULL },
|
|
rpm-build |
4f3c61 |
{ NULL }
|
|
rpm-build |
4f3c61 |
};
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
int
|
|
rpm-build |
4f3c61 |
main (int argc, char **argv)
|
|
rpm-build |
4f3c61 |
{
|
|
rpm-build |
4f3c61 |
SoupServer *server;
|
|
rpm-build |
4f3c61 |
SoupURI *server_uri;
|
|
rpm-build |
4f3c61 |
int ret;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
test_init (argc, argv, no_test_entry);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
server = soup_test_server_new (run_tests ? SOUP_TEST_SERVER_IN_THREAD : SOUP_TEST_SERVER_DEFAULT);
|
|
rpm-build |
4f3c61 |
soup_server_add_handler (server, "/xmlrpc-server.php",
|
|
rpm-build |
4f3c61 |
server_callback, NULL, NULL);
|
|
rpm-build |
4f3c61 |
server_uri = soup_test_server_get_uri (server, "http", NULL);
|
|
rpm-build |
4f3c61 |
soup_uri_set_path (server_uri, "/xmlrpc-server.php");
|
|
rpm-build |
4f3c61 |
uri = soup_uri_to_string (server_uri, FALSE);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
if (run_tests) {
|
|
rpm-build |
4f3c61 |
char *out, **tests, *path;
|
|
rpm-build |
4f3c61 |
char *list_argv[4];
|
|
rpm-build |
4f3c61 |
GError *error = NULL;
|
|
rpm-build |
4f3c61 |
int i;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
list_argv[0] = NULL;
|
|
rpm-build |
4f3c61 |
list_argv[1] = "-S";
|
|
rpm-build |
4f3c61 |
list_argv[2] = "-l";
|
|
rpm-build |
4f3c61 |
list_argv[3] = NULL;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
if (!run_xmlrpc_test (list_argv, &out, NULL, &error)) {
|
|
rpm-build |
4f3c61 |
g_printerr ("'xmlrpc-test -l' failed: %s\n", error->message);
|
|
rpm-build |
4f3c61 |
g_error_free (error);
|
|
rpm-build |
4f3c61 |
return 1;
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
tests = g_strsplit (out, "\n", -1);
|
|
rpm-build |
4f3c61 |
g_free (out);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
for (i = 0; tests[i] && *tests[i]; i++) {
|
|
rpm-build |
4f3c61 |
g_assert_true (g_str_has_prefix (tests[i], "/xmlrpc/"));
|
|
rpm-build |
4f3c61 |
path = g_strdup_printf ("/xmlrpc-server/%s", tests[i] + strlen ("/xmlrpc/"));
|
|
rpm-build |
4f3c61 |
g_test_add_data_func (path, tests[i], do_one_xmlrpc_test);
|
|
rpm-build |
4f3c61 |
g_free (path);
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
ret = g_test_run ();
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
g_strfreev (tests);
|
|
rpm-build |
4f3c61 |
} else {
|
|
rpm-build |
4f3c61 |
GMainLoop *loop;
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
g_print ("Listening on port %d\n", server_uri->port);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
loop = g_main_loop_new (NULL, TRUE);
|
|
rpm-build |
4f3c61 |
g_main_loop_run (loop);
|
|
rpm-build |
4f3c61 |
g_main_loop_unref (loop);
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
ret = 0;
|
|
rpm-build |
4f3c61 |
}
|
|
rpm-build |
4f3c61 |
|
|
rpm-build |
4f3c61 |
soup_test_server_quit_unref (server);
|
|
rpm-build |
4f3c61 |
soup_uri_free (server_uri);
|
|
rpm-build |
4f3c61 |
g_free (uri);
|
|
rpm-build |
4f3c61 |
if (run_tests)
|
|
rpm-build |
4f3c61 |
test_cleanup ();
|
|
rpm-build |
4f3c61 |
return ret;
|
|
rpm-build |
4f3c61 |
}
|