diff --git a/test/p2p/local_testnet_start.sh b/test/p2p/local_testnet_start.sh index 3b842480..9a280c59 100644 --- a/test/p2p/local_testnet_start.sh +++ b/test/p2p/local_testnet_start.sh @@ -6,17 +6,19 @@ NETWORK_NAME=$2 N=$3 APP_PROXY=$4 +set +u +SEEDS=$5 +if [[ "$SEEDS" != "" ]]; then + echo "Seeds: $SEEDS" + SEEDS="--seeds $SEEDS" +fi +set -u + cd $GOPATH/src/github.com/tendermint/tendermint # create docker network docker network create --driver bridge --subnet 172.57.0.0/16 $NETWORK_NAME -seeds="$(test/p2p/ip.sh 1):46656" -for i in `seq 2 $N`; do - seeds="$seeds,$(test/p2p/ip.sh $i):46656" -done -echo "Seeds: $seeds" - for i in `seq 1 $N`; do - bash test/p2p/peer.sh $DOCKER_IMAGE $NETWORK_NAME $i $APP_PROXY "--seeds $seeds --pex" + bash test/p2p/peer.sh $DOCKER_IMAGE $NETWORK_NAME $i $APP_PROXY "$SEEDS --pex" done diff --git a/test/p2p/pex/dial_seeds.sh b/test/p2p/pex/dial_seeds.sh new file mode 100644 index 00000000..15c22af6 --- /dev/null +++ b/test/p2p/pex/dial_seeds.sh @@ -0,0 +1,31 @@ +#! /bin/bash +set -u + +N=$1 + +cd $GOPATH/src/github.com/tendermint/tendermint + +echo "Waiting for nodes to come online" +for i in `seq 1 $N`; do + addr=$(test/p2p/ip.sh $i):46657 + curl -s $addr/status > /dev/null + ERR=$? + while [ "$ERR" != 0 ]; do + sleep 1 + curl -s $addr/status > /dev/null + ERR=$? + done + echo "... node $i is up" +done + +set -e +# seeds need quotes +seeds="\"$(test/p2p/ip.sh 1):46656\"" +for i in `seq 2 $N`; do + seeds="$seeds,\"$(test/p2p/ip.sh $i):46656\"" +done +echo $seeds + +echo $seeds +IP=$(test/p2p/ip.sh 1) +curl --data-urlencode "seeds=[$seeds]" "$IP:46657/dial_seeds" diff --git a/test/p2p/pex/test.sh b/test/p2p/pex/test.sh index 3c624e27..d54d8135 100644 --- a/test/p2p/pex/test.sh +++ b/test/p2p/pex/test.sh @@ -6,42 +6,10 @@ NETWORK_NAME=$2 N=$3 PROXY_APP=$4 -ID=1 +cd $GOPATH/src/github.com/tendermint/tendermint -echo "----------------------------------------------------------------------" -echo "Testing pex creates the addrbook and uses it if seeds are not provided" -echo "(assuming peers are started with pex enabled)" +echo "Test reconnecting from the address book" +bash test/p2p/pex/test_addrbook.sh $DOCKER_IMAGE $NETWORK_NAME $N $PROXY_APP -echo "1. restart peer $ID" -docker stop "local_testnet_$ID" -# preserve addrbook.json -docker cp "local_testnet_$ID:/go/src/github.com/tendermint/tendermint/test/p2p/data/mach1/core/addrbook.json" "/tmp/addrbook.json" -docker rm -vf "local_testnet_$ID" - -# NOTE that we do not provide seeds -bash test/p2p/peer.sh "$DOCKER_IMAGE" "$NETWORK_NAME" "$ID" "$PROXY_APP" "--pex" -docker cp "/tmp/addrbook.json" "local_testnet_$ID:/go/src/github.com/tendermint/tendermint/test/p2p/data/mach1/core/addrbook.json" -echo "with the following addrbook:" -docker exec "local_testnet_$ID" cat "/go/src/github.com/tendermint/tendermint/test/p2p/data/mach1/core/addrbook.json" -echo "" - -# if the client runs forever, it means addrbook wasn't saved or was empty -bash test/p2p/client.sh "$DOCKER_IMAGE" "$NETWORK_NAME" "pex_$ID" "test/p2p/pex/check_peer.sh $ID $N" - -echo "----------------------------------------------------------------------" -echo "Testing other peers connect to us if we have neither seeds nor the addrbook" -echo "(assuming peers are started with pex enabled)" - -echo "1. restart peer $ID" -docker stop "local_testnet_$ID" -docker rm -vf "local_testnet_$ID" - -# NOTE that we do not provide seeds -bash test/p2p/peer.sh "$DOCKER_IMAGE" "$NETWORK_NAME" "$ID" "$PROXY_APP" "--pex" - -# if the client runs forever, it means other peers have removed us from their books (which should not happen) -bash test/p2p/client.sh "$DOCKER_IMAGE" "$NETWORK_NAME" "pex_$ID" "test/p2p/pex/check_peer.sh $ID $N" - -echo "" -echo "PASS" -echo "" +echo "Test connecting via /dial_seeds" +bash test/p2p/pex/test_dial_seeds.sh $DOCKER_IMAGE $NETWORK_NAME $N $PROXY_APP diff --git a/test/p2p/pex/test_addrbook.sh b/test/p2p/pex/test_addrbook.sh new file mode 100644 index 00000000..c472dff6 --- /dev/null +++ b/test/p2p/pex/test_addrbook.sh @@ -0,0 +1,51 @@ +#! /bin/bash +set -eu + +DOCKER_IMAGE=$1 +NETWORK_NAME=$2 +N=$3 +PROXY_APP=$4 + +ID=1 + +echo "----------------------------------------------------------------------" +echo "Testing pex creates the addrbook and uses it if seeds are not provided" +echo "(assuming peers are started with pex enabled)" + +echo "1. restart peer $ID" +docker stop "local_testnet_$ID" +# preserve addrbook.json +docker cp "local_testnet_$ID:/go/src/github.com/tendermint/tendermint/test/p2p/data/mach1/core/addrbook.json" "/tmp/addrbook.json" +set +e #CIRCLE +docker rm -vf "local_testnet_$ID" +set -e + +# NOTE that we do not provide seeds +bash test/p2p/peer.sh "$DOCKER_IMAGE" "$NETWORK_NAME" "$ID" "$PROXY_APP" "--pex" +docker cp "/tmp/addrbook.json" "local_testnet_$ID:/go/src/github.com/tendermint/tendermint/test/p2p/data/mach1/core/addrbook.json" +echo "with the following addrbook:" +docker exec "local_testnet_$ID" cat "/go/src/github.com/tendermint/tendermint/test/p2p/data/mach1/core/addrbook.json" +echo "" + +# if the client runs forever, it means addrbook wasn't saved or was empty +bash test/p2p/client.sh "$DOCKER_IMAGE" "$NETWORK_NAME" "pex_$ID" "test/p2p/pex/check_peer.sh $ID $N" + +echo "----------------------------------------------------------------------" +echo "Testing other peers connect to us if we have neither seeds nor the addrbook" +echo "(assuming peers are started with pex enabled)" + +echo "1. restart peer $ID" +docker stop "local_testnet_$ID" +set +e #CIRCLE +docker rm -vf "local_testnet_$ID" +set -e + +# NOTE that we do not provide seeds +bash test/p2p/peer.sh "$DOCKER_IMAGE" "$NETWORK_NAME" "$ID" "$PROXY_APP" "--pex" + +# if the client runs forever, it means other peers have removed us from their books (which should not happen) +bash test/p2p/client.sh "$DOCKER_IMAGE" "$NETWORK_NAME" "pex_$ID" "test/p2p/pex/check_peer.sh $ID $N" + +echo "" +echo "PASS" +echo "" diff --git a/test/p2p/pex/test_dial_seeds.sh b/test/p2p/pex/test_dial_seeds.sh new file mode 100644 index 00000000..5b0bfffb --- /dev/null +++ b/test/p2p/pex/test_dial_seeds.sh @@ -0,0 +1,32 @@ +#! /bin/bash +set -eu + +DOCKER_IMAGE=$1 +NETWORK_NAME=$2 +N=$3 +PROXY_APP=$4 + +ID=1 + +cd $GOPATH/src/github.com/tendermint/tendermint + +echo "----------------------------------------------------------------------" +echo "Testing full network connection using one /dial_seeds call" +echo "(assuming peers are started with pex enabled)" + +# stop the existing testnet and remove local network +set +e +bash test/p2p/local_testnet_stop.sh $NETWORK_NAME $N +set -e + +# start the testnet on a local network +# NOTE we re-use the same network for all tests +SEEDS="" +bash test/p2p/local_testnet_start.sh $DOCKER_IMAGE $NETWORK_NAME $N $PROXY_APP $SEEDS + +# dial seeds from one node +bash test/p2p/client.sh $DOCKER_IMAGE $NETWORK_NAME dial_seeds "test/p2p/pex/dial_seeds.sh $N" + +# test basic connectivity and consensus +# start client container and check the num peers and height for all nodes +bash test/p2p/client.sh $DOCKER_IMAGE $NETWORK_NAME basic "test/p2p/basic/test.sh $N" diff --git a/test/p2p/seeds.sh b/test/p2p/seeds.sh new file mode 100644 index 00000000..471476ad --- /dev/null +++ b/test/p2p/seeds.sh @@ -0,0 +1,12 @@ +#! /bin/bash +set -eu + +N=$1 + +cd $GOPATH/src/github.com/tendermint/tendermint + +seeds="$(test/p2p/ip.sh 1):46656" +for i in `seq 2 $N`; do + seeds="$seeds,$(test/p2p/ip.sh $i):46656" +done +echo $seeds diff --git a/test/p2p/test.sh b/test/p2p/test.sh index 1157ac06..0522a422 100644 --- a/test/p2p/test.sh +++ b/test/p2p/test.sh @@ -13,9 +13,11 @@ set +e bash test/p2p/local_testnet_stop.sh $NETWORK_NAME $N set -e +SEEDS=$(bash test/p2p/seeds.sh $N) + # start the testnet on a local network # NOTE we re-use the same network for all tests -bash test/p2p/local_testnet_start.sh $DOCKER_IMAGE $NETWORK_NAME $N $PROXY_APP +bash test/p2p/local_testnet_start.sh $DOCKER_IMAGE $NETWORK_NAME $N $PROXY_APP $SEEDS # test basic connectivity and consensus # start client container and check the num peers and height for all nodes