Skip to content

Commit

Permalink
make test_bootnodes to work correctly rotating through bootnodes.json
Browse files Browse the repository at this point in the history
  • Loading branch information
hitchhooker committed May 1, 2024
1 parent dabd3f8 commit 339a61c
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 29 deletions.
1 change: 0 additions & 1 deletion bootnodes.json
Original file line number Diff line number Diff line change
Expand Up @@ -741,7 +741,6 @@
},
"encointer-kusama": {
"commandId": "encointer",
"comment": "wss not supported in encointer yet",
"members": {
"amforc": [
"/dns/encointer-kusama.bootnode.amforc.com/tcp/30338/p2p/12D3KooWDBr4sfp9R7t7tA1LAkNzADcGVXW9rX1BryES47mhUMEz",
Expand Down
2 changes: 1 addition & 1 deletion scripts/broken_bootnodes.sh
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
#!/bin/bash
touch /tmp/bootnode_tests/broken_bootnodes.sh
jq '.[] | select(.valid == false)' /tmp/bootnode_tests/results.json
58 changes: 31 additions & 27 deletions scripts/test_bootnodes.sh
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
#!/usr/bin/env bash
set -euo pipefail

# Define constants
readonly POLKADOT_BINARY="/usr/bin/polkadot"
readonly POLKADOT_PARACHAIN_BINARY="/usr/bin/polkadot-parachain"
readonly POLKADOT_BINARY="/usr/local/bin/polkadot"
readonly POLKADOT_PARACHAIN_BINARY="/usr/local/bin/polkadot-parachain"
readonly JQ_BINARY="/usr/bin/jq"
readonly OUTPUT_DIR="/tmp/bootnode_tests"
readonly DATA_DIR="/tmp/bootnode_data"
readonly OUTPUT_FILE="$OUTPUT_DIR/results.json"
readonly BOOTNODES_JSON="bootnodes.json"
readonly LOG_FILE="$OUTPUT_DIR/log.txt"

# Initialize output directory and file
initialize_output() {
mkdir -p "$OUTPUT_DIR"
mkdir -p "$DATA_DIR"
echo '{}' > "$OUTPUT_FILE"
echo "Initialized output directory and JSON file."
}

# Update results in JSON file
update_results() {
local operator="$1"
local data_file="$2"
local tmp_file="${OUTPUT_FILE}.tmp"
# update results.json with the new data
"$JQ_BINARY" --arg operator "$operator" --slurpfile data "$data_file" '
if .[$operator] then
.[$operator] += $data[0]
Expand All @@ -32,53 +32,56 @@ update_results() {

test_bootnode() {
local operator="$1"
local command_id="$2"
local network="$2"
local bootnode="$3"
local network
local command_id="$4"
local relaychain

# detect relaychain for parachain nodes
if [[ "$command_id" == "parachain" ]]; then
# Assuming 'parachain' commands follow the format: <network>-<relaychain>
network="${command_id%-*}" # Everything before the last hyphen
relaychain="${command_id##*-}" # Everything after the last hyphen
relaychain="${network##*-}"
echo "relaychain: $relaychain"
else
network="$command_id"
relaychain=""
relaychain=""
fi

local binary_path="$POLKADOT_BINARY"
[[ "$command_id" == "parachain" ]] && binary_path="$POLKADOT_PARACHAIN_BINARY"

# check if chain spec file exists
local chain_spec_file="./chain-spec/${network}.json"
if [ ! -f "$chain_spec_file" ]; then
echo "Chain spec file for $network does not exist."
return
fi

local command="$binary_path --no-hardware-benchmarks --no-mdns --chain $chain_spec_file"
local log_file="$OUTPUT_DIR/${operator}.${network}.log"
local command="$binary_path --no-hardware-benchmarks --no-mdns -d $DATA_DIR --chain $chain_spec_file"
[[ -n "$relaychain" ]] && command+=" --relay-chain-rpc-urls wss://rpc.ibp.network/$relaychain"
command+=" --bootnodes $bootnode"

echo "Executing: $command"
timeout 20s $command &> "$LOG_FILE"

# Analyze logs for number of peers
local peers_line=$(grep 'Syncing,' "$LOG_FILE" | tail -1) # Fetch the last occurrence
local peer_count=$(echo "$peers_line" | grep -oP '(?<=\()\d+')
echo "$command"
timeout 24s $command &> "$log_file" &
sleep 25


# last line in logs with Idle or Syncing
local peers_line=$(grep -E 'Idle|Syncing' "$log_file" | tail -1)
echo "$peers_line"
# number of peers in that line
local peer_count=$(echo "$peers_line" | grep -oP '(?<=\()\d+(?= peers\))')
echo "$operator $network peer_count: $peer_count"
local valid=false
# if over 1 peer, consider it valid
[[ "$peer_count" -gt 1 ]] && valid=true

# Prepare JSON result
local result_file="$OUTPUT_DIR/${operator}.${network}.json"
echo "{\"id\":\"$operator\", \"network\":\"$network\", \"bootnode\":\"$bootnode\", \"valid\":$valid, \"peers\":\"$peer_count\"}" > "$result_file"
cat "$result_file"
echo "Data fetched successfully for $operator on $network"

# Update the main results file and clean up
update_results "$operator" "$result_file"
rm "$result_file"
}

# Main function to run the script
main() {
initialize_output

Expand All @@ -87,12 +90,13 @@ main() {
exit 1
fi

# Extract the network names (keys) and their details
# read bootnodes.json and test each bootnode
cat "$BOOTNODES_JSON" | "$JQ_BINARY" -r 'to_entries[] | .key as $network | .value.commandId as $cid | .value.members | to_entries[] | .key as $operator | .value[] | "\($network) \($cid) \($operator) \(.)"' |
# looping through each bootnode address
while IFS=' ' read -r network command_id operator bootnode; do
test_bootnode "$operator" "$network" "$bootnode" "$command_id"
done

rm -rf "$DATA_DIR"
echo "All data has been fetched and saved."
}

Expand Down

0 comments on commit 339a61c

Please sign in to comment.