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

clean_up() {
    echo "cleaning up..."
    r=$(sudo killall nfd 2>&1)
    r=$(ssh $CTRL_B "sudo killall ndn-traffic-server 2>&1; sudo killall nfd 2>&1" 2>&1)
    r=$(ssh $CTRL_C "sudo killall ndn-traffic-server 2>&1; sudo killall nfd 2>&1" 2>&1)
    r=$(ssh $CTRL_D "sudo killall nfd 2>&1" 2>&1)
}

# start nfd on all hosts
echo "starting nfd on all hosts..."
ssh $CTRL_B "mkdir -p $workdir/logs;\
    sudo nfd &> $workdir/logs/nfd.log &\
    sleep 3"
ssh $CTRL_C "mkdir -p $workdir/logs;\
    sudo nfd &> $workdir/logs/nfd.log &\
    sleep 3"
ssh $CTRL_D "mkdir -p $workdir/logs;\
    sudo nfd &> $workdir/logs/nfd.log &\
    sleep 3"
sudo nfd &> $workdir/logs/nfd.log &
sleep 5

# start ndn-traffic-server on B and C
echo "starting ndn-traffic-server on B and C"
ssh $CTRL_B "ndn-traffic-server $workdir/NDNTrafficServer.conf &> $workdir/logs/serverB.log &"
ssh $CTRL_C "ndn-traffic-server $workdir/NDNTrafficServer.conf &> $workdir/logs/serverC.log &"

# set up forwarding on A
echo "setting up forwarding on A..."
nfdc strategy set ndn:/test-mcast ndn:/localhost/nfd/strategy/multicast
nfdc face create udp4://$IP4_B1
nfdc face create udp4://$IP4_C1
nfdc route add ndn:/test-mcast udp4://$IP4_B1 cost 10
nfdc route add ndn:/test-mcast udp4://$IP4_C1 cost 20

# set up forwarding on D
echo "setting up forwarding on D..."
ssh $CTRL_D "nfdc face create udp4://$IP4_A2"
ssh $CTRL_D "nfdc route add ndn:/test-mcast udp4://$IP4_A2"

# run ndn-traffic-client on D
echo "running ndn-traffic-client on D..."
ssh $CTRL_D "ndn-traffic-client -c 100 -i 200 $workdir/NDNTrafficClient.conf > $workdir/logs/client.log 2>&1"

# kill ndn-traffic-server on B and C
echo "killing ndn-traffic-server on B and C..."
ssh $CTRL_B "sudo killall ndn-traffic-server; sudo killall nfd"
ssh $CTRL_C "sudo killall ndn-traffic-server; sudo killall nfd"

# collect data from B, C and D
echo "collecting data from B, C and D..."
scp $CTRL_B:$workdir/logs/serverB.log $workdir/logs/serverB.log
scp $CTRL_C:$workdir/logs/serverC.log $workdir/logs/serverC.log
ssh $CTRL_D "nfdc face list > $workdir/logs/nfdc-face-list-D.log"
scp $CTRL_D:$workdir/logs/nfdc-face-list-D.log $workdir/logs/nfdc-face-list-D.log
scp $CTRL_D:$workdir/logs/client.log $workdir/logs/client.log

# analyze result
echo "analyzing result"
b_received=$(grep "Total Interests Received" $workdir/logs/serverB.log | head -1 | cut -d= -f2 | cut -d' ' -f2)
if [[ $b_received -lt 80 ]]
then
    echo "FAIL: B did not receive at least 80 interests."
    clean_up
    exit 1
fi
c_received=$(grep "Total Interests Received" $workdir/logs/serverC.log | head -1 | cut -d= -f2 | cut -d' ' -f2)
if [[ $c_received -lt 80 ]]
then
    echo "FAIL: C did not receive at least 80 interests."
    clean_up
    exit 2
fi
cat $workdir/logs/nfdc-face-list-D.log | grep udp4 | while read line
do
    ind=$(echo $line | grep -Po "i .*?d} out" | sed 's/i //g' | sed 's/d} out//g')
    if [[ $ind -gt 120 ]]
    then
        echo "FAIL: incoming data packet in D exceeded 120."
        echo $line
        clean_up
        exit 3
    fi
done

# clean up
clean_up
echo "MulticastStrategy PASSED"
