#!/usr/bin/env bash
source ../multi-host.conf
workDir=$(pwd)
logDir=$workDir/logs
testLogA=$logDir/route-inheritanceA.log
testLogB=$logDir/route-inheritanceB.log
testLogC=$logDir/route-inheritanceC.log
testLogD=$logDir/route-inheritanceD.log
mkdir -p $workDir/logs

echo "Starting nfd on host A" > $testLogA
# start nfd on localhost (A)
sudo nfd &> $logDir/nfdA.log &

# start nfd on hostB
ssh $CTRL_B "mkdir -p $logDir ; sudo nfd &> $logDir/nfdB.log &\
  echo 'Starting nfd on host B' > $testLogB ; sleep 2"

# start nfd on hostC
ssh $CTRL_C "mkdir -p $logDir ; sudo nfd &> $logDir/nfdC.log &\
  echo 'Starting nfd on host C' > $testLogC ; sleep 2"

# start nfd on hostD
ssh $CTRL_D "mkdir -p $logDir ; sudo nfd &> $logDir/nfdD.log &\
  echo 'Starting nfd on host D' > $testLogD ; sleep 2"

# set multicast strategy for root namespace on A
nfdc set-strategy / /localhost/nfd/strategy/multicast

# run traffic generator on B,C,D
ssh $CTRL_B "echo 'starting ndn-traffic-server on B' > $testLogB &\
  ndn-traffic-server $workDir/NDNTrafficServer.conf &> $logDir/serverB.log &"
ssh $CTRL_C "echo 'starting ndn-traffic-server on C' > $testLogC &\
  ndn-traffic-server $workDir/NDNTrafficServer.conf &> $logDir/serverC.log &"
ssh $CTRL_D "echo 'starting ndn-traffic-server on D' > $testLogD &\
  ndn-traffic-server $workDir/NDNTrafficServer.conf &> $logDir/serverD.log &"

echo "setting up routes..."

# on A, add ndn:/ , nexthop=hostB, CHILD_INHERIT=yes, CAPTURE=no
nfdc register ndn:/ udp4://$IP4_B1:6363 >> $testLogA

# on A, add ndn:/ , nexthop=hostC, CHILD_INHERIT=no, CAPTURE=no
nfdc register -I ndn:/ udp4://$IP4_C1:6363 >> $testLogA

# on A, add ndn:/A , nexthop=hostB, CHILD_INHERIT=yes, CAPTURE=no
nfdc register ndn:/A udp4://$IP4_B1:6363 >> $testLogA

# on A, add ndn:/A/B/C , nexthop=hostD, CHILD_INHERIT=yes, CAPTURE=no
nfdc register ndn:/A/B/C udp4://$IP4_D1:6363 >> $testLogA

# on A, add ndn:/D , nexthop=hostC, CHILD_INHERIT=yes, CAPTURE=yes
nfdc register -C ndn:/D udp4://$IP4_C1:6363 >> $testLogA

# on A, add ndn:/D , nexthop=hostD, CHILD_INHERIT=yes, CAPTURE=no
nfdc register ndn:/D udp4://$IP4_D1:6363 >> $testLogA

sleep 2


# run traffic generator clients on A
echo "running traffic generator client1..."
ndn-traffic -c 20 -i 200 $workDir/NDNTrafficClient1.conf > $logDir/client1.log 2>&1

echo "running traffic generator client2..."
ndn-traffic -c 20 -i 200 $workDir/NDNTrafficClient2.conf > $logDir/client2.log 2>&1

echo "running traffic generator client3..."
ndn-traffic -c 20 -i 200 $workDir/NDNTrafficClient3.conf > $logDir/client3.log 2>&1

echo "running traffic generator client4..."
ndn-traffic -c 20 -i 200 $workDir/NDNTrafficClient4.conf > $logDir/client4.log 2>&1


# stop traffic generator server on B,C,D and kill local nfd
echo "killing ndn-traffic-server on B, C and D..."
ssh $CTRL_B "sudo killall ndn-traffic-server; sudo killall nfd >> $testLogB 2>&1"
ssh $CTRL_C "sudo killall ndn-traffic-server; sudo killall nfd >> $testLogC 2>&1"
ssh $CTRL_D "sudo killall ndn-traffic-server; sudo killall nfd >> $testLogD 2>&1"
sudo killall nfd 2>&1

sleep 2

# collect data from servers
scp $CTRL_B:$logDir/serverB.log $logDir/serverB.log
scp $CTRL_C:$logDir/serverC.log $logDir/serverC.log
scp $CTRL_D:$logDir/serverD.log $logDir/serverD.log

#### verify server numbers of server B ####
echo "analyzing result of server B"
received=$(grep -A 1 "Name=ndn:/A/P," $logDir/serverB.log | grep "Total Interests Received" |
           cut -d= -f2 | cut -d' ' -f2)
if [[ $received -lt 18 ]]
then
echo "FAIL: B received $received interests of ndn:/A/P out of the 20 sent by A. &\
      At least 18 were supposed to arrive at B due to CHILD_INHERIT flag of /A towards B."
exit 1
fi

received=$(grep -A 1 "Name=ndn:/A/B/C/Q," $logDir/serverB.log | grep "Total Interests Received" |
           cut -d= -f2 | cut -d' ' -f2)
if [[ $received -lt 18 ]]
then
echo "FAIL: B received $received interests of ndn:/A/B/C/Q out of the 20 sent by A. &\
      At least 18 were supposed to arrive at B due to CHILD_INHERIT flag of /A towards B."
exit 1
fi

received=$(grep -A 1 "Name=ndn:/D/R," $logDir/serverB.log | grep "Total Interests Received" |
           cut -d= -f2 | cut -d' ' -f2)
if [[ $received -ne 0 ]]
then
echo "FAIL: B received $received interests of ndn:/D/R out of 20 sent by A. &\
      There is no available route for ndn:/D/R at A towards B so 0 interests were supposed to arrive at B."
exit 1
fi

received=$(grep -A 1 "Name=ndn:/S," $logDir/serverB.log | grep "Total Interests Received" |
           cut -d= -f2 | cut -d' ' -f2)
if [[ $received -lt 18 ]]
then
echo "FAIL: B received $received interests of ndn:/S out of the 20 sent by A. &\
      At least 18 were supposed to arrive at B due to CHILD_INHERIT flag of / towards B."
exit 1
fi

#### verify server numbers of server C ####
echo "analyzing result of server C"
received=$(grep -A 1 "Name=ndn:/A/P," $logDir/serverC.log | grep "Total Interests Received" |
           cut -d= -f2 | cut -d' ' -f2)
if [[ $received -ne 0 ]]
then
echo "FAIL: C received $received interests of ndn:/A/P out of 20 sent by A. &\
      There is no available route for ndn:/A/P at A towards C so 0 interests were supposed to arrive at C."
exit 1
fi

received=$(grep -A 1 "Name=ndn:/A/B/C/Q," $logDir/serverC.log | grep "Total Interests Received" |
           cut -d= -f2 | cut -d' ' -f2)
if [[ $received -ne 0 ]]
then
echo "FAIL: C received $received interests of ndn:/A/B/C/Q out of 20 sent by A. &\
      There is no available route for ndn:/A/B/C/Q at A towards C so 0 interests were supposed to arrive at C."

exit 1
fi

received=$(grep -A 1 "Name=ndn:/D/R," $logDir/serverC.log | grep "Total Interests Received" |
           cut -d= -f2 | cut -d' ' -f2)
if [[ $received -lt 18 ]]
then
echo "FAIL: C received $received interests of ndn:/D/R out of the 20 sent by A. &\
            At least 18 were supposed to arrive at C due to CHILD_INHERIT flag of /D towards C."

exit 1
fi

received=$(grep -A 1 "Name=ndn:/S," $logDir/serverC.log | grep "Total Interests Received" |
           cut -d= -f2 | cut -d' ' -f2)
if [[ $received -lt 18 ]]
then
echo "FAIL: C received $received interests of ndn:/S out of the 20 sent by A. &\
      Longest-prefix match of ndn:/S in A is ndn:/ and therefore at least 18 were supposed to arrive at C."

exit 1
fi

#### verify server numbers of server D ####
echo "analyzing result of server D"
received=$(grep -A 1 "Name=ndn:/A/P," $logDir/serverD.log | grep "Total Interests Received" |
           cut -d= -f2 | cut -d' ' -f2)
if [[ $received -ne 0 ]]
then
echo "FAIL: D received $received interests of ndn:/A/P out of 20 sent by A. &\
      There is no available route for ndn:/A/P at A towards D so 0 interests were supposed to arrive at D."

exit 1
fi

received=$(grep -A 1 "Name=ndn:/A/B/C/Q," $logDir/serverD.log | grep "Total Interests Received" |
           cut -d= -f2 | cut -d' ' -f2)
if [[ $received -lt 18 ]]
then
echo "FAIL: D received $received interests of ndn:/A/B/C/Q out of the 20 sent by A. &\
      At least 18 were supposed to arrive at D due to CHILD_INHERIT flag of /A/B/C towards D."
exit 1
fi

received=$(grep -A 1 "Name=ndn:/D/R," $logDir/serverD.log | grep "Total Interests Received" |
           cut -d= -f2 | cut -d' ' -f2)
if [[ $received -lt 18 ]]
then
echo "FAIL: D received $received interests of ndn:/D/R out of the 20 sent by A. &\
      At least 18 were supposed to arrive at D due to CHILD_INHERIT flag of /D towards D."
exit 1
fi

received=$(grep -A 1 "Name=ndn:/S," $logDir/serverD.log | grep "Total Interests Received" |
           cut -d= -f2 | cut -d' ' -f2)
if [[ $received -ne 0 ]]
then
echo "FAIL: D received $received interests of ndn:/S out of 20 sent by A. &\
      There is no available route for ndn:/S at A towards D so 0 interests were supposed to arrive at D."
exit 1
fi

echo "Test passed successfully"
exit 0
