adding tests for /wire
This commit is contained in:
parent
1b0f860990
commit
e68446e0a8
@ -2,7 +2,7 @@
|
|||||||
# Currency supported by the mint (can only be one)
|
# Currency supported by the mint (can only be one)
|
||||||
CURRENCY = EUR
|
CURRENCY = EUR
|
||||||
|
|
||||||
# Wire format supproted by the mint (currently only SEPA is implemented)
|
# Wire format supported by the mint (currently only SEPA is implemented)
|
||||||
WIREFORMAT = SEPA
|
WIREFORMAT = SEPA
|
||||||
|
|
||||||
# HTTP port the mint listens to
|
# HTTP port the mint listens to
|
||||||
@ -19,3 +19,9 @@ TESTRUN = YES
|
|||||||
[mintdb-postgres]
|
[mintdb-postgres]
|
||||||
|
|
||||||
DB_CONN_STR = "postgres:///talercheck"
|
DB_CONN_STR = "postgres:///talercheck"
|
||||||
|
|
||||||
|
[mint-wire-sepa]
|
||||||
|
SEPA_RESPONSE_FILE = "sepa.json"
|
||||||
|
|
||||||
|
[mint-wire-test]
|
||||||
|
REDIRECT_URL = "http://test/"
|
||||||
|
@ -435,6 +435,29 @@ MAC_download_get_result (struct MAC_DownloadBuffer *db,
|
|||||||
{
|
{
|
||||||
json_t *json;
|
json_t *json;
|
||||||
json_error_t error;
|
json_error_t error;
|
||||||
|
char *ct;
|
||||||
|
|
||||||
|
if ( (CURLE_OK !=
|
||||||
|
curl_easy_getinfo (eh,
|
||||||
|
CURLINFO_CONTENT_TYPE,
|
||||||
|
&ct)) ||
|
||||||
|
(NULL == ct) ||
|
||||||
|
(0 != strcasecmp (ct,
|
||||||
|
"application/json")) )
|
||||||
|
{
|
||||||
|
/* No content type or explicitly not JSON, refuse to parse
|
||||||
|
(but keep response code) */
|
||||||
|
if (CURLE_OK !=
|
||||||
|
curl_easy_getinfo (eh,
|
||||||
|
CURLINFO_RESPONSE_CODE,
|
||||||
|
response_code))
|
||||||
|
{
|
||||||
|
/* unexpected error... */
|
||||||
|
GNUNET_break (0);
|
||||||
|
*response_code = 0;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
json = NULL;
|
json = NULL;
|
||||||
if (0 == db->eno)
|
if (0 == db->eno)
|
||||||
|
@ -284,6 +284,7 @@ handle_wire_method_finished (void *cls,
|
|||||||
NULL);
|
NULL);
|
||||||
json_decref (json);
|
json_decref (json);
|
||||||
TALER_MINT_wire_cancel (wh);
|
TALER_MINT_wire_cancel (wh);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
/* pass on successful reply */
|
/* pass on successful reply */
|
||||||
wh->cb (wh->cb_cls,
|
wh->cb (wh->cb_cls,
|
||||||
@ -345,6 +346,11 @@ request_wire_method (struct TALER_MINT_WireHandle *wh)
|
|||||||
curl_easy_setopt (eh,
|
curl_easy_setopt (eh,
|
||||||
CURLOPT_WRITEDATA,
|
CURLOPT_WRITEDATA,
|
||||||
&wh->db));
|
&wh->db));
|
||||||
|
/* The default is 'disabled', but let's be sure */
|
||||||
|
GNUNET_assert (CURLE_OK ==
|
||||||
|
curl_easy_setopt (eh,
|
||||||
|
CURLOPT_FOLLOWLOCATION,
|
||||||
|
(long) 0));
|
||||||
ctx = MAH_handle_to_context (wh->mint);
|
ctx = MAH_handle_to_context (wh->mint);
|
||||||
wh->job = MAC_job_add (ctx,
|
wh->job = MAC_job_add (ctx,
|
||||||
eh,
|
eh,
|
||||||
@ -514,7 +520,8 @@ handle_wire_finished (void *cls,
|
|||||||
0,
|
0,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
json_decref (json);
|
if (NULL != json)
|
||||||
|
json_decref (json);
|
||||||
TALER_MINT_wire_cancel (wh);
|
TALER_MINT_wire_cancel (wh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,9 +2,12 @@
|
|||||||
# Currency supported by the mint (can only be one)
|
# Currency supported by the mint (can only be one)
|
||||||
CURRENCY = EUR
|
CURRENCY = EUR
|
||||||
|
|
||||||
# Wire format supproted by the mint
|
# Wire format supported by the mint
|
||||||
# TEST is used for testing... (what a shock)
|
# We use 'test' for testing, in principle we should
|
||||||
WIREFORMAT = TEST
|
# run tests for all supported wire formats...
|
||||||
|
# (we should first implement support for a mint running
|
||||||
|
# with multiple formats at the same time).
|
||||||
|
WIREFORMAT = test
|
||||||
|
|
||||||
# HTTP port the mint listens to
|
# HTTP port the mint listens to
|
||||||
PORT = 8081
|
PORT = 8081
|
||||||
@ -21,3 +24,9 @@ TESTRUN = YES
|
|||||||
[mintdb-postgres]
|
[mintdb-postgres]
|
||||||
|
|
||||||
DB_CONN_STR = "postgres:///talercheck"
|
DB_CONN_STR = "postgres:///talercheck"
|
||||||
|
|
||||||
|
[mint-wire-sepa]
|
||||||
|
SEPA_RESPONSE_FILE = "test-mint-home/sepa.json"
|
||||||
|
|
||||||
|
[mint-wire-test]
|
||||||
|
REDIRECT_URL = "http://www.taler.net/"
|
||||||
|
6
src/mint-lib/test-mint-home/sepa.json
Normal file
6
src/mint-lib/test-mint-home/sepa.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"receiver_name": "Max Mustermann",
|
||||||
|
"iban": "DE89370400440532013000",
|
||||||
|
"bic": "COBADEFF370",
|
||||||
|
"sig": "8M5YJXM68PRAXKH76HYEBCJW657B23JA0RFGNDMZK2379YZMT626H1BN89KC0M1KJBWGYEN5Z763Q0Y7MCTZQ6BPPT7D9KFCTW60C10"
|
||||||
|
}
|
@ -26,6 +26,15 @@
|
|||||||
#include <gnunet/gnunet_util_lib.h>
|
#include <gnunet/gnunet_util_lib.h>
|
||||||
#include <microhttpd.h>
|
#include <microhttpd.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is the configuration file is set to include wire format 'test'?
|
||||||
|
*/
|
||||||
|
#define WIRE_TEST 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is the configuration file is set to include wire format 'sepa'?
|
||||||
|
*/
|
||||||
|
#define WIRE_SEPA 0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main execution context for the main loop.
|
* Main execution context for the main loop.
|
||||||
@ -1357,7 +1366,6 @@ interpreter_run (void *cls,
|
|||||||
&coin_pub.eddsa_pub);
|
&coin_pub.eddsa_pub);
|
||||||
cmd->details.withdraw_sign.blinding_key.rsa_blinding_key
|
cmd->details.withdraw_sign.blinding_key.rsa_blinding_key
|
||||||
= GNUNET_CRYPTO_rsa_blinding_key_create (GNUNET_CRYPTO_rsa_public_key_len (cmd->details.withdraw_sign.pk->key.rsa_public_key));
|
= GNUNET_CRYPTO_rsa_blinding_key_create (GNUNET_CRYPTO_rsa_public_key_len (cmd->details.withdraw_sign.pk->key.rsa_public_key));
|
||||||
|
|
||||||
cmd->details.withdraw_sign.wsh
|
cmd->details.withdraw_sign.wsh
|
||||||
= TALER_MINT_withdraw_sign (mint,
|
= TALER_MINT_withdraw_sign (mint,
|
||||||
cmd->details.withdraw_sign.pk,
|
cmd->details.withdraw_sign.pk,
|
||||||
@ -1442,7 +1450,6 @@ interpreter_run (void *cls,
|
|||||||
fail (is);
|
fail (is);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GNUNET_CRYPTO_eddsa_key_get_public (&coin_priv->eddsa_priv,
|
GNUNET_CRYPTO_eddsa_key_get_public (&coin_priv->eddsa_priv,
|
||||||
&coin_pub.eddsa_pub);
|
&coin_pub.eddsa_pub);
|
||||||
|
|
||||||
@ -1464,6 +1471,7 @@ interpreter_run (void *cls,
|
|||||||
{
|
{
|
||||||
struct TALER_DepositRequestPS dr;
|
struct TALER_DepositRequestPS dr;
|
||||||
|
|
||||||
|
memset (&dr, 0, sizeof (dr));
|
||||||
dr.purpose.size = htonl (sizeof (struct TALER_DepositRequestPS));
|
dr.purpose.size = htonl (sizeof (struct TALER_DepositRequestPS));
|
||||||
dr.purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_DEPOSIT);
|
dr.purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_DEPOSIT);
|
||||||
dr.h_contract = h_contract;
|
dr.h_contract = h_contract;
|
||||||
@ -1482,7 +1490,6 @@ interpreter_run (void *cls,
|
|||||||
GNUNET_CRYPTO_eddsa_sign (&coin_priv->eddsa_priv,
|
GNUNET_CRYPTO_eddsa_sign (&coin_priv->eddsa_priv,
|
||||||
&dr.purpose,
|
&dr.purpose,
|
||||||
&coin_sig.eddsa_signature));
|
&coin_sig.eddsa_signature));
|
||||||
|
|
||||||
}
|
}
|
||||||
cmd->details.deposit.dh
|
cmd->details.deposit.dh
|
||||||
= TALER_MINT_deposit (mint,
|
= TALER_MINT_deposit (mint,
|
||||||
@ -1980,6 +1987,26 @@ run (void *cls,
|
|||||||
};
|
};
|
||||||
static struct Command commands[] =
|
static struct Command commands[] =
|
||||||
{
|
{
|
||||||
|
/* *************** start of /wire testing ************** */
|
||||||
|
|
||||||
|
#if WIRE_TEST
|
||||||
|
{ .oc = OC_WIRE,
|
||||||
|
.label = "wire",
|
||||||
|
/* /wire/test replies with a 302 redirect */
|
||||||
|
.expected_response_code = MHD_HTTP_FOUND },
|
||||||
|
#endif
|
||||||
|
#if WIRE_SEPA
|
||||||
|
{ .oc = OC_WIRE,
|
||||||
|
.label = "wire",
|
||||||
|
/* /wire/sepa replies with a 200 redirect */
|
||||||
|
.expected_response_code = MHD_HTTP_OK },
|
||||||
|
#endif
|
||||||
|
/* *************** end of /wire testing ************** */
|
||||||
|
|
||||||
|
#if WIRE_TEST
|
||||||
|
/* None of this works if 'test' is not allowed as we do
|
||||||
|
/admin/add/incoming with format 'test' */
|
||||||
|
|
||||||
/* Fill reserve with EUR:5.01, as withdraw fee is 1 ct per config */
|
/* Fill reserve with EUR:5.01, as withdraw fee is 1 ct per config */
|
||||||
{ .oc = OC_ADMIN_ADD_INCOMING,
|
{ .oc = OC_ADMIN_ADD_INCOMING,
|
||||||
.label = "create-reserve-1",
|
.label = "create-reserve-1",
|
||||||
@ -2126,8 +2153,8 @@ run (void *cls,
|
|||||||
|
|
||||||
// FIXME: also test with coin that was already melted
|
// FIXME: also test with coin that was already melted
|
||||||
// (signature differs from coin that was deposited...)
|
// (signature differs from coin that was deposited...)
|
||||||
|
|
||||||
/* *************** end of /refresh testing ************** */
|
/* *************** end of /refresh testing ************** */
|
||||||
|
#endif
|
||||||
|
|
||||||
{ .oc = OC_END }
|
{ .oc = OC_END }
|
||||||
};
|
};
|
||||||
|
@ -177,7 +177,7 @@ handle_mhd_request (void *cls,
|
|||||||
|
|
||||||
{ "/wire/test", MHD_HTTP_METHOD_GET, "application/json",
|
{ "/wire/test", MHD_HTTP_METHOD_GET, "application/json",
|
||||||
NULL, 0,
|
NULL, 0,
|
||||||
&TMH_WIRE_handler_wire_test, MHD_HTTP_OK },
|
&TMH_WIRE_handler_wire_test, MHD_HTTP_FOUND },
|
||||||
{ "/wire/test", NULL, "text/plain",
|
{ "/wire/test", NULL, "text/plain",
|
||||||
"Only GET is allowed", 0,
|
"Only GET is allowed", 0,
|
||||||
&TMH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
|
&TMH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
|
||||||
|
@ -56,14 +56,14 @@ TMH_WIRE_handler_wire (struct TMH_RequestHandler *rh,
|
|||||||
&sig);
|
&sig);
|
||||||
methods = json_array ();
|
methods = json_array ();
|
||||||
/* NOTE: for now, we only support *ONE* wire format per
|
/* NOTE: for now, we only support *ONE* wire format per
|
||||||
mint instance; if we supply multiple, we need to
|
mint instance; if we supply multiple, we need to
|
||||||
add the strings for each type separately here -- and
|
add the strings for each type separately here -- and
|
||||||
hash the 0-terminated strings above differently as well... */
|
hash the 0-terminated strings above differently as well... */
|
||||||
json_array_append_new (methods,
|
json_array_append_new (methods,
|
||||||
json_string (TMH_expected_wire_format));
|
json_string (TMH_expected_wire_format));
|
||||||
return TMH_RESPONSE_reply_json_pack (connection,
|
return TMH_RESPONSE_reply_json_pack (connection,
|
||||||
MHD_HTTP_OK,
|
MHD_HTTP_OK,
|
||||||
"{s:s, s:o, s:o}",
|
"{s:o, s:o, s:o}",
|
||||||
"methods", methods,
|
"methods", methods,
|
||||||
"sig", TALER_json_from_data (&sig,
|
"sig", TALER_json_from_data (&sig,
|
||||||
sizeof (sig)),
|
sizeof (sig)),
|
||||||
@ -100,26 +100,30 @@ TMH_WIRE_handler_wire_test (struct TMH_RequestHandler *rh,
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return MHD_NO;
|
return MHD_NO;
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (0 != strcasecmp ("test",
|
||||||
GNUNET_CONFIGURATION_get_value_string (cfg,
|
TMH_expected_wire_format))
|
||||||
"mint-wire-test",
|
|
||||||
"REDIRECT_URL",
|
|
||||||
&wire_test_redirect))
|
|
||||||
{
|
{
|
||||||
|
/* Return 501: not implemented */
|
||||||
ret = MHD_queue_response (connection,
|
ret = MHD_queue_response (connection,
|
||||||
MHD_HTTP_NOT_IMPLEMENTED,
|
MHD_HTTP_NOT_IMPLEMENTED,
|
||||||
response);
|
response);
|
||||||
MHD_destroy_response (response);
|
MHD_destroy_response (response);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
GNUNET_CONFIGURATION_get_value_string (cfg,
|
||||||
|
"mint-wire-test",
|
||||||
|
"REDIRECT_URL",
|
||||||
|
&wire_test_redirect))
|
||||||
|
{
|
||||||
|
/* oopsie, configuration error */
|
||||||
|
return TMH_RESPONSE_reply_internal_error (connection,
|
||||||
|
"REDIRECT_URL not configured");
|
||||||
|
}
|
||||||
MHD_add_response_header (response,
|
MHD_add_response_header (response,
|
||||||
MHD_HTTP_HEADER_LOCATION,
|
MHD_HTTP_HEADER_LOCATION,
|
||||||
wire_test_redirect);
|
wire_test_redirect);
|
||||||
GNUNET_free (wire_test_redirect);
|
GNUNET_free (wire_test_redirect);
|
||||||
if (NULL != rh->mime_type)
|
|
||||||
(void) MHD_add_response_header (response,
|
|
||||||
MHD_HTTP_HEADER_CONTENT_TYPE,
|
|
||||||
rh->mime_type);
|
|
||||||
ret = MHD_queue_response (connection,
|
ret = MHD_queue_response (connection,
|
||||||
rh->response_code,
|
rh->response_code,
|
||||||
response);
|
response);
|
||||||
@ -151,11 +155,29 @@ TMH_WIRE_handler_wire_sepa (struct TMH_RequestHandler *rh,
|
|||||||
int fd;
|
int fd;
|
||||||
struct stat sbuf;
|
struct stat sbuf;
|
||||||
|
|
||||||
|
if (0 != strcasecmp ("sepa",
|
||||||
|
TMH_expected_wire_format))
|
||||||
|
{
|
||||||
|
/* Return 501: not implemented */
|
||||||
|
response = MHD_create_response_from_buffer (0, NULL,
|
||||||
|
MHD_RESPMEM_PERSISTENT);
|
||||||
|
if (NULL == response)
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
return MHD_NO;
|
||||||
|
}
|
||||||
|
ret = MHD_queue_response (connection,
|
||||||
|
MHD_HTTP_NOT_IMPLEMENTED,
|
||||||
|
response);
|
||||||
|
MHD_destroy_response (response);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
/* Fetch reply */
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
GNUNET_CONFIGURATION_get_value_string (cfg,
|
GNUNET_CONFIGURATION_get_value_filename (cfg,
|
||||||
"mint-wire-sepa",
|
"mint-wire-sepa",
|
||||||
"SEPA_RESPONSE_FILE",
|
"SEPA_RESPONSE_FILE",
|
||||||
&sepa_wire_file))
|
&sepa_wire_file))
|
||||||
{
|
{
|
||||||
return TMH_RESPONSE_reply_internal_error (connection,
|
return TMH_RESPONSE_reply_internal_error (connection,
|
||||||
"SEPA_RESPONSE_FILE not configured");
|
"SEPA_RESPONSE_FILE not configured");
|
||||||
|
Loading…
Reference in New Issue
Block a user