183 lines
8.4 KiB
C
183 lines
8.4 KiB
C
|
/*
|
||
|
This file is part of TALER
|
||
|
Copyright (C) 2014, 2015 GNUnet e.V.
|
||
|
|
||
|
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, If not, see <http://www.gnu.org/licenses/>
|
||
|
*/
|
||
|
/**
|
||
|
* @file exchangedb/test_perf_taler_exchangedb.c
|
||
|
* @brief Exchange database performance analysis
|
||
|
* @author Nicolas Fournier
|
||
|
*/
|
||
|
#include "platform.h"
|
||
|
#include "perf_taler_exchangedb_interpreter.h"
|
||
|
#include "perf_taler_exchangedb_init.h"
|
||
|
|
||
|
|
||
|
#define NB_DENOMINATION_INIT 2
|
||
|
#define NB_DENOMINATION_SAVE 2
|
||
|
|
||
|
#define NB_RESERVE_INIT 4
|
||
|
#define NB_RESERVE_SAVE 1
|
||
|
|
||
|
#define NB_DEPOSIT_INIT 1
|
||
|
#define NB_DEPOSIT_SAVE 1
|
||
|
|
||
|
#define NB_WITHDRAW_INIT 1
|
||
|
#define NB_WITHDRAW_SAVE 1
|
||
|
|
||
|
/**
|
||
|
* Allocate, copies and free all the data used in the interpreter
|
||
|
* Used to check for memory leaks
|
||
|
*/
|
||
|
static void
|
||
|
test_allocate ()
|
||
|
{
|
||
|
struct TALER_EXCHANGEDB_DenominationKeyIssueInformation *dki, *dki_copy;
|
||
|
struct PERF_TALER_EXCHANGEDB_Reserve *reserve, *reserve_copy;
|
||
|
struct PERF_TALER_EXCHANGEDB_Coin *coin, *coin_copy;
|
||
|
struct TALER_EXCHANGEDB_Deposit *deposit, *deposit_copy;
|
||
|
|
||
|
dki = PERF_TALER_EXCHANGEDB_denomination_init ();
|
||
|
reserve = PERF_TALER_EXCHANGEDB_reserve_init ();
|
||
|
coin = PERF_TALER_EXCHANGEDB_coin_init (dki,
|
||
|
reserve);
|
||
|
deposit = PERF_TALER_EXCHANGEDB_deposit_init (coin);
|
||
|
|
||
|
dki_copy = PERF_TALER_EXCHANGEDB_denomination_copy (dki);
|
||
|
reserve_copy = PERF_TALER_EXCHANGEDB_reserve_copy (reserve);
|
||
|
coin_copy = PERF_TALER_EXCHANGEDB_coin_copy (coin);
|
||
|
deposit_copy = PERF_TALER_EXCHANGEDB_deposit_copy (deposit);
|
||
|
|
||
|
PERF_TALER_EXCHANGEDB_denomination_free (dki);
|
||
|
PERF_TALER_EXCHANGEDB_denomination_free (dki_copy);
|
||
|
PERF_TALER_EXCHANGEDB_reserve_free (reserve);
|
||
|
PERF_TALER_EXCHANGEDB_reserve_free (reserve_copy);
|
||
|
PERF_TALER_EXCHANGEDB_coin_free (coin);
|
||
|
PERF_TALER_EXCHANGEDB_coin_free (coin_copy);
|
||
|
PERF_TALER_EXCHANGEDB_deposit_free (deposit);
|
||
|
PERF_TALER_EXCHANGEDB_deposit_free (deposit_copy);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Runs the performances tests for the exchange database
|
||
|
* and logs the results using Gauger
|
||
|
*/
|
||
|
int
|
||
|
main (int argc, char ** argv)
|
||
|
{
|
||
|
int ret = 0;
|
||
|
struct PERF_TALER_EXCHANGEDB_Cmd init[] =
|
||
|
{
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_END ("init")
|
||
|
};
|
||
|
struct PERF_TALER_EXCHANGEDB_Cmd benchmark[] =
|
||
|
{
|
||
|
// Denomination used to create coins
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_DEBUG ("00 - Start of interpreter"),
|
||
|
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_LOOP ("01 - denomination loop",
|
||
|
NB_DENOMINATION_INIT),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_START_TRANSACTION ("01 - start transaction"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_CREATE_DENOMINATION ("01 - denomination"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_INSERT_DENOMINATION ("01 - insert",
|
||
|
"01 - denomination"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_COMMIT_TRANSACTION ("01 - commit transaction"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_SAVE_ARRAY ("01 - save denomination",
|
||
|
"01 - denomination loop",
|
||
|
"01 - denomination",
|
||
|
NB_DENOMINATION_SAVE),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_END_LOOP ("01 - denomination loop end",
|
||
|
"01 - denomination loop"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_DEBUG ("01 - init denomination complete"),
|
||
|
// End of initialization
|
||
|
// Reserve initialization
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_LOOP ("02 - init reserve loop",
|
||
|
NB_RESERVE_INIT),
|
||
|
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_CREATE_RESERVE ("02 - reserve"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_INSERT_RESERVE ("02 - insert",
|
||
|
"02 - reserve"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_SAVE_ARRAY ("02 - save reserve",
|
||
|
"02 - init reserve loop",
|
||
|
"02 - reserve",
|
||
|
NB_RESERVE_SAVE),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_END_LOOP ("02 - init reserve end loop",
|
||
|
"02 - init reserve loop"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_DEBUG ("02 - reserve init complete"),
|
||
|
// End reserve init
|
||
|
// Withdrawal initialization
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_LOOP ("03 - init withdraw loop",
|
||
|
NB_WITHDRAW_INIT),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_START_TRANSACTION ("03 - start transaction"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_LOAD_ARRAY ("03 - denomination load",
|
||
|
"03 - init withdraw loop",
|
||
|
"01 - save denomination"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_LOAD_ARRAY ("03 - reserve load",
|
||
|
"03 - init withdraw loop",
|
||
|
"02 - save reserve"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_CREATE_WITHDRAW ("03 - withdraw",
|
||
|
"03 - denomination load",
|
||
|
"03 - reserve load"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_INSERT_WITHDRAW ("03 - insert withdraw",
|
||
|
"03 - withdraw"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_COMMIT_TRANSACTION ("03 - commit transaction"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_SAVE_ARRAY ("03 - coin array",
|
||
|
"03 - init withdraw loop",
|
||
|
"03 - withdraw",
|
||
|
NB_WITHDRAW_SAVE),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_END_LOOP ("03 - withdraw init end loop",
|
||
|
"03 - init withdraw loop"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_DEBUG ("03 - withdraw init complete"),
|
||
|
//End of withdrawal initialization
|
||
|
//Deposit initialization
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_GET_TIME ("04 - time start"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_LOOP ("04 - deposit init loop",
|
||
|
NB_DEPOSIT_INIT),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_START_TRANSACTION ("04 - start transaction"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_LOAD_ARRAY ("04 - coin load",
|
||
|
"04 - deposit init loop",
|
||
|
"03 - coin array"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_CREATE_DEPOSIT ("04 - deposit",
|
||
|
"04 - coin load"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_INSERT_DEPOSIT ("04 - insert deposit",
|
||
|
"04 - deposit"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_COMMIT_TRANSACTION ("04 - commit transaction"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_SAVE_ARRAY ("04 - deposit array",
|
||
|
"04 - deposit init loop",
|
||
|
"04 - deposit",
|
||
|
NB_DEPOSIT_SAVE),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_END_LOOP ("04 - deposit init loop end",
|
||
|
"04 - deposit init loop"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_GET_TIME ("04 - time stop"),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_GAUGER ("04 - gauger",
|
||
|
"04 - time start",
|
||
|
"04 - time stop",
|
||
|
"TEST",
|
||
|
"time to insert a deposit",
|
||
|
"deposit/sec",
|
||
|
NB_DEPOSIT_SAVE),
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_DEBUG ("04 - deposit init complete"),
|
||
|
// End of deposit initialization
|
||
|
PERF_TALER_EXCHANGEDB_INIT_CMD_END ("end"),
|
||
|
};
|
||
|
|
||
|
test_allocate ();
|
||
|
ret = PERF_TALER_EXCHANGEDB_run_benchmark ("test-perf-taler-exchangedb",
|
||
|
"./test-exchange-db-postgres.conf",
|
||
|
init,
|
||
|
benchmark);
|
||
|
if (GNUNET_SYSERR == ret)
|
||
|
return 1;
|
||
|
return 0;
|
||
|
}
|