aboutsummaryrefslogtreecommitdiff
path: root/src/auditor/setup.sh
blob: 87946b05cae0210e0bff8105d666c7fe47db4b18 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/bin/bash
# This file is in the public domain

# Script to be inlined into the main test scripts. Defines function 'setup()'
# which wraps around 'taler-unified-setup.sh' to launch GNU Taler services.
# Call setup() with the arguments to pass to 'taler-unified-setup'. setup()
# will then launch GNU Taler, wait for the process to be complete before
# returning. The script will also install an exit handler to ensure the GNU
# Taler processes are stopped when the shell exits.

set -eu

# Cleanup to run whenever we exit
function exit_cleanup()
{
    if [ ! -z ${SETUP_PID+x} ]
    then
        echo "Killing taler-unified-setup ($SETUP_PID)" >&2
        kill -TERM "$SETUP_PID" 2> /dev/null || true
        wait
    fi
}

# Install cleanup handler (except for kill -9)
trap exit_cleanup EXIT

function setup()
{
    echo "Starting test system ..." >&2
    # Create a named pipe in a temp directory we own.
    FIFO_DIR=$(mktemp -d fifo-XXXXXX)
    FIFO_OUT=$(echo "$FIFO_DIR/out")
    mkfifo "$FIFO_OUT"
    # Open pipe as FD 3 (RW) and FD 4 (RO)
    exec 3<> "$FIFO_OUT" 4< "$FIFO_OUT"
    rm -rf "$FIFO_DIR"
    # We require '-W' for our termination logic to work.
    taler-unified-setup.sh -W "$@" >&3 &
    SETUP_PID=$!
    # Close FD3
    exec 3>&-
    sed -u '/<<READY>>/ q' <&4
    # Close FD4
    exec 4>&-
    echo "Test system ready" >&2
}

# Exit, with status code "skip" (no 'real' failure)
function exit_fail() {
    echo "$@" >&2
    exit 1
}

# Exit, with status code "skip" (no 'real' failure)
function exit_skip() {
    echo "SKIPPING: $1"
    exit 77
}

function get_payto_uri() {
    export LIBEUFIN_SANDBOX_USERNAME="$1"
    export LIBEUFIN_SANDBOX_PASSWORD="$2"
    export LIBEUFIN_SANDBOX_URL="http://localhost:18082"
    libeufin-cli sandbox demobank info --bank-account "$1" | jq --raw-output '.paytoUri'
}

function get_bankaccount_transactions() {
    export LIBEUFIN_SANDBOX_USERNAME=$1
    export LIBEUFIN_SANDBOX_PASSWORD=$2
    export LIBEUFIN_SANDBOX_URL="http://localhost:18082"
    libeufin-cli sandbox demobank list-transactions --bank-account $1
}


# Stop libeufin sandbox and nexus (if running)
function stop_libeufin()
{
    echo -n "Stopping libeufin... "
    if [ -f "${MY_TMP_DIR:-/}/libeufin-sandbox.pid" ]
    then
        PID=$(cat "${MY_TMP_DIR}/libeufin-sandbox.pid" 2> /dev/null)
        echo "Killing libeufin sandbox $PID"
        rm "${MY_TMP_DIR}/libeufin-sandbox.pid"
        kill "$PID" 2> /dev/null || true
        wait "$PID" || true
    fi
    if [ -f "${MY_TMP_DIR:-/}/libeufin-nexus.pid" ]
    then
        PID=$(cat "${MY_TMP_DIR}/libeufin-nexus.pid" 2> /dev/null)
        echo "Killing libeufin nexus $PID"
        rm "${MY_TMP_DIR}/libeufin-nexus.pid"
        kill "$PID" 2> /dev/null || true
        wait "$PID" || true
    fi
    echo "DONE"
}


function launch_libeufin () {
# shellcheck disable=SC2016
    export LIBEUFIN_SANDBOX_DB_CONNECTION="postgresql:///${DB}"
    libeufin-sandbox serve \
                     --no-auth \
                     --port 18082 \
                     > "${MY_TMP_DIR}/libeufin-sandbox-stdout.log" \
                     2> "${MY_TMP_DIR}/libeufin-sandbox-stderr.log" &
    echo $! > "${MY_TMP_DIR}/libeufin-sandbox.pid"
# shellcheck disable=SC2016
    export LIBEUFIN_NEXUS_DB_CONNECTION="postgresql:///${DB}"
    libeufin-nexus serve \
                   --port 8082 \
                   2> "${MY_TMP_DIR}/libeufin-nexus-stderr.log" \
                   > "${MY_TMP_DIR}/libeufin-nexus-stdout.log" &
    echo $! > "${MY_TMP_DIR}/libeufin-nexus.pid"
}



# Downloads new transactions from the bank.
function nexus_fetch_transactions () {
    export LIBEUFIN_NEXUS_USERNAME="exchange"
    export LIBEUFIN_NEXUS_PASSWORD="x"
    export LIBEUFIN_NEXUS_URL="http://localhost:8082/"
    libeufin-cli accounts \
                 fetch-transactions \
                 --range-type since-last \
                 --level report \
                 exchange-nexus > /dev/null
    unset LIBEUFIN_NEXUS_USERNAME
    unset LIBEUFIN_NEXUS_PASSWORD
    unset LIBEUFIN_NEXUS_URL
}


# Instruct Nexus to all the prepared payments (= those
# POSTed to /transfer by the exchange).
function nexus_submit_to_sandbox () {
    export LIBEUFIN_NEXUS_USERNAME="exchange"
    export LIBEUFIN_NEXUS_PASSWORD="x"
    export LIBEUFIN_NEXUS_URL="http://localhost:8082/"
    libeufin-cli accounts \
                 submit-payments\
                 exchange-nexus
    unset LIBEUFIN_NEXUS_USERNAME
    unset LIBEUFIN_NEXUS_PASSWORD
    unset LIBEUFIN_NEXUS_URL
}