exchange/src/bank-lib/test_bank_api.c

221 lines
7.3 KiB
C
Raw Normal View History

2016-01-25 10:20:40 +01:00
/*
This file is part of TALER
2017-03-24 13:41:21 +01:00
Copyright (C) 2016, 2017 GNUnet e.V.
2016-01-25 10:20:40 +01:00
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
2016-07-07 17:55:25 +02:00
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
2016-01-25 10:20:40 +01:00
*/
/**
* @file bank/test_bank_api.c
* @brief testcase to test bank's HTTP API interface against the "real" bank
2016-01-25 10:20:40 +01:00
* @author Christian Grothoff
*/
#include "platform.h"
#include "taler_util.h"
#include "taler_signatures.h"
#include "taler_bank_service.h"
#include <gnunet/gnunet_util_lib.h>
#include <gnunet/gnunet_curl_lib.h>
2016-01-25 10:20:40 +01:00
#include <microhttpd.h>
#include "test_bank_interpreter.h"
2016-01-25 10:20:40 +01:00
/**
* Main function that will be run by the scheduler.
*
* @param cls closure
*/
static void
run (void *cls)
2016-01-25 10:20:40 +01:00
{
int *resultp = cls;
static struct TBI_Command commands[] =
2016-01-25 10:20:40 +01:00
{
/* Ask complete history of 'Exchange' user (number 2) */
{ .oc = TBI_OC_HISTORY,
.label = "history-0",
.details.history.account_number = 2,
.details.history.direction = TALER_BANK_DIRECTION_BOTH,
.details.history.start_row_ref = NULL,
.details.history.num_results = 5 },
/* Move money from Exchange to Bank */
{ .oc = TBI_OC_ADMIN_ADD_INCOMING,
2016-01-29 14:24:18 +01:00
.label = "deposit-1",
.details.admin_add_incoming.exchange_base_url = "https://exchange.net/", /* bogus */
2017-12-06 19:24:00 +01:00
.details.admin_add_incoming.subject = "subject 1",
2016-05-03 06:15:09 +02:00
.details.admin_add_incoming.expected_response_code = MHD_HTTP_OK,
2016-04-11 23:44:09 +02:00
.details.admin_add_incoming.credit_account_no = 1,
.details.admin_add_incoming.debit_account_no = 2, /* Ignored */
.details.admin_add_incoming.amount = "KUDOS:5.01" },
/* Move money from Exchange to Bank */
{ .oc = TBI_OC_ADMIN_ADD_INCOMING,
.label = "deposit-2",
.details.admin_add_incoming.exchange_base_url = "https://exchange.net/", /* bogus */
2017-12-06 19:24:00 +01:00
.details.admin_add_incoming.subject = "subject 2",
.details.admin_add_incoming.expected_response_code = MHD_HTTP_OK,
.details.admin_add_incoming.credit_account_no = 1,
.details.admin_add_incoming.debit_account_no = 2, /* Ignored */
.details.admin_add_incoming.amount = "KUDOS:5.01" },
/* Ask Exchange's incoming history */
{ .oc = TBI_OC_HISTORY,
.label = "history-1c",
.details.history.account_number = 2,
.details.history.direction = TALER_BANK_DIRECTION_CREDIT,
.details.history.start_row_ref = NULL,
.details.history.num_results = 5 },
/* Ask Exchange's outgoing history, 5 records into the future?? */
{ .oc = TBI_OC_HISTORY,
.label = "history-2d",
.details.history.account_number = 2,
.details.history.direction = TALER_BANK_DIRECTION_DEBIT,
.details.history.start_row_ref = NULL,
.details.history.num_results = 5 },
/* Ask Exchange's outgoing history, last 5 records */
{ .oc = TBI_OC_HISTORY,
.label = "history-2dr",
.details.history.account_number = 2,
.details.history.direction = TALER_BANK_DIRECTION_DEBIT,
.details.history.start_row_ref = NULL,
.details.history.num_results = -5 },
{ .oc = TBI_OC_HISTORY,
.label = "history-2fwd",
.details.history.account_number = 2,
.details.history.direction = TALER_BANK_DIRECTION_DEBIT,
.details.history.start_row_ref = "deposit-1",
.details.history.num_results = 5 },
/* FIXME(bug #5200): re-enable once implemented in bank
2017-12-06 19:24:00 +01:00
{ .oc = TBI_OC_REJECT,
.label = "reject-1",
.details.reject.cmd_ref = "deposit-1" },
{ .oc = TBI_OC_HISTORY,
.label = "history-r1",
.details.history.account_number = 2,
.details.history.direction = TALER_BANK_DIRECTION_CREDIT,
.details.history.start_row_ref = NULL,
.details.history.num_results = 5 },
{ .oc = TBI_OC_HISTORY,
.label = "history-r2",
.details.history.account_number = 2,
.details.history.direction = TALER_BANK_DIRECTION_DEBIT,
.details.history.start_row_ref = NULL,
.details.history.num_results = 5 },
{ .oc = TBI_OC_HISTORY,
.label = "history-r3",
.details.history.account_number = 2,
.details.history.direction = TALER_BANK_DIRECTION_BOTH | TALER_BANK_DIRECTION_CANCEL,
.details.history.start_row_ref = NULL,
.details.history.num_results = 5 },
*/
{ .oc = TBI_OC_END }
2016-01-25 10:20:40 +01:00
};
TBI_run_interpreter (resultp,
2016-05-02 09:06:16 +02:00
GNUNET_NO /* we use the "real" taler bank */,
commands);
2016-01-25 10:20:40 +01:00
}
/**
* Main function for the testcase for the bank API.
*
* @param argc expected to be 1
* @param argv expected to only contain the program name
*/
int
main (int argc,
char * const *argv)
{
struct GNUNET_OS_Process *bankd;
2016-03-23 10:06:41 +01:00
unsigned int cnt;
int result;
char *defaultdb = "postgres:///talercheck";
char *dbconn;
2016-01-25 10:20:40 +01:00
2017-03-24 13:41:21 +01:00
if (GNUNET_OK !=
GNUNET_NETWORK_test_port_free (IPPROTO_TCP,
8081))
{
fprintf (stderr,
"Required port %u not available, skipping.\n",
8081);
return 77;
}
2016-01-25 10:20:40 +01:00
GNUNET_log_setup ("test-bank-api",
"WARNING",
NULL);
if (NULL == (dbconn = getenv ("TALER_EXCHANGEDB_POSTGRES_CONFIG")))
dbconn = defaultdb;
char *purgedb_cmd;
GNUNET_asprintf (&purgedb_cmd, "taler-bank-manage -c bank.conf --with-db=%s django flush --no-input",
dbconn);
if (0 != system (purgedb_cmd))
{
fprintf (stderr,
2017-05-17 17:52:43 +02:00
"Could not purge database\n");
return 77;
}
2016-01-25 10:20:40 +01:00
bankd = GNUNET_OS_start_process (GNUNET_NO,
GNUNET_OS_INHERIT_STD_ALL,
NULL, NULL, NULL,
"taler-bank-manage",
"taler-bank-manage",
"--with-db", dbconn,
"-c", "bank.conf",
2016-04-20 01:50:26 +02:00
"serve-http",
2016-11-04 17:45:34 +01:00
"--port", "8080",
2016-01-25 10:20:40 +01:00
NULL);
2016-11-04 17:45:34 +01:00
2017-03-24 13:41:21 +01:00
if (NULL == bankd)
2016-01-29 14:24:18 +01:00
{
fprintf (stderr,
2017-03-24 13:41:21 +01:00
"Failed to launch taler-bank-manage, skipping test\n");
2016-01-29 14:24:18 +01:00
return 77; /* report 'skip' */
}
2016-01-25 10:20:40 +01:00
/* give child time to start and bind against the socket */
2016-01-29 14:24:18 +01:00
fprintf (stderr,
2016-04-11 21:10:20 +02:00
"Waiting for taler-bank-manage to be ready\n");
2016-03-23 10:06:41 +01:00
cnt = 0;
2016-01-25 10:20:40 +01:00
do
{
fprintf (stderr, ".");
sleep (1);
2016-03-23 10:06:41 +01:00
cnt++;
if (cnt > 30)
break;
2016-01-25 10:20:40 +01:00
}
2016-11-04 17:45:34 +01:00
while (0 != system ("wget -q -t 1 -T 1 http://127.0.0.1:8080/ -o /dev/null -O /dev/null"));
2016-01-25 10:20:40 +01:00
fprintf (stderr, "\n");
result = GNUNET_SYSERR;
2016-03-23 10:06:41 +01:00
if (cnt <= 30)
{
fprintf (stderr,
"Ready, running test...\n");
GNUNET_SCHEDULER_run (&run, &result);
}
2016-01-25 10:20:40 +01:00
GNUNET_OS_process_kill (bankd,
SIGTERM);
GNUNET_OS_process_wait (bankd);
GNUNET_OS_process_destroy (bankd);
2016-03-23 10:06:41 +01:00
if (cnt > 30)
{
fprintf (stderr,
"taler-bank-manage failed to start properly.\n");
return 77;
}
2016-01-25 10:20:40 +01:00
return (GNUNET_OK == result) ? 0 : 1;
}
/* end of test_bank_api.c */