#!/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 -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"
