Skip to content

Commit 10b41de

Browse files
committed
added common.sh for scripts; more user friendly run_consensus_network_delay.sh
1 parent 4bc4d1b commit 10b41de

File tree

3 files changed

+141
-87
lines changed

3 files changed

+141
-87
lines changed

scripts/catchup_version_upgrade_test.sh

Lines changed: 1 addition & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -14,42 +14,12 @@ ALL_NODES_PORTS=${ALL_NODES_PORTS:-"9933:9934:9935:9936:9937"}
1414
WAIT_BLOCKS=${WAIT_BLOCKS:-30}
1515
EXT_STATUS=${EXT_STATUS:-"in-block"}
1616

17-
function log() {
18-
echo $1 1>&2
19-
}
20-
21-
function into_array() {
22-
result=()
23-
local tmp=$IFS
24-
IFS=:
25-
for e in $1; do
26-
result+=($e)
27-
done
28-
IFS=$tmp
29-
}
17+
source ./scripts/common.sh
3018

3119
function initialize {
3220
wait_for_finalized_block $1 $2 $3
3321
}
3422

35-
function wait_for_finalized_block() {
36-
local block_to_be_finalized=$1
37-
local node=$2
38-
local port=$3
39-
40-
while [[ $(get_best_finalized $node $port) -le $block_to_be_finalized ]]; do
41-
sleep 3
42-
done
43-
}
44-
45-
function get_best_finalized {
46-
local validator=$1
47-
local rpc_port=$2
48-
49-
local best_finalized=$(VALIDATOR=$validator RPC_HOST="127.0.0.1" RPC_PORT=$rpc_port ./.github/scripts/check_finalization.sh | sed 's/Last finalized block number: "\(.*\)"/\1/')
50-
printf "%d" $best_finalized
51-
}
52-
5323
function set_upgrade_session {
5424
local session=$1
5525
local version=$2
@@ -110,45 +80,6 @@ function disconnect_nodes {
11080
done
11181
}
11282

113-
function wait_for_block {
114-
local block=$1
115-
local validator=$2
116-
local rpc_port=$3
117-
118-
local last_block=""
119-
while [[ -z "$last_block" ]]; do
120-
last_block=$(docker run --rm --network container:$validator appropriate/curl:latest \
121-
-H "Content-Type: application/json" \
122-
-d '{"id":1, "jsonrpc":"2.0", "method": "chain_getBlockHash", "params": '$block'}' http://127.0.0.1:$rpc_port | jq '.result')
123-
done
124-
}
125-
126-
function get_last_block {
127-
local validator=$1
128-
local rpc_port=$2
129-
130-
local last_block_number=$(docker run --rm --network container:$validator appropriate/curl:latest \
131-
-H "Content-Type: application/json" \
132-
-d '{"id":1, "jsonrpc":"2.0", "method": "chain_getBlock"}' http://127.0.0.1:$rpc_port | jq '.result.block.header.number')
133-
printf "%d" $last_block_number
134-
}
135-
136-
function check_finalization {
137-
local block_to_check=$1
138-
local -n nodes=$2
139-
local -n ports=$3
140-
141-
log "checking finalization for block $block_to_check"
142-
143-
for i in "${!nodes[@]}"; do
144-
local node=${nodes[$i]}
145-
local rpc_port=${ports[$i]}
146-
147-
log "checking finalization at node $node"
148-
wait_for_finalized_block $block_to_check $node $rpc_port
149-
done
150-
}
151-
15283
into_array $NODES
15384
NODES=(${result[@]})
15485

scripts/common.sh

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#!/bin/env bash
2+
3+
function log() {
4+
echo $1 1>&2
5+
}
6+
7+
function into_array() {
8+
result=()
9+
local tmp=$IFS
10+
IFS=:
11+
for e in $1; do
12+
result+=($e)
13+
done
14+
IFS=$tmp
15+
}
16+
17+
function check_finalization {
18+
local block_to_check=$1
19+
local -n nodes=$2
20+
local -n ports=$3
21+
22+
log "checking finalization for block $block_to_check"
23+
24+
for i in "${!nodes[@]}"; do
25+
local node=${nodes[$i]}
26+
local rpc_port=${ports[$i]}
27+
28+
log "checking finalization at node $node"
29+
wait_for_finalized_block $block_to_check $node $rpc_port
30+
done
31+
}
32+
33+
function get_best_finalized {
34+
local validator=$1
35+
local rpc_port=$2
36+
37+
local best_finalized=$(VALIDATOR=$validator RPC_HOST="127.0.0.1" RPC_PORT=$rpc_port ./.github/scripts/check_finalization.sh | sed 's/Last finalized block number: "\(.*\)"/\1/')
38+
printf "%d" $best_finalized
39+
}
40+
41+
function wait_for_finalized_block() {
42+
local block_to_be_finalized=$1
43+
local node=$2
44+
local port=$3
45+
46+
while [[ $(get_best_finalized $node $port) -le $block_to_be_finalized ]]; do
47+
sleep 3
48+
done
49+
}
50+
51+
function wait_for_block {
52+
local block=$1
53+
local validator=$2
54+
local rpc_port=$3
55+
56+
local last_block=""
57+
while [[ -z "$last_block" ]]; do
58+
last_block=$(docker run --rm --network container:$validator appropriate/curl:latest \
59+
-H "Content-Type: application/json" \
60+
-d '{"id":1, "jsonrpc":"2.0", "method": "chain_getBlockHash", "params": '$block'}' http://127.0.0.1:$rpc_port | jq '.result')
61+
done
62+
}
63+
64+
function get_last_block {
65+
local validator=$1
66+
local rpc_port=$2
67+
68+
local last_block_number=$(docker run --rm --network container:$validator appropriate/curl:latest \
69+
-H "Content-Type: application/json" \
70+
-d '{"id":1, "jsonrpc":"2.0", "method": "chain_getBlock"}' http://127.0.0.1:$rpc_port | jq '.result.block.header.number')
71+
printf "%d" $last_block_number
72+
}
Lines changed: 68 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,26 @@
1-
#!/bin/bash
1+
#!/bin/env bash
22

33
set -euo pipefail
44

5-
NETWORK_DELAY=${NETWORK_DELAY:-500}
6-
BUILD_IMAGE=${BUILD_IMAGE:-true}
7-
NODES=${NODES:-"Node0:Node1:Node2:Node3:Node4"}
5+
source ./scripts/common.sh
6+
7+
function usage(){
8+
cat << EOF
9+
Usage:
10+
$0
11+
--network-delay DELAYms
12+
simulated network delay in ms; default=500ms
13+
--no-build-image
14+
skip docker image build
15+
--nodes "Node0:Node1"
16+
list of nodes (Node0..Node4) for this script to handle; default="Node0:Node1:Node2:Node3:Node4"
17+
--node-ports "9934:9935"
18+
list of rpc ports for --nodes; default="9933:9934:9935:9936:9937"
19+
--check-block number
20+
check finalization for a given block number, 0 means no-check; default=42
21+
EOF
22+
exit 0
23+
}
824

925
function build_test_image() {
1026
docker build -t aleph-node:network_tests -f docker/Dockerfile.network_tests .
@@ -18,25 +34,52 @@ function set_network_delay() {
1834
docker exec $node tc qdisc add dev eth1 root netem delay ${delay}ms
1935
}
2036

21-
function log() {
22-
echo "$1" 1>&2
23-
}
37+
while [[ $# -gt 0 ]]; do
38+
case $1 in
39+
--network-delay)
40+
NETWORK_DELAY="$2"
41+
shift;shift
42+
;;
43+
--no-build-image)
44+
BUILD_IMAGE="$2"
45+
shift
46+
;;
47+
--nodes)
48+
NODES="$2"
49+
shift;shift
50+
;;
51+
--node-ports)
52+
NODES_PORTS="$2"
53+
shift;shift
54+
;;
55+
--check-block)
56+
CHECK_BLOCK_FINALIZATION="$2"
57+
shift;shift
58+
;;
59+
--help)
60+
usage
61+
shift
62+
;;
63+
*)
64+
error "Unrecognized argument $1!"
65+
;;
66+
esac
67+
done
2468

25-
function into_array() {
26-
result=()
27-
local tmp=$IFS
28-
IFS=:
29-
for e in $1; do
30-
result+=($e)
31-
done
32-
IFS=$tmp
33-
}
69+
NETWORK_DELAY=${NETWORK_DELAY:-500}
70+
BUILD_IMAGE=${BUILD_IMAGE:-false}
71+
NODES=${NODES:-"Node0:Node1:Node2:Node3:Node4"}
72+
NODES_PORTS=${NODES_PORTS:-"9933:9934:9935:9936:9937"}
73+
CHECK_BLOCK_FINALIZATION=${CHECK_BLOCK_FINALIZATION:-42}
3474

3575
into_array $NODES
3676
NODES=(${result[@]})
3777

78+
into_array $NODES_PORTS
79+
NODES_PORTS=(${result[@]})
80+
3881
if [[ "$BUILD_IMAGE" = true ]]; then
39-
log "building docker image for network tests"
82+
log "building custom docker image for network tests"
4083
build_test_image
4184
fi
4285

@@ -49,4 +92,12 @@ for node in ${NODES[@]}; do
4992
set_network_delay $node $NETWORK_DELAY
5093
done
5194

95+
if [[ $CHECK_BLOCK_FINALIZATION -gt 0 ]]; then
96+
log "checking finalization"
97+
check_finalization $CHECK_BLOCK_FINALIZATION NODES NODES_PORTS
98+
log "finalization checked"
99+
fi
100+
52101
log "done"
102+
103+
exit 0

0 commit comments

Comments
 (0)