#!/usr/bin/env bash
source ../multi-host.conf
workDir=$(pwd)
logDir=$workDir/logs
hubIP=$CTRL_B
testLog=$logDir/auto-prefix-propagate.log
hostSh=A.sh
hubSh=B.sh

echo "TEST AUTOMATIC PREFIX PROPAGATE START" > $testLog

LOG () {
    echo $1; echo $1 >>$testLog
}

run_hub_cmd () {
    ssh $hubIP "$1" 2>&1
}

run_scp_to_hub () {
    scp $1 $hubIP:$workDir/$1 2>&1
}

set_hub_trust_anchor () {
    LOG "set the trust anchor to $1 on the hub."
    anchor=$(sh $hostSh -a $1)
    echo $anchor > anchor.cert
    run_scp_to_hub anchor.cert && rm anchor.cert
}

run_host_ping_server() {
    ndnpingserver $1 >>$testLog 2>&1 &
}

end_test() {
    scp $hubIP:$workDir/hub.nfd.log hub.nfd.log 2>&1
    scp $hubIP:$workDir/hub.test.log hub.test.log 2>&1
    cat host.nfd.log hub.nfd.log > nfd.log
    cat host.test.log hub.test.log > test.log
    cat nfd.log test.log >> $testLog

    bash $hostSh -c && run_hub_cmd "cd $workDir && bash $hubSh -c"
    run_hub_cmd "[[ -d $workDir ]] && sudo rm -rf $workDir"
    rm *.log

    [[ $# -gt 0 ]] && LOG "$1" && exit 1 || exit 0
}

inspect_hub_rib_exist() {
    record=$(run_hub_cmd "nfd-status -r" | grep "$1 route")
    if [[ -z "$record" ]]; then
        end_test "Fail test $2"
    fi
}

inspect_hub_rib_none() {
    record=$(run_hub_cmd "nfd-status -r" | grep "$1 route")
    if [[ ! -z "$record" ]]; then
        end_test "Fail test $2. the matched record: $record"
    fi
}

run_test() {
    faceUri=udp4://$hubIP:6363
    nfdc create $faceUri >> $testLog

    defer_time=5

    LOG "run test case: 1"
    run_host_ping_server ndn:/Z/A/G && p1=$! && sleep $defer_time
    inspect_hub_rib_none /Z/A "1: route of /Z/A exists, but propagation should not be active \
as the /localhop/nfd prefix has not been registered to the local RIB now."

    LOG "run test case: 2"
    nfdc register ndn:/localhop/nfd $faceUri >> $testLog && sleep $defer_time
    inspect_hub_rib_exist /Z/A "2: route of /Z/A does not exist, but it should exist because \
automatic prefix propagation is active (/localhop/nfd prefix has been registered), Z/A/G is \
present in local RIB and /Z/A has been configured as an identity in NFD's keychain."
    inspect_hub_none /Z/A/G "2: route of /Z/A/G exists, but it should not exist because \
/Z/A is shorter and should be adopted for propagation."

    LOG "run test case: 3"
    run_host_ping_server ndn:/Z/A/H && p2=$! && sleep $defer_time
    inspect_hub_rib_exist /Z/A "3: route of /Z/A does not exist, but it should exist because \
/Z/A has already been propagated."
    inspect_hub_none /Z/A/H "3: route of /Z/A/H exists, but it should not exist because \
/Z/A is shorter and should be adopted for propagation."

    LOG "run test case: 4"
    sudo kill $p1 1>> $testLog 2>&1 && sleep $defer_time
    inspect_hub_rib_exist /Z/A "4: route of /Z/A was unregistered, it should be kept for \
local RIB entry /Z/A/H."

    LOG "run test case: 5"
    sudo kill $p2 1>> $testLog 2>&1 && sleep $defer_time
    inspect_hub_rib_none /Z/A "5: route of /Z/A still exists, but it should have been \
automatically unregistered, because all /Z/H/* prefixes have been unregistered locally."

    LOG "run test case: 6"
    run_host_ping_server ndn:/Z/A/B/C/D && p3=$! && sleep $defer_time
    inspect_hub_rib_none /Z/A/B/C "6: route of /Z/A/B/C exist, but it should not be \
propagated because /Z/A is a better choice."
    inspect_hub_rib_exist /Z/A "6: route of /Z/A does not exist, but it should have \
been propagated."

    LOG "run test case: 7"
    sleep 80
    inspect_hub_rib_exist /Z/A "7: route of /Z/A/ does not exist, it should have been \
refreshed periodically."

    LOG "run test case: 8"
    run_host_ping_server ndn:/Z/F/I && sleep $defer_time
    inspect_hub_rib_none /Z/F "8: route of /Z/F exist, but automatic prefix propagation \
should not be active becuase there are no configured keys for the covering namespace."
}

LOG "set environment in the host."
bash $hostSh -c -p

LOG "set environment in the hub."
run_hub_cmd "[[ -d $workDir ]] || mkdir -p $workDir"
run_scp_to_hub $hubSh
set_hub_trust_anchor ndn:/Z/A
run_hub_cmd "cd $workDir && bash $hubSh -c -p"

LOG "run test"
run_test && end_test
