diff options
Diffstat (limited to 'src/tests/test_contract.c')
-rw-r--r-- | src/tests/test_contract.c | 341 |
1 files changed, 0 insertions, 341 deletions
diff --git a/src/tests/test_contract.c b/src/tests/test_contract.c deleted file mode 100644 index ce752342..00000000 --- a/src/tests/test_contract.c +++ /dev/null @@ -1,341 +0,0 @@ -/* - This file is part of TALER - Copyright (C) 2014, 2015, 2016 INRIA - - 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.GPL. If not, see <http://www.gnu.org/licenses/> -*/ - -/** -* @file src/tests/test_contract.c -* @brief test for various merchant's capabilities -* @author Marcello Stanisci -*/ - -#include "platform.h" -#include <jansson.h> -#include <gnunet/gnunet_util_lib.h> -#include <taler/taler_util.h> -#include "merchant.h" -#include "merchant_db.h" -#include <taler_merchant_lib.h> - -PGconn *db_conn; - -static int dry; -struct GNUNET_CRYPTO_EddsaPrivateKey *privkey; -char *keyfile; -static int result; -static struct MERCHANT_WIREFORMAT_Sepa *wire; - -extern -struct MERCHANT_WIREFORMAT_Sepa * -TALER_MERCHANT_parse_wireformat_sepa (const struct GNUNET_CONFIGURATION_Handle *cfg); - - -/** - * Shutdown task (magically invoked when the application is being - * quit) - * - * @param cls NULL - * @param tc scheduler task context - */ -static void -do_shutdown (void *cls, - const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - - if (NULL != db_conn) - { - TALER_MERCHANTDB_disconnect (db_conn); - db_conn = NULL; - } -} - - -extern uint32_t -TALER_MERCHANTDB_contract_get_values (PGconn *conn, - const struct GNUNET_HashCode *h_contract, - uint64_t *nounce, - struct GNUNET_TIME_Absolute *wire_transfer_deadline); - - -/** - * Main function that will be run by the scheduler. - * - * @param cls closure - * @param args remaining command-line arguments - * @param cfgfile name of the configuration file used (for saving, can be NULL!) - * @param config configuration - */ -static void -run (void *cls, char *const *args, const char *cfgfile, - const struct GNUNET_CONFIGURATION_Handle *config) - -{ - json_t *j_fake_contract; - json_t *j_details; - json_t *j_exchanges; - json_t *j_item; - json_t *j_amount; - json_t *j_tax_amount; - json_t *j_item_price; - json_t *j_max_fee; - json_t *j_teatax; - json_t *j_id; // trans id - json_t *j_pid; // product id - json_t *j_quantity; - json_t *j_delloc; - json_t *j_merchant; - json_t *j_merchant_jurisdiction; - json_t *j_merchant_zipcode; - json_t *j_lnames; - json_t *j_deldate; - char *desc; - struct TALER_Amount amount; - int64_t t_id; - int64_t p_id; - struct Contract contract; - struct GNUNET_TIME_Absolute wire_transfer_deadline; - struct GNUNET_TIME_Absolute now; - uint64_t nounce; - struct GNUNET_HashCode h_contract_str; - char *aa; - const char *fancy_time; - uint32_t ret; - - db_conn = NULL; - keyfile = NULL; - privkey = NULL; - wire = NULL; - - - db_conn = TALER_MERCHANTDB_connect (config); - if (GNUNET_OK != TALER_MERCHANTDB_initialize (db_conn, GNUNET_NO)) - { - printf ("no db init'd\n"); - result = GNUNET_SYSERR; - } - if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_filename (config, - "merchant", - "KEYFILE", - &keyfile)) - { - printf ("no keyfile entry in cfg file\n"); - result = GNUNET_SYSERR; - } - - privkey = GNUNET_CRYPTO_eddsa_key_create_from_file (keyfile); - wire = TALER_MERCHANT_parse_wireformat_sepa (config); - GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL); - - /** - * 'Root' object of the contract, leaving some holes to bi filled - * up by the merchant library. - * - */ - - /* Amount */ - TALER_amount_get_zero ("EUR", &amount); - j_amount = TALER_json_from_amount (&amount); - - /* Transaction ID*/ - //t_id = (int32_t) GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, UINT64_MAX); - t_id = 321; - - if (t_id < 0) - j_id = json_integer ((-1) * t_id); - else - j_id = json_integer (t_id); - - /** - * Holes: - * - * - 'h_wire' - * - 'timestamp' - * - */ - - /** - * - * Preparing the 'details' sub-object: an array of 'item' objects - * plus some juridical and delivery-aware informations - * - */ - - /** - * - * Preparing a 'item' sub-object - */ - - /* Description */ - desc = "Fake purchase"; - - j_max_fee = TALER_json_from_amount (&amount); - /* Quantity: OPTIONAL FIELD */ - j_quantity = json_integer (3); - - /* item price: OPTIONAL FIELD*/ - j_item_price = TALER_json_from_amount (&amount); - - /* Product ID */ - p_id = (int32_t) GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, UINT64_MAX); - - if (p_id < 0) - j_pid = json_integer ((-1) * p_id); - else - j_pid = json_integer (p_id); - - /* Taxes: array of "tax_name" : {tax amount} */ - j_tax_amount = TALER_json_from_amount (&amount); - j_teatax = json_pack ("{s:o}", - "teatax", j_tax_amount); - - if (NULL == (j_item = json_pack ("{s:s, s:I, s:o, s:[o]}", - "description", desc, - "quantity", json_integer_value (j_quantity), - "itemprice", j_item_price, - "taxes", j_teatax))) - { - printf ("error in packing [j_item: %p]\n", j_item); - return; - } - - /* End of 'item' object definition */ - - /* Delivery date: OPTIONAL FIELD */ - now = GNUNET_TIME_absolute_get (); - TALER_round_abs_time (&now); -// deldate = GNUNET_TIME_absolute_add (now, GNUNET_TIME_UNIT_WEEKS); - j_deldate = TALER_json_from_abs (now); - - /* Delivery location: OPTIONAL FIELD */ - j_delloc = json_string ("MALTK"); /* just a 'tag' which points to some well defined location */ - - - /* Merchant jurisdiction: OPTIONAL FIELD (with its fields from 3rd to the last being optional) - * for another optional field */ - j_merchant_zipcode = json_integer (9468); - j_merchant_jurisdiction = json_pack ("{s:s, s:s, s:s, s:s, s:s, s:I}", - "country", "Test Country", - "city", "Test City", - "state", "NA", - "region", "NA", - "province", "NA", - "ZIP code", json_integer_value (j_merchant_zipcode)); - - /* Merchant details */ - j_merchant = json_pack ("{s:s, s:s, s:o}", - "address", "UALMP", - "name", "test merchant", - "jurisdiction", j_merchant_jurisdiction); - - - /* L-names mapping */ - j_lnames = json_pack ("[{s:s}, {s:s}]", - "MALTK", "Test Address 1", - "UALMP", "Second Test Address"); - - - - j_details = json_pack ("{s:I, s:o, s:o, s:o, s:o, s:o}", - "product_id", json_integer_value (j_pid), - "items", j_item, - "delivery date", j_deldate, - "delivery location", j_delloc, - "merchant", j_merchant, - "L-names", j_lnames); - - /* Faking out the exchanges' list */ - j_exchanges = json_pack ("[{s:s}]", - "demo.taler.net", - "Q1WVGRGC1F4W7RYC6M23AEGFEXQEHQ730K3GG0B67VPHQSRR75H0"); - - j_fake_contract = json_pack ("{s:o, s:o, s:I, s:o, s:o}", - "amount", j_amount, - "max fee", j_max_fee, - "trans_id", json_integer_value (j_id), - "exchanges", j_exchanges, - "details", j_details); - #if 0 - str = json_dumps (j_fake_contract, JSON_INDENT(2) | JSON_PRESERVE_ORDER); - printf ("%s\n", str); - return; - #endif - - nounce = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_NONCE, UINT64_MAX); - - ret = MERCHANT_handle_contract (j_fake_contract, - db_conn, - &contract, - now, - now, - now, - now, - &aa, - nounce); - if (ret == GNUNET_NO) - { - printf ("Failed, contract already in DB\n"); - return; - } - else - printf ("handling contract fine\n"); - - - printf ("contract string : %s\n", aa); - - GNUNET_CRYPTO_hash (aa, strlen (aa) + 1, &h_contract_str); - if (GNUNET_SYSERR == - TALER_MERCHANTDB_contract_get_values (db_conn, - &h_contract_str, - &nounce, - &wire_transfer_deadline)) - { - printf ("no hash found\n"); - } - else - { - - fancy_time = GNUNET_STRINGS_absolute_time_to_string (wire_transfer_deadline); - printf ("hash found!, nounce is : %llu\n", nounce); - printf ("hash found!, wire transfer time is : %s\n", fancy_time); - } -} - - -/** - * The main function of the test tool - * - * @param argc number of arguments from the command line - * @param argv command line arguments - * @return 0 ok, 1 on error - */ -int -main (int argc, char *const *argv) -{ - - static const struct GNUNET_GETOPT_CommandLineOption options[] = { - {'t', "temp", NULL, - gettext_noop ("Use temporary database tables"), GNUNET_NO, - &GNUNET_GETOPT_set_one, &dry}, - GNUNET_GETOPT_OPTION_END - }; - - - if (GNUNET_OK != - GNUNET_PROGRAM_run (argc, argv, - "merchant-contract-test", - "Test for contracts mgmt", - options, &run, NULL)) - return 3; - return (GNUNET_OK == result) ? 0 : 1; -} |