/*
This file is part of TALER
(C) 2023 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
TALER is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
TALER; see the file COPYING. If not, see
*/
/**
* @file util/test_conversion.c
* @brief Tests for conversion logic
* @author Christian Grothoff
*/
#include "platform.h"
#include "taler_util.h"
#include
/**
* Return value from main().
*/
static int global_ret;
/**
* Handle to our helper.
*/
static struct TALER_JSON_ExternalConversion *ec;
/**
* Type of a callback that receives a JSON @a result.
*
* @param cls closure
* @param status_type how did the process die
* @apram code termination status code from the process
* @param result some JSON result, NULL if we failed to get an JSON output
*/
static void
conv_cb (void *cls,
enum GNUNET_OS_ProcessStatusType status_type,
unsigned long code,
const json_t *result)
{
json_t *expect;
(void) cls;
(void) status_type;
ec = NULL;
global_ret = 3;
if (42 != code)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Unexpected return value from helper: %u\n",
(unsigned int) code);
return;
}
expect = GNUNET_JSON_PACK (
GNUNET_JSON_pack_string ("foo",
"arg")
);
if (1 == json_equal (expect,
result))
{
global_ret = 0;
}
else
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Unexpected JSON result\n");
json_dumpf (result,
stderr,
JSON_INDENT (2));
global_ret = 4;
}
json_decref (expect);
}
/**
* Function called on shutdown/CTRL-C.
*
* @param cls NULL
*/
static void
do_shutdown (void *cls)
{
(void) cls;
if (NULL != ec)
{
GNUNET_break (0);
global_ret = 2;
TALER_JSON_external_conversion_stop (ec);
ec = NULL;
}
}
/**
* Main test function.
*
* @param cls NULL
*/
static void
run (void *cls)
{
json_t *input;
(void) cls;
GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
NULL);
input = GNUNET_JSON_PACK (
GNUNET_JSON_pack_string ("key",
"foo")
);
ec = TALER_JSON_external_conversion_start (input,
&conv_cb,
NULL,
"./test_conversion.sh",
"test_conversion.sh",
"arg",
NULL);
json_decref (input);
GNUNET_assert (NULL != ec);
}
int
main (int argc,
const char *const argv[])
{
(void) argc;
(void) argv;
unsetenv ("XDG_DATA_HOME");
unsetenv ("XDG_CONFIG_HOME");
GNUNET_log_setup ("test-conversion",
"WARNING",
NULL);
GNUNET_OS_init (TALER_project_data_default ());
global_ret = 1;
GNUNET_SCHEDULER_run (&run,
NULL);
return global_ret;
}