summaryrefslogtreecommitdiff
path: root/src/testing
diff options
context:
space:
mode:
Diffstat (limited to 'src/testing')
-rw-r--r--src/testing/Makefile.am9
-rwxr-xr-xsrc/testing/scat2
-rw-r--r--src/testing/test_anastasis_reducer_1.conf9
-rw-r--r--src/testing/test_anastasis_reducer_2.conf9
-rw-r--r--src/testing/test_anastasis_reducer_3.conf9
-rw-r--r--src/testing/test_anastasis_reducer_4.conf27
-rw-r--r--src/testing/test_anastasis_reducer_4_free.conf8
-rwxr-xr-xsrc/testing/test_prepare.sh322
-rw-r--r--src/testing/test_reducer.conf189
9 files changed, 584 insertions, 0 deletions
diff --git a/src/testing/Makefile.am b/src/testing/Makefile.am
new file mode 100644
index 0000000..1d91895
--- /dev/null
+++ b/src/testing/Makefile.am
@@ -0,0 +1,9 @@
+SUBDIRS = .
+EXTRA_DIST = \
+ test_anastasis_reducer_1.conf \
+ test_anastasis_reducer_2.conf \
+ test_anastasis_reducer_3.conf \
+ test_anastasis_reducer_4.conf \
+ test_anastasis_reducer_4_free.conf \
+ test_prepare.sh \
+ test_reducer.conf
diff --git a/src/testing/scat b/src/testing/scat
new file mode 100755
index 0000000..7596208
--- /dev/null
+++ b/src/testing/scat
@@ -0,0 +1,2 @@
+#!/bin/bash
+exec cat - 2>&1 >$1
diff --git a/src/testing/test_anastasis_reducer_1.conf b/src/testing/test_anastasis_reducer_1.conf
new file mode 100644
index 0000000..25b001e
--- /dev/null
+++ b/src/testing/test_anastasis_reducer_1.conf
@@ -0,0 +1,9 @@
+@INLINE@ test_reducer.conf
+
+[anastasis]
+PORT = 8086
+SERVER_SALT = AUfO1KGOKYIFlFQ1
+BUSINESS_NAME = "Data loss #1 Inc."
+
+[stasis-postgres]
+CONFIG = postgres:///anastasischeck1
diff --git a/src/testing/test_anastasis_reducer_2.conf b/src/testing/test_anastasis_reducer_2.conf
new file mode 100644
index 0000000..48f7dd7
--- /dev/null
+++ b/src/testing/test_anastasis_reducer_2.conf
@@ -0,0 +1,9 @@
+@INLINE@ test_reducer.conf
+
+[anastasis]
+PORT = 8087
+SERVER_SALT = BUfO1KGOKYIFlFQ2
+BUSINESS_NAME = "Data loss #2 Inc."
+
+[stasis-postgres]
+CONFIG = postgres:///anastasischeck2
diff --git a/src/testing/test_anastasis_reducer_3.conf b/src/testing/test_anastasis_reducer_3.conf
new file mode 100644
index 0000000..fdfbada
--- /dev/null
+++ b/src/testing/test_anastasis_reducer_3.conf
@@ -0,0 +1,9 @@
+@INLINE@ test_reducer.conf
+
+[anastasis]
+PORT = 8088
+SERVER_SALT = CUfO1KGOKYIFlFQ3
+BUSINESS_NAME = "Data loss #3 Inc."
+
+[stasis-postgres]
+CONFIG = postgres:///anastasischeck3
diff --git a/src/testing/test_anastasis_reducer_4.conf b/src/testing/test_anastasis_reducer_4.conf
new file mode 100644
index 0000000..d990d6b
--- /dev/null
+++ b/src/testing/test_anastasis_reducer_4.conf
@@ -0,0 +1,27 @@
+@INLINE@ test_reducer.conf
+
+[anastasis]
+PORT = 8089
+SERVER_SALT = DUfO1KGOKYIFlFQ4
+BUSINESS_NAME = "Data loss #4 Inc."
+
+ANNUAL_FEE = TESTKUDOS:0.01
+TRUTH_UPLOAD_FEE = TESTKUDOS:0.01
+
+[stasis-postgres]
+CONFIG = postgres:///anastasischeck4
+
+[authorization-sms]
+COST = TESTKUDOS:0.0
+ENABLED = yes
+COMMAND = /bin/false
+
+[authorization-post]
+COST = TESTKUDOS:1.0
+ENABLED = yes
+COMMAND = /bin/false
+
+[authorization-email]
+COST = TESTKUDOS:0.01
+ENABLED = yes
+COMMAND = scat
diff --git a/src/testing/test_anastasis_reducer_4_free.conf b/src/testing/test_anastasis_reducer_4_free.conf
new file mode 100644
index 0000000..5e987a6
--- /dev/null
+++ b/src/testing/test_anastasis_reducer_4_free.conf
@@ -0,0 +1,8 @@
+@INLINE@ test_anastasis_reducer_4.conf
+
+[anastasis]
+ANNUAL_FEE = TESTKUDOS:0.0
+TRUTH_UPLOAD_FEE = TESTKUDOS:0.0
+
+[authorization-email]
+COST = TESTKUDOS:0.0
diff --git a/src/testing/test_prepare.sh b/src/testing/test_prepare.sh
new file mode 100755
index 0000000..253cb8f
--- /dev/null
+++ b/src/testing/test_prepare.sh
@@ -0,0 +1,322 @@
+#!/bin/bash
+# Shell script to launch Taler components
+# and Anastasis providers for local test
+# using TESTKUDOS.
+
+set -eu
+
+# Exit, with status code "skip" (no 'real' failure)
+function exit_skip() {
+ echo " SKIP: $1"
+ exit 77
+}
+
+# Exit, with error message (hard failure)
+function exit_fail() {
+ echo " FAIL: $1"
+ exit 1
+}
+
+# Cleanup to run whenever we exit
+function cleanup()
+{
+ for n in `jobs -p`
+ do
+ kill $n 2> /dev/null || true
+ done
+ rm -rf $CONF $WALLET_DB $R1FILE $R2FILE $B1FILE $B2FILE $TMP_DIR
+ wait
+}
+
+if test "${1:-}" != "free" -a "${1:-}" != "fees"
+then
+ echo "Launch script with either 'free' or 'fees' argument to launch providers with/without fees."
+ exit 1
+fi
+
+CONF_1="test_anastasis_reducer_1.conf"
+CONF_2="test_anastasis_reducer_2.conf"
+CONF_3="test_anastasis_reducer_3.conf"
+CONF_4="test_anastasis_reducer_4.conf"
+if test $1 = 'free'
+then
+ CONF_4="test_anastasis_reducer_4_free.conf"
+fi
+
+# Exchange configuration file will be edited, so we create one
+# from the template.
+CONF=`mktemp test_reducerXXXXXX.conf`
+cp test_reducer.conf $CONF
+
+TMP_DIR=`mktemp -d keys-tmp-XXXXXX`
+WALLET_DB=`mktemp test_reducer_walletXXXXXX.json`
+B1FILE=`mktemp test_reducer_stateB1XXXXXX`
+B2FILE=`mktemp test_reducer_stateB2XXXXXX`
+R1FILE=`mktemp test_reducer_stateR1XXXXXX`
+R2FILE=`mktemp test_reducer_stateR2XXXXXX`
+
+# Install cleanup handler (except for kill -9)
+trap cleanup EXIT
+
+# Check we can actually run
+if test $1 = 'fees'
+then
+ echo -n "Testing for taler"
+ taler-exchange-httpd -h > /dev/null || exit_skip " taler-exchange required"
+ taler-merchant-httpd -h > /dev/null || exit_skip " taler-merchant required"
+ echo " FOUND"
+
+ echo -n "Testing for taler-bank-manage"
+ taler-bank-manage --help >/dev/null </dev/null || exit_skip " MISSING"
+ echo " FOUND"
+
+ echo -n "Testing for taler-wallet-cli"
+ taler-wallet-cli -v >/dev/null </dev/null || exit_skip " MISSING"
+ echo " FOUND"
+fi
+
+echo -n "Testing for anastasis-httpd"
+anastasis-httpd -h >/dev/null </dev/null || exit_skip " MISSING"
+echo " FOUND"
+
+echo -n "Initialize anastasis database ..."
+# Name of the Postgres database we will use for the script.
+# Will be dropped, do NOT use anything that might be used
+# elsewhere
+TARGET_DB_1=`anastasis-config -c $CONF_1 -s stasis-postgres -o CONFIG | sed -e "s/^postgres:\/\/\///"`
+TARGET_DB_2=`anastasis-config -c $CONF_2 -s stasis-postgres -o CONFIG | sed -e "s/^postgres:\/\/\///"`
+TARGET_DB_3=`anastasis-config -c $CONF_3 -s stasis-postgres -o CONFIG | sed -e "s/^postgres:\/\/\///"`
+TARGET_DB_4=`anastasis-config -c $CONF_4 -s stasis-postgres -o CONFIG | sed -e "s/^postgres:\/\/\///"`
+
+dropdb $TARGET_DB_1 >/dev/null 2>/dev/null || true
+createdb $TARGET_DB_1 || exit_skip "Could not create database $TARGET_DB_1"
+anastasis-dbinit -c $CONF_1 2> anastasis-dbinit_1.log
+dropdb $TARGET_DB_2 >/dev/null 2>/dev/null || true
+createdb $TARGET_DB_2 || exit_skip "Could not create database $TARGET_DB_2"
+anastasis-dbinit -c $CONF_2 2> anastasis-dbinit_2.log
+dropdb $TARGET_DB_3 >/dev/null 2>/dev/null || true
+createdb $TARGET_DB_3 || exit_skip "Could not create database $TARGET_DB_3"
+anastasis-dbinit -c $CONF_3 2> anastasis-dbinit_3.log
+dropdb $TARGET_DB_4 >/dev/null 2>/dev/null || true
+createdb $TARGET_DB_4 || exit_skip "Could not create database $TARGET_DB_4"
+anastasis-dbinit -c $CONF_4 2> anastasis-dbinit_4.log
+
+echo " OK"
+
+if test $1 = 'fees'
+then
+
+ echo -n "Generating Taler auditor, exchange and merchant configurations ..."
+
+ DATA_DIR=`taler-config -f -c $CONF -s PATHS -o TALER_HOME`
+ rm -rf $DATA_DIR
+
+ # obtain key configuration data
+ MASTER_PRIV_FILE=`taler-config -f -c $CONF -s EXCHANGE -o MASTER_PRIV_FILE`
+ MASTER_PRIV_DIR=`dirname $MASTER_PRIV_FILE`
+ mkdir -p $MASTER_PRIV_DIR
+ gnunet-ecc -g1 $MASTER_PRIV_FILE > /dev/null 2> /dev/null
+ MASTER_PUB=`gnunet-ecc -p $MASTER_PRIV_FILE`
+ EXCHANGE_URL=`taler-config -c $CONF -s EXCHANGE -o BASE_URL`
+ MERCHANT_PORT=`taler-config -c $CONF -s MERCHANT -o PORT`
+ MERCHANT_URL=http://localhost:${MERCHANT_PORT}/
+ BANK_PORT=`taler-config -c $CONF -s BANK -o HTTP_PORT`
+ BANK_URL=http://localhost:${BANK_PORT}/
+ AUDITOR_URL=http://localhost:8083/
+ AUDITOR_PRIV_FILE=`taler-config -f -c $CONF -s AUDITOR -o AUDITOR_PRIV_FILE`
+ AUDITOR_PRIV_DIR=`dirname $AUDITOR_PRIV_FILE`
+ mkdir -p $AUDITOR_PRIV_DIR
+ gnunet-ecc -g1 $AUDITOR_PRIV_FILE > /dev/null 2> /dev/null
+ AUDITOR_PUB=`gnunet-ecc -p $AUDITOR_PRIV_FILE`
+
+ # patch configuration
+ TALER_DB=talercheck
+ taler-config -c $CONF -s exchange -o MASTER_PUBLIC_KEY -V $MASTER_PUB
+ taler-config -c $CONF -s merchant-exchange-default -o MASTER_KEY -V $MASTER_PUB
+ taler-config -c $CONF -s exchangedb-postgres -o CONFIG -V postgres:///$TALER_DB
+ taler-config -c $CONF -s auditordb-postgres -o CONFIG -V postgres:///$TALER_DB
+ taler-config -c $CONF -s merchantdb-postgres -o CONFIG -V postgres:///$TALER_DB
+ taler-config -c $CONF -s bank -o database -V postgres:///$TALER_DB
+ taler-config -c $CONF -s exchange -o KEYDIR -V "${TMP_DIR}/keydir/"
+ taler-config -c $CONF -s exchange -o REVOCATION_DIR -V "${TMP_DIR}/revdir/"
+
+ echo " OK"
+
+ echo -n "Setting up exchange ..."
+
+ # reset database
+ dropdb $TALER_DB >/dev/null 2>/dev/null || true
+ createdb $TALER_DB || exit_skip "Could not create database $TALER_DB"
+ taler-exchange-dbinit -c $CONF
+ taler-merchant-dbinit -c $CONF
+ taler-auditor-dbinit -c $CONF
+ taler-auditor-exchange -c $CONF -m $MASTER_PUB -u $EXCHANGE_URL
+
+ echo " OK"
+
+ # Launch services
+ echo -n "Launching taler services ..."
+ taler-bank-manage-testing $CONF postgres:///$TALER_DB serve > taler-bank.log 2> taler-bank.err &
+ taler-exchange-secmod-eddsa -c $CONF 2> taler-exchange-secmod-eddsa.log &
+ taler-exchange-secmod-rsa -c $CONF 2> taler-exchange-secmod-rsa.log &
+ taler-exchange-httpd -c $CONF 2> taler-exchange-httpd.log &
+ taler-merchant-httpd -c $CONF -L INFO 2> taler-merchant-httpd.log &
+ taler-exchange-wirewatch -c $CONF 2> taler-exchange-wirewatch.log &
+ taler-auditor-httpd -L INFO -c $CONF 2> taler-auditor-httpd.log &
+
+ echo " OK"
+
+fi
+
+
+echo -n "Launching anastasis services ..."
+# PREFIX="valgrind --log-file=anastasis-httpd.%p.log"
+PREFIX=""
+$PREFIX anastasis-httpd -L INFO -c $CONF_1 2> anastasis-httpd_1.log &
+$PREFIX anastasis-httpd -L INFO -c $CONF_2 2> anastasis-httpd_2.log &
+$PREFIX anastasis-httpd -L INFO -c $CONF_3 2> anastasis-httpd_3.log &
+$PREFIX anastasis-httpd -L INFO -c $CONF_4 2> anastasis-httpd_4.log &
+
+
+if test $1 = 'fees'
+then
+
+ # Wait for bank to be available (usually the slowest)
+ for n in `seq 1 50`
+ do
+ echo -n "."
+ sleep 0.2
+ OK=0
+ # bank
+ wget --tries=1 --timeout=1 http://localhost:8082/ -o /dev/null -O /dev/null >/dev/null || continue
+ OK=1
+ break
+ done
+
+ if [ 1 != $OK ]
+ then
+ exit_skip "Failed to launch services (bank)"
+ fi
+
+ # Wait for all other taler services to be available
+ for n in `seq 1 50`
+ do
+ echo -n "."
+ sleep 0.1
+ OK=0
+ # exchange
+ wget --tries=1 --timeout=1 http://localhost:8081/seed -o /dev/null -O /dev/null >/dev/null || continue
+ # merchant
+ wget --tries=1 --timeout=1 http://localhost:9966/ -o /dev/null -O /dev/null >/dev/null || continue
+ # auditor
+ wget --tries=1 --timeout=1 http://localhost:8083/ -o /dev/null -O /dev/null >/dev/null || continue
+ OK=1
+ break
+ done
+
+ if [ 1 != $OK ]
+ then
+ exit_skip "Failed to launch taler services"
+ fi
+
+ echo "OK"
+
+ echo -n "Setting up keys ..."
+ taler-exchange-offline -c $CONF \
+ download \
+ sign \
+ enable-account payto://x-taler-bank/localhost/Exchange \
+ enable-auditor $AUDITOR_PUB $AUDITOR_URL "TESTKUDOS Auditor" \
+ wire-fee now x-taler-bank TESTKUDOS:0.01 TESTKUDOS:0.01 \
+ upload &> taler-exchange-offline.log
+
+ echo -n "."
+
+ for n in `seq 1 3`
+ do
+ echo -n "."
+ OK=0
+ wget --tries=1 --timeout=1 http://localhost:8081/keys -o /dev/null -O /dev/null >/dev/null || continue
+ OK=1
+ break
+ done
+
+ if [ 1 != $OK ]
+ then
+ exit_skip "Failed to setup keys"
+ fi
+
+ echo " OK"
+
+ echo -n "Setting up auditor signatures ..."
+ taler-auditor-offline -c $CONF \
+ download sign upload &> taler-auditor-offline.log
+ echo " OK"
+
+fi
+
+echo -n "Waiting for anastasis services ..."
+
+# Wait for anastasis services to be available
+for n in `seq 1 50`
+do
+ echo -n "."
+ sleep 0.1
+ OK=0
+ # anastasis_01
+ wget --tries=1 --timeout=1 http://localhost:8086/ -o /dev/null -O /dev/null >/dev/null || continue
+ # anastasis_02
+ wget --tries=1 --timeout=1 http://localhost:8087/ -o /dev/null -O /dev/null >/dev/null || continue
+ # anastasis_03
+ wget --tries=1 --timeout=1 http://localhost:8088/ -o /dev/null -O /dev/null >/dev/null || continue
+ # anastasis_04
+ wget --tries=1 --timeout=1 http://localhost:8089/ -o /dev/null -O /dev/null >/dev/null || continue
+ OK=1
+ break
+done
+
+if [ 1 != $OK ]
+then
+ exit_skip "Failed to launch anastasis services"
+fi
+echo "OK"
+
+if test $1 = 'fees'
+then
+
+ echo -n "Configuring merchant instance ..."
+ # Setup merchant
+
+ curl -H "Content-Type: application/json" -X POST -d '{"auth":{"method":"external"},"payto_uris":["payto://x-taler-bank/localhost/43"],"id":"default","name":"default","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_ms" : 3600000},"default_pay_delay":{"d_ms": 3600000}}' http://localhost:9966/private/instances
+
+ echo " OK"
+
+ echo -n "Preparing wallet"
+ rm $WALLET_DB
+ taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api 'withdrawTestBalance' \
+ "$(jq -n '
+ {
+ amount: "TESTKUDOS:100",
+ bankBaseUrl: $BANK_URL,
+ exchangeBaseUrl: $EXCHANGE_URL
+ }' \
+ --arg BANK_URL "$BANK_URL" \
+ --arg EXCHANGE_URL "$EXCHANGE_URL"
+ )" 2> /dev/null >/dev/null
+ taler-wallet-cli --wallet-db=$WALLET_DB run-until-done 2>/dev/null >/dev/null
+ echo " OK"
+
+fi
+
+echo "You can now run anastasis-gtk in the shell we are starting now."
+echo "Exit the shell when done to terminate the test environment!"
+
+if test $1 = 'fees'
+then
+ echo "Use 'taler-wallet-cli --wallet-db=\$WALLET_DB handle-uri \$PAY_URI -y' to pay"
+ export WALLET_DB
+fi
+
+bash
+
+exit 0
diff --git a/src/testing/test_reducer.conf b/src/testing/test_reducer.conf
new file mode 100644
index 0000000..763f670
--- /dev/null
+++ b/src/testing/test_reducer.conf
@@ -0,0 +1,189 @@
+[PATHS]
+TALER_HOME = ${PWD}/test_reducer_home/
+TALER_DATA_HOME = $TALER_HOME/.local/share/taler/
+TALER_CONFIG_HOME = $TALER_HOME/.config/taler/
+TALER_CACHE_HOME = $TALER_HOME/.cache/taler/
+TALER_RUNTIME_DIR = ${TMPDIR:-${TMP:-/tmp}}/taler-system-runtime/
+
+[taler]
+CURRENCY = TESTKUDOS
+CURRENCY_ROUND_UNIT = TESTKUDOS:0.01
+
+[anastasis]
+DB = postgres
+PAYMENT_BACKEND_URL = http://localhost:9966/
+ANNUAL_FEE = TESTKUDOS:0
+# 4.99
+TRUTH_UPLOAD_FEE = TESTKUDOS:0.0
+UPLOAD_LIMIT_MB = 1
+INSURANCE = TESTKUDOS:1.0
+ANNUAL_POLICY_UPLOAD_LIMIT = 42
+
+[authorization-question]
+COST = TESTKUDOS:0.0
+
+
+[exchange]
+MAX_KEYS_CACHING = forever
+DB = postgres
+MASTER_PRIV_FILE = ${TALER_DATA_HOME}/exchange/offline-keys/master.priv
+SERVE = tcp
+UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http
+UNIXPATH_MODE = 660
+PORT = 8081
+BASE_URL = http://localhost:8081/
+SIGNKEY_DURATION = 2 weeks
+SIGNKEY_LEGAL_DURATION = 2 years
+LEGAL_DURATION = 2 years
+LOOKAHEAD_SIGN = 3 weeks 1 day
+LOOKAHEAD_PROVIDE = 2 weeks 1 day
+KEYDIR = ${TALER_DATA_HOME}/exchange/live-keys/
+REVOCATION_DIR = ${TALER_DATA_HOME}/exchange/revocations/
+TERMS_ETAG = 0
+PRIVACY_ETAG = 0
+
+[merchant]
+SERVE = tcp
+PORT = 9966
+UNIXPATH = ${TALER_RUNTIME_DIR}/merchant.http
+UNIXPATH_MODE = 660
+DEFAULT_WIRE_FEE_AMORTIZATION = 1
+DB = postgres
+WIREFORMAT = default
+# Set very low, so we can be sure that the database generated
+# will contain wire transfers "ready" for the aggregator.
+WIRE_TRANSFER_DELAY = 1 minute
+DEFAULT_PAY_DEADLINE = 1 day
+DEFAULT_MAX_DEPOSIT_FEE = TESTKUDOS:0.1
+KEYFILE = ${TALER_DATA_HOME}/merchant/merchant.priv
+DEFAULT_MAX_WIRE_FEE = TESTKUDOS:0.10
+
+# Ensure that merchant reports EVERY deposit confirmation to auditor
+FORCE_AUDIT = YES
+
+[auditor]
+DB = postgres
+AUDITOR_PRIV_FILE = ${TALER_DATA_HOME}/auditor/offline-keys/auditor.priv
+SERVE = tcp
+UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http
+UNIXPATH_MODE = 660
+PORT = 8083
+AUDITOR_URL = http://localhost:8083/
+TINY_AMOUNT = TESTKUDOS:0.01
+AUDITOR_PRIV_FILE = ${TALER_DATA_HOME}/auditor/offline-keys/auditor.priv
+BASE_URL = "http://localhost:8083/"
+
+[bank]
+DATABASE = postgres:///taler-auditor-basedb
+MAX_DEBT = TESTKUDOS:50.0
+MAX_DEBT_BANK = TESTKUDOS:100000.0
+HTTP_PORT = 8082
+SUGGESTED_EXCHANGE = http://localhost:8081/
+SUGGESTED_EXCHANGE_PAYTO = payto://x-taler-bank/localhost/2
+ALLOW_REGISTRATIONS = YES
+SERVE = http
+
+[exchangedb]
+IDLE_RESERVE_EXPIRATION_TIME = 4 weeks
+LEGAL_RESERVE_EXPIRATION_TIME = 7 years
+
+[exchange-account-1]
+PAYTO_URI = payto://x-taler-bank/localhost/Exchange
+enable_debit = yes
+enable_credit = yes
+WIRE_GATEWAY_URL = "http://localhost:8082/taler-wire-gateway/Exchange/"
+WIRE_GATEWAY_AUTH_METHOD = basic
+USERNAME = Exchange
+PASSWORD = x
+
+[merchant-exchange-default]
+EXCHANGE_BASE_URL = http://localhost:8081/
+CURRENCY = TESTKUDOS
+
+[coin_kudos_ct_1]
+value = TESTKUDOS:0.01
+duration_withdraw = 7 days
+duration_spend = 2 years
+duration_legal = 3 years
+fee_withdraw = TESTKUDOS:0.01
+fee_deposit = TESTKUDOS:0.01
+fee_refresh = TESTKUDOS:0.01
+fee_refund = TESTKUDOS:0.01
+rsa_keysize = 1024
+
+[coin_kudos_ct_10]
+value = TESTKUDOS:0.10
+duration_withdraw = 7 days
+duration_spend = 2 years
+duration_legal = 3 years
+fee_withdraw = TESTKUDOS:0.01
+fee_deposit = TESTKUDOS:0.01
+fee_refresh = TESTKUDOS:0.03
+fee_refund = TESTKUDOS:0.01
+rsa_keysize = 1024
+
+[coin_kudos_1]
+value = TESTKUDOS:1
+duration_withdraw = 7 days
+duration_spend = 2 years
+duration_legal = 3 years
+fee_withdraw = TESTKUDOS:0.02
+fee_deposit = TESTKUDOS:0.02
+fee_refresh = TESTKUDOS:0.03
+fee_refund = TESTKUDOS:0.01
+rsa_keysize = 1024
+
+[coin_kudos_2]
+value = TESTKUDOS:2
+duration_withdraw = 7 days
+duration_spend = 2 years
+duration_legal = 3 years
+fee_withdraw = TESTKUDOS:0.03
+fee_deposit = TESTKUDOS:0.03
+fee_refresh = TESTKUDOS:0.04
+fee_refund = TESTKUDOS:0.02
+rsa_keysize = 1024
+
+[coin_kudos_4]
+value = TESTKUDOS:4
+duration_withdraw = 7 days
+duration_spend = 2 years
+duration_legal = 3 years
+fee_withdraw = TESTKUDOS:0.03
+fee_deposit = TESTKUDOS:0.03
+fee_refresh = TESTKUDOS:0.04
+fee_refund = TESTKUDOS:0.02
+rsa_keysize = 1024
+
+[coin_kudos_5]
+value = TESTKUDOS:5
+duration_withdraw = 7 days
+duration_spend = 2 years
+duration_legal = 3 years
+fee_withdraw = TESTKUDOS:0.01
+fee_deposit = TESTKUDOS:0.01
+fee_refresh = TESTKUDOS:0.03
+fee_refund = TESTKUDOS:0.01
+rsa_keysize = 1024
+
+[coin_kudos_8]
+value = TESTKUDOS:8
+duration_withdraw = 7 days
+duration_spend = 2 years
+duration_legal = 3 years
+fee_withdraw = TESTKUDOS:0.05
+fee_deposit = TESTKUDOS:0.02
+fee_refresh = TESTKUDOS:0.03
+fee_refund = TESTKUDOS:0.04
+rsa_keysize = 1024
+
+[coin_kudos_10]
+value = TESTKUDOS:10
+duration_withdraw = 7 days
+duration_spend = 2 years
+duration_legal = 3 years
+fee_withdraw = TESTKUDOS:0.01
+fee_deposit = TESTKUDOS:0.01
+fee_refresh = TESTKUDOS:0.03
+fee_refund = TESTKUDOS:0.01
+rsa_keysize = 1024