#!/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 set-strategy ndn:/test-mcast ndn:/localhost/nfd/strategy/multicast
nfdc add-nexthop -c 10 ndn:/test-mcast udp4://$IP4_B1
nfdc add-nexthop -c 20 ndn:/test-mcast udp4://$IP4_C1

# set up forwarding on D
echo "setting up forwarding on D..."
ssh $CTRL_D "nfdc add-nexthop 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 "nfd-status -f > $workdir/logs/nfd-status-D.log"
scp $CTRL_D:$workdir/logs/nfd-status-D.log $workdir/logs/nfd-status-D.log
scp $CTRL_D:$workdir/logs/client.log $workdir/logs/client.log
nfd-status > $workdir/logs/nfd-status-A.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/nfd-status-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"
