#!/usr/bin/env bash
source ../multi-host.conf
source include.sh
workdir=$(pwd)
mkdir -p $workdir/logs
testLog=$workdir/logs/nfdc_test.log

echo "TEST START" > $testLog

start_nfd

# 1: Check for the existence of mcast address udp4://224.0.23.170
udp4Mcast=$(nfdc face list | grep "udp4://224.0.23.170")
udp6Mcast=$(nfdc face list | grep -iF "udp6://[ff00")
ethv4=$(nfdc face list | grep -iF "ether://[01:00:5E:")
ethv6=$(nfdc face list | grep -iF "ether://[33:33:")

if [[ -z "$udp4Mcast" ]] && [[ -z "$udp6Mcast" ]] && [[ -z "$ethv4" ]] && [[ -z "$ethv6" ]]; then
  echo "nfdc: Failed to find udp4/udp6/ether multicast faces" >> $testLog
  echo "'nfdc face list' output is:" >> $testLog
  nfdc face list >> $testLog
  clean_up
  exit 2
fi

# 2 and 3: Create face tcp4://$IP4_B1 and check for its existence
faceIdTcp4=$(nfdc face create tcp4://$IP4_B1 | grep -Po 'id=[0-9]+' | sed 's/id=//' | sed 's/ //')
sleep 2
face=$(check_nfdc_face_existence $faceIdTcp4 tcp4://$IP4_B1)
if [ "-1" == $face ]; then
  echo "Could not create face tcp4://$IP4_B1"
  clean_up
  exit 2
fi

#compress IPv6
IP6_B1=$(python -c "import sys; import socket; result = socket.getaddrinfo('$IP6_B1', None); family, socktype, proto, canonname,(address, port, flow_info, scope_id) = result[0]; print address")

# 4 and 5: Create face tcp6://[$IP6_B1] and check for its existence
faceIdTcp6=$(nfdc face create tcp6://[$IP6_B1] | grep -Po 'id=[0-9]+' | sed 's/id=//' | sed 's/ //')
sleep 2
face=$(check_nfdc_face_existence_show $faceIdTcp6 tcp6://[$IP6_B1])
if [ "-1" == $face ]; then
  echo "Could not create face tcp6://[$IP6_B1]"
  clean_up
  exit 2
fi

# 6 and 7: Create face udp4://$IP4_B1 and check for its existence
faceIdUdp4=$(nfdc face create udp4://$IP4_B1 | grep -Po 'id=[0-9]+' | sed 's/id=//' | sed 's/ //')
sleep 2
face=$(check_nfdc_face_existence_remote_uri $faceIdUdp4 udp4://$IP4_B1)
if [ "-1" == $face ]; then
  echo "Could not create face udp4://$IP4_B1"
  clean_up
  exit 2
fi


# 8 and 9: Create face udp6://[$IP4_B1] and check for its existence
faceIdUdp6=$(nfdc face create udp6://[$IP6_B1] | grep -Po 'id=[0-9]+' | sed 's/id=//' | sed 's/ //')
sleep 2
face=$(check_nfdc_face_existence $faceIdUdp6 udp6://[$IP6_B1])
if [ "-1" == $face ]; then
  echo "Could not create face udp6://[$IP6_B1]"
  clean_up
  exit 2
fi

# 10, 11, 12, and 13: Add routes for /test-nfdc
nfdc route add /test-nfdc tcp4://$IP4_B1 cost 24
nfdc route add /test-nfdc tcp6://[$IP6_B1] cost 26
nfdc route add /test-nfdc udp4://$IP4_B1 cost 14
nfdc route add /test-nfdc udp6://[$IP6_B1] cost 16

# 14: Check for the existence of the created routes
check_nfdc_route_existence "/test-nfdc" $faceIdTcp4 24
check_nfdc_route_existence "/test-nfdc" $faceIdTcp6 26
check_nfdc_route_existence_show "/test-nfdc" $faceIdUdp4 14
check_nfdc_route_existence_show "/test-nfdc" $faceIdUdp6 16

# 15: Check whether the `/test-nfdc` FIB entry contains all routes with the correct nexthops, in the correct order
check_nfdc_nexthop_existence "/test-nfdc" $faceIdTcp4 24
check_nfdc_nexthop_existence "/test-nfdc" $faceIdTcp6 26
check_nfdc_nexthop_existence "/test-nfdc" $faceIdUdp4 14
check_nfdc_nexthop_existence "/test-nfdc" $faceIdUdp6 16

# Check if nexthops in correct order
nexthopInfo=$(nfdc fib list | grep "/test-nfdc" | \
  grep "nexthops={faceid=$faceIdUdp4 (cost=14), faceid=$faceIdUdp6 (cost=16), faceid=$faceIdTcp4 (cost=24), faceid=$faceIdTcp6 (cost=26)}")

if [[ -z "$nexthopInfo" ]]; then
  echo "nfdc: Nexthops to /test-nfdc not in correct order (by cost)" >> $testLog
  echo "'nfdc fib list' is:" >> $testLog
  nfdc fib list >> $testLog
  clean_up
  exit 2
fi

# 16: Use MulticastStrategy for the /test-nfdc prefix
nfdc strategy set /test-nfdc /localhost/nfd/strategy/multicast

# 17: Verify that /test-nfdc prefix uses MulticastStrategy
strategyInfo=$(nfdc strategy show /test-nfdc | grep "^strategy=/localhost/nfd/strategy/multicast/%FD%[0-9][0-9]$")

if [[ -z "$strategyInfo" ]]; then
  echo "nfdc: prefix /test-nfdc does not use MulticastStrategy" >> $testLog
  echo "'nfdc strategy show /test-nfdc' is:" >> $testLog
  nfdc strategy show /test-nfdc >> $testLog
  clean_up
  exit 2
fi

# 18: Send 100 Interests to /test-nfdc w/ 50ms interval
ndnping -c $NUM_OF_PINGS -i 50 /test-nfdc

# 19: Verify that each face we created has had at least 100 outgoing Interests
check_nfdc_face_counters $faceIdTcp4 tcp4://$IP4_B1 out $NUM_OF_PINGS
check_nfdc_face_counters $faceIdTcp6 tcp6://[$IP6_B1] out $NUM_OF_PINGS
check_nfdc_face_counters $faceIdUdp4 udp4://$IP4_B1 out $NUM_OF_PINGS
check_nfdc_face_counters $faceIdUdp6 udp6://[$IP6_B1] out $NUM_OF_PINGS

# 20: Verify that corresponding faces on host B have had at least 100 incoming Interests
ssh $CTRL_B "$workdir/test-B.sh $workdir"
if [[ $? -ne 0 ]]; then
  echo "Failed to verify correctness on node B" >> $testLog
  clean_up
  exit 3
fi

# 21: Destroy faces tcp4://$IP4_B1 and tcp6://[$IP6_B1]
nfdc face destroy $faceIdTcp4
echo "after nfdc face destroy $faceIdTcp4" >> $testLog
face=$(check_nfdc_face_existence $faceIdTcp4 tcp4://$IP4_B1)
if [ "-1" != $face ]; then
  echo "face $faceIdTcp4 still exists after nfdc face destroy" >> $testLog
  clean_up
  exit 2
fi

nfdc face destroy $faceIdTcp6
echo "after nfdc face destroy $faceIdTcp6" >> $testLog
face=$(check_nfdc_face_existence $faceIdTcp6 tcp6://[$IP6_B1])
if [ "-1" != $face ]; then
  clean_up
  exit 2
fi

# 22: Unset MulticastStrategy for prefix /test-nfdc
nfdc strategy unset /test-nfdc

# 23: Verify that /test-nfdc prefix no longer uses MulticastStrategy
strategyInfo=$(nfdc strategy show /test-nfdc | grep "^strategy=/localhost/nfd/strategy/multicast/%FD%[0-9][0-9]$")

if [[ -n "$strategyInfo" ]]; then
  echo "nfdc: prefix /test-nfdc still uses MulticastStrategy after 'nfdc strategy unset /test-nfdc''" >> $testLog
  echo "'nfdc strategy show /test-nfdc' is:" >> $testLog
  nfdc strategy show /test-nfdc >> $testLog
  clean_up
  exit 2
fi

# 24: Remove route to /test-nfdc via nexthop udp4://$IP4_B1
nfdc route remove /test-nfdc udp4://$IP4_B1

# 25: Ensure that route to /test-nfdc w/ nexthop udp4://$IP4_B1 has been removed
check_nfdc_route_existence "/test-nfdc" $faceIdTcp4 24 noexist
check_nfdc_route_existence "/test-nfdc" $faceIdTcp6 26 noexist
check_nfdc_route_existence "/test-nfdc" $faceIdUdp4 14 noexist
check_nfdc_route_existence "/test-nfdc" $faceIdUdp6 16

# 26: Ensure that /test-nfdc FIB entry no longer contains nexthop to udp4://$IP4_B1
check_nfdc_nexthop_existence "/test-nfdc" $faceIdTcp4 24 noexist
check_nfdc_nexthop_existence "/test-nfdc" $faceIdTcp6 26 noexist
check_nfdc_nexthop_existence "/test-nfdc" $faceIdUdp4 14 noexist
check_nfdc_nexthop_existence "/test-nfdc" $faceIdUdp6 16

# 27: Remove route to /test-nfdc via nexthop udp6://[$IP6_B1]
nfdc route remove /test-nfdc udp6://[$IP6_B1]

sleep 1

# 28: Ensure that FIB entry for /test-nfdc has been removed, given that all routes to it have been removed
check_nfdc_nexthop_existence "/test-nfdc" $faceIdUdp6 16 noexist

nexthopInfo=$(nfdc fib list | grep "/test-nfdc")
if [[ -n $nexthopInfo ]]; then
  echo "nfdc: FIB entry for /test-nfdc should not exist" >> $testLog
  echo "'nfdc fib list' is:" >> $testLog
  nfdc fib list >> $testLog
  clean_up
  exit 2
fi

clean_up
exit 0
