Skip to content

Commit f94ed2e

Browse files
committed
maybe fix
1 parent da169ad commit f94ed2e

3 files changed

Lines changed: 88 additions & 22 deletions

File tree

.github/workflows/rust.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,9 @@ jobs:
110110
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
111111
cmake --build build -j $(nproc) --target bitcoin bitcoin-node bitcoin-cli
112112
113-
- name: Install Electrum wallet
113+
- name: Install Electrum wallet (4.7.2)
114114
run: |
115-
git clone --depth 1 --recurse-submodules https://github.com/spesmilo/electrum/
115+
git clone --depth 1 --branch 4.7.2 --recurse-submodules https://github.com/spesmilo/electrum/
116116
python3 -m venv --system-site-packages venv
117117
ELECTRUM_ECC_DONT_COMPILE=1 venv/bin/pip install -e electrum/
118118
sudo ln -s "$PWD/venv/bin/electrum" /usr/local/bin/electrum

tests/run-ipc.sh

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ fi
1616

1717
rm -rf data/
1818
mkdir -p data/{bitcoin,electrum,electrs}
19+
touch data/electrs/regtest-debug.log data/electrum/regtest-debug.log
1920

2021
cleanup() {
2122
trap - SIGTERM SIGINT
@@ -34,19 +35,51 @@ wait_for() {
3435
shift
3536
TEST_ARGS=$*
3637
for _ in `seq 0 9`; do
37-
test "$($CMD | jq -c .)" $TEST_ARGS && break || sleep 2
38+
if test "$($CMD | jq -c .)" $TEST_ARGS; then
39+
return 0
40+
fi
41+
sleep 2
3842
done
43+
44+
echo "Timed out waiting for condition: $CMD $TEST_ARGS" >&2
45+
return 1
46+
}
47+
48+
wait_for_log() {
49+
LOG_FILE=$1
50+
PATTERN=$2
51+
DESCRIPTION=$3
52+
for _ in `seq 0 99`; do
53+
if grep -Fq "$PATTERN" "$LOG_FILE"; then
54+
return 0
55+
fi
56+
sleep 0.2
57+
done
58+
59+
echo "Timed out waiting for $DESCRIPTION in $LOG_FILE" >&2
60+
tail -n +1 "$LOG_FILE" >&2 || true
61+
return 1
62+
}
63+
64+
wait_for_http() {
65+
URL=$1
66+
OUTPUT=$2
67+
for _ in `seq 0 99`; do
68+
if curl --silent --show-error --fail "$URL" -o "$OUTPUT"; then
69+
return 0
70+
fi
71+
sleep 0.2
72+
done
73+
74+
echo "Timed out waiting for HTTP endpoint $URL" >&2
75+
return 1
3976
}
4077

4178
BTC="$BITCOIN_MULTIPROCESS_BIN rpc -chain=regtest -datadir=$PWD/data/bitcoin"
4279
ELECTRUM="electrum --regtest"
4380
EL="$ELECTRUM --wallet=data/electrum/wallet"
4481
SOCK="$PWD/data/bitcoin/regtest/node.sock"
4582

46-
tail_log() {
47-
tail -n +0 -F $1 || true
48-
}
49-
5083
echo "Starting $($BITCOIN_MULTIPROCESS_BIN node -version | head -n1) (multiprocess, IPC enabled)..."
5184
$BITCOIN_MULTIPROCESS_BIN node \
5285
-regtest -datadir=$PWD/data/bitcoin \
@@ -80,7 +113,7 @@ electrs \
80113
--daemon-ipc-socket="$SOCK" \
81114
2> data/electrs/regtest-debug.log &
82115
ELECTRS_PID=$!
83-
tail_log data/electrs/regtest-debug.log | grep -m1 "serving Electrum RPC"
116+
wait_for_log data/electrs/regtest-debug.log "serving Electrum RPC" "electrs Electrum RPC startup"
84117

85118
# Confirm the IPC backend actually engaged. The Daemon::connect path logs
86119
# nothing distinctive yet; instead probe the debug log for any IPC error or
@@ -89,11 +122,11 @@ if ! grep -q "ipc" data/electrs/regtest-debug.log; then
89122
: # no explicit log line yet; we rely on cargo tests + functional behaviour
90123
fi
91124

92-
curl localhost:24224 -o metrics.txt
125+
wait_for_http http://localhost:24224 metrics.txt
93126

94127
$ELECTRUM daemon --server localhost:60401:t -1 -vDEBUG 2> data/electrum/regtest-debug.log &
95128
ELECTRUM_PID=$!
96-
tail_log data/electrum/regtest-debug.log | grep -m1 "connection established"
129+
wait_for_log data/electrum/regtest-debug.log "connection established" "Electrum daemon connection"
97130
$EL getinfo | jq .
98131

99132
echo "Loading Electrum wallet..."
@@ -125,7 +158,7 @@ $BTC getblockcount > /dev/null
125158

126159
echo " * wait for new block"
127160
kill -USR1 $ELECTRS_PID # notify server to index new block
128-
tail_log data/electrum/regtest-debug.log | grep -m1 "verified $TXID" > /dev/null
161+
wait_for_log data/electrum/regtest-debug.log "verified $TXID" "Electrum wallet verification of mined transaction"
129162

130163
echo " * get_tx_status"
131164
test "`$EL get_tx_status $TXID | jq -c .`" == '{"confirmations":1}'
@@ -140,7 +173,7 @@ echo "Electrum `$EL stop`" # disconnect wallet
140173
wait $ELECTRUM_PID
141174

142175
kill -INT $ELECTRS_PID # close server
143-
tail_log data/electrs/regtest-debug.log | grep -m1 "electrs stopped"
176+
wait_for_log data/electrs/regtest-debug.log "electrs stopped" "electrs shutdown"
144177
wait $ELECTRS_PID
145178

146179
# When the multiprocess node has IPC clients still attached at shutdown, the

tests/run.sh

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ set -euo pipefail
33

44
rm -rf data/
55
mkdir -p data/{bitcoin,electrum,electrs}
6+
touch data/electrs/regtest-debug.log data/electrum/regtest-debug.log
67

78
cleanup() {
89
trap - SIGTERM SIGINT
@@ -21,18 +22,50 @@ wait_for() {
2122
shift
2223
TEST_ARGS=$*
2324
for _ in `seq 0 9`; do
24-
test "$($CMD | jq -c .)" $TEST_ARGS && break || sleep 2
25+
if test "$($CMD | jq -c .)" $TEST_ARGS; then
26+
return 0
27+
fi
28+
sleep 2
2529
done
30+
31+
echo "Timed out waiting for condition: $CMD $TEST_ARGS" >&2
32+
return 1
33+
}
34+
35+
wait_for_log() {
36+
LOG_FILE=$1
37+
PATTERN=$2
38+
DESCRIPTION=$3
39+
for _ in `seq 0 99`; do
40+
if grep -Fq "$PATTERN" "$LOG_FILE"; then
41+
return 0
42+
fi
43+
sleep 0.2
44+
done
45+
46+
echo "Timed out waiting for $DESCRIPTION in $LOG_FILE" >&2
47+
tail -n +1 "$LOG_FILE" >&2 || true
48+
return 1
49+
}
50+
51+
wait_for_http() {
52+
URL=$1
53+
OUTPUT=$2
54+
for _ in `seq 0 99`; do
55+
if curl --silent --show-error --fail "$URL" -o "$OUTPUT"; then
56+
return 0
57+
fi
58+
sleep 0.2
59+
done
60+
61+
echo "Timed out waiting for HTTP endpoint $URL" >&2
62+
return 1
2663
}
2764

2865
BTC="bitcoin-cli -regtest -datadir=data/bitcoin"
2966
ELECTRUM="electrum --regtest"
3067
EL="$ELECTRUM --wallet=data/electrum/wallet"
3168

32-
tail_log() {
33-
tail -n +0 -F $1 || true
34-
}
35-
3669
echo "Starting $(bitcoind -version | head -n1)..."
3770
bitcoind -regtest -datadir=data/bitcoin -printtoconsole=0 &
3871
BITCOIND_PID=$!
@@ -55,12 +88,12 @@ electrs \
5588
--network=regtest \
5689
2> data/electrs/regtest-debug.log &
5790
ELECTRS_PID=$!
58-
tail_log data/electrs/regtest-debug.log | grep -m1 "serving Electrum RPC"
59-
curl localhost:24224 -o metrics.txt
91+
wait_for_log data/electrs/regtest-debug.log "serving Electrum RPC" "electrs Electrum RPC startup"
92+
wait_for_http http://localhost:24224 metrics.txt
6093

6194
$ELECTRUM daemon --server localhost:60401:t -1 -vDEBUG 2> data/electrum/regtest-debug.log &
6295
ELECTRUM_PID=$!
63-
tail_log data/electrum/regtest-debug.log | grep -m1 "connection established"
96+
wait_for_log data/electrum/regtest-debug.log "connection established" "Electrum daemon connection"
6497
$EL getinfo | jq .
6598

6699
echo "Loading Electrum wallet..."
@@ -92,7 +125,7 @@ $BTC getblockcount > /dev/null
92125

93126
echo " * wait for new block"
94127
kill -USR1 $ELECTRS_PID # notify server to index new block
95-
tail_log data/electrum/regtest-debug.log | grep -m1 "verified $TXID" > /dev/null
128+
wait_for_log data/electrum/regtest-debug.log "verified $TXID" "Electrum wallet verification of mined transaction"
96129

97130
echo " * get_tx_status"
98131
test "`$EL get_tx_status $TXID | jq -c .`" == '{"confirmations":1}'
@@ -107,7 +140,7 @@ echo "Electrum `$EL stop`" # disconnect wallet
107140
wait $ELECTRUM_PID
108141

109142
kill -INT $ELECTRS_PID # close server
110-
tail_log data/electrs/regtest-debug.log | grep -m1 "electrs stopped"
143+
wait_for_log data/electrs/regtest-debug.log "electrs stopped" "electrs shutdown"
111144
wait $ELECTRS_PID
112145

113146
# Try a graceful stop; if the node has already exited the RPC call will fail,

0 commit comments

Comments
 (0)