| #!/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 |
| |
| [[ -d $logDir ]] || mkdir -p $logDir |
| 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." |
| certFile=$(sh $hostSh -a $1) |
| run_scp_to_hub $certFile |
| } |
| |
| 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" |
| rm *.log |
| |
| [[ $# -gt 0 ]] && LOG "$1" && exit 1 || exit 0 |
| } |
| |
| inspect_hub_rib_exist() { |
| record=$(run_hub_cmd "nfdc route list" | grep "prefix=$1 ") |
| if [[ -z "$record" ]]; then |
| end_test "Fail test $2" |
| fi |
| } |
| |
| inspect_hub_rib_none() { |
| record=$(run_hub_cmd "nfdc route list" | grep "prefix=$1 ") |
| if [[ ! -z "$record" ]]; then |
| end_test "Fail test $2. the matched record: $record" |
| fi |
| } |
| |
| run_test() { |
| faceUri=udp4://$hubIP:6363 |
| nfdc face 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 route add /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_rib_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_rib_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 |