2024-04-17 05:37:31 +00:00
#!/bin/bash
printf "\nAssuming you already have a docker network called waku\n"
# if not something like this should create it: docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 waku
cluster_id = 0
pubsub_topic = " /waku/2/rs/ $cluster_id /0 "
encoded_pubsub_topic = $( echo " $pubsub_topic " | sed 's:/:%2F:g' )
content_topic = "/test/1/store/proto"
encoded_content_topic = $( echo " $content_topic " | sed 's:/:%2F:g' )
2024-07-29 12:51:04 +00:00
node_1 = wakuorg/nwaku:latest
2024-04-17 05:37:31 +00:00
node_1_ip = 172.18.64.13
node_1_rest = 32261
node_1_tcp = 32262
2024-07-29 12:51:04 +00:00
node_2 = wakuorg/nwaku:latest
2024-04-17 05:37:31 +00:00
node_2_ip = 172.18.64.14
node_2_rest = 4588
printf "\nStarting containers\n"
container_id1 = $( docker run -d -i -t -p $node_1_rest :$node_1_rest -p $node_1_tcp :$node_1_tcp -p 32263:32263 -p 32264:32264 -p 32265:32265 $node_1 --listen-address= 0.0.0.0 --rest= true --rest-admin= true --websocket-support= true --log-level= TRACE --rest-relay-cache-capacity= 100 --websocket-port= 32263 --rest-port= $node_1_rest --tcp-port= $node_1_tcp --discv5-udp-port= 32264 --rest-address= 0.0.0.0 --nat= extip:$node_1_ip --peer-exchange= true --discv5-discovery= true --cluster-id= $cluster_id --metrics-server= true --metrics-server-address= 0.0.0.0 --metrics-server-port= 32265 --metrics-logging= true --store= false --relay= true )
docker network connect --ip $node_1_ip waku $container_id1
printf "\nSleeping 2 seconds\n"
sleep 2
response = $( curl -X GET " http://127.0.0.1: $node_1_rest /debug/v1/info " -H "accept: application/json" )
enrUri = $( echo $response | jq -r '.enrUri' )
# Extract the first non-WebSocket address
ws_address = $( echo $response | jq -r '.listenAddresses[] | select(contains("/ws") | not)' )
# Check if we got an address, and construct the new address with it
if [ [ $ws_address != "" ] ] ; then
identifier = $( echo $ws_address | awk -F'/p2p/' '{print $2}' )
if [ [ $identifier != "" ] ] ; then
multiaddr_with_id = " /ip4/ ${ node_1_ip } /tcp/ ${ node_1_tcp } /p2p/ ${ identifier } "
echo $multiaddr_with_id
else
echo "No identifier found in the address."
exit 1
fi
else
echo "No non-WebSocket address found."
exit 1
fi
container_id2 = $( docker run -d -i -t -p $node_2_rest :$node_2_rest -p 4589:4589 -p 4590:4590 -p 4591:4591 -p 4592:4592 $node_2 --listen-address= 0.0.0.0 --rest= true --rest-admin= true --websocket-support= true --log-level= TRACE --rest-relay-cache-capacity= 100 --websocket-port= 4590 --rest-port= $node_2_rest --tcp-port= 4589 --discv5-udp-port= 4591 --rest-address= 0.0.0.0 --nat= extip:$node_2_ip --peer-exchange= true --discv5-discovery= true --cluster-id= $cluster_id --metrics-server= true --metrics-server-address= 0.0.0.0 --metrics-server-port= 4592 --metrics-logging= true --discv5-bootstrap-node= $enrUri --storenode= $multiaddr_with_id --store= true --relay= true )
docker network connect --ip $node_2_ip waku $container_id2
printf "\nSleeping 1 seconds\n"
sleep 1
printf "\nConnect peers\n"
curl -X POST " http://127.0.0.1: $node_2_rest /admin/v1/peers " -H "Content-Type: application/json" -d " [\" $multiaddr_with_id \"] "
printf "\nSubscribe\n"
curl -X POST " http://127.0.0.1: $node_1_rest /relay/v1/subscriptions " -H "Content-Type: application/json" -d " [\" $pubsub_topic \"] "
curl -X POST " http://127.0.0.1: $node_2_rest /relay/v1/subscriptions " -H "Content-Type: application/json" -d " [\" $pubsub_topic \"] "
printf "\nSleeping 1 seconds\n"
sleep 1
printf "\nRelay from NODE 1\n"
curl -X POST " http://127.0.0.1: $node_1_rest /relay/v1/messages/ $encoded_pubsub_topic " \
-H "Content-Type: application/json" \
-d '{"payload": "UmVsYXkgd29ya3MhIQ==", "contentTopic": "' " $content_topic " '", "timestamp": ' $( date +%s%N) '}'
printf "\nSleeping 1 seconds\n"
sleep 1
printf "\nCheck message in NODE 2\n"
response = $( curl -X GET " http://127.0.0.1: $node_2_rest /relay/v1/messages/ $encoded_pubsub_topic " -H "Content-Type: application/json" )
printf " \nResponse: $response \n "
if [ " $response " = = "[]" ] ; then
echo "Error: NODE 2 didn't find the message"
exit 1
else
echo "Success: NODE 2 received the message"
fi
printf "\nCheck message was stored in NODE 2 with v1 API\n"
response = $( curl -v -X GET " http://127.0.0.1: $node_2_rest /store/v1/messages?contentTopics= $encoded_content_topic &pageSize=5&ascending=true " )
printf " \nResponse: $response \n "
if [ " $response " = = "[]" ] || [ -z " $response " ] ; then
echo "Error: NODE 2 didn't store the message with v1 API"
exit 1
else
echo "Success: NODE 2 stored the message with v1 API"
fi
printf "\nCheck message was stored in NODE 2 with v3 API\n"
response = $( curl -v -X GET " http://127.0.0.1: $node_2_rest /store/v3/messages?peerAddr= $multiaddr_with_id &contentTopics= $encoded_content_topic &pageSize=5&ascending=true " )
printf " \nResponse: $response \n "
if [ " $response " = = "[]" ] || [ -z " $response " ] ; then
echo "Error: NODE 2 didn't stored the message with v3 API"
exit 1
else
echo "Success: NODE 2 stored the message with v3 API"
fi