Add nfdc and nfd-status integration test
refs: #1388
Change-Id: Ic9b181dfb333a9543b1d319e03713325d70c933e
diff --git a/test_nfdc/nfdc-test.sh b/test_nfdc/nfdc-test.sh
new file mode 100755
index 0000000..24966cd
--- /dev/null
+++ b/test_nfdc/nfdc-test.sh
@@ -0,0 +1,181 @@
+#!/usr/bin/env bash
+source ../multi-host.conf
+source include.sh
+workdir=$(pwd)
+mkdir -p $workdir/logs
+testCase=$1
+testLog=$workdir/logs/nfdc_test_$testCase.log
+
+echo "TEST START" > $testLog
+
+start_nfd
+
+# run test case A: test nfdc create / add-nexthop / destroy test case
+if [[ $testCase == 'A' ]]; then
+
+ # Check for the existence of mcast address udp4://224.0.23.170
+ udp4Mcast=$(nfd-status | grep udp4://224.0.23.170)
+ udp6Mcast=$(nfd-status | grep -iF udp6://[ff00)
+ ethv4=$(nfd-status | grep -iF ether://[01:00:5E:)
+ ethv6=$(nfd-status | grep -iF ether://[33:33:)
+
+ if [[ -z "$udp4Mcast" ]] && [[ -z "$udp6Mcast" ]] && [[ -z "$ethv4" ]] && [[ -z "$ethv6" ]]; then
+ echo "nfd-status: Failed to find udp4/udp6/ether multicast faces" >> $testLog
+ echo "nfd-status is:" >> $testLog
+ nfd-status >> $testLog
+ clean_up
+ exit 2
+ fi
+
+ # Invoke nfdc create tcp://$IP4_B1.
+ faceIdTcp4=$(nfdc create tcp4://$IP4_B1 | grep -Po 'FaceId: .*?,' | sed 's/FaceId: //' | sed 's/,//')
+ sleep 2
+ face=$(check_nfd_status_face_existence $faceIdTcp4 tcp4://$IP4_B1)
+ if [ "-1" = $face ]; then
+ clean_up
+ exit 2
+ fi
+
+ #compress IPv6
+ IP6_B1=$(python -c "import sys; import socket; result = socket.getaddrinfo('$IP6_B1', None); family, socktype, proto, canonname,(address, port, flow_info, scope_id) = result[0]; print address")
+
+ # Invoke nfdc create tcp://$IP6_B1.
+ faceIdTcp6=$(nfdc create tcp6://[$IP6_B1] | grep -Po 'FaceId: .*?,' | sed 's/FaceId: //' | sed 's/,//')
+ sleep 2
+ face=$(check_nfd_status_face_existence $faceIdTcp6 tcp6://[$IP6_B1])
+ if [ "-1" = $face ]; then
+ clean_up
+ exit 2
+ fi
+
+ # Invoke nfdc create udp://$IP4_B1.
+ faceIdUdp4=$(nfdc create udp4://$IP4_B1 | grep -Po 'FaceId: .*?,' | sed 's/FaceId: //' | sed 's/,//')
+ sleep 2
+
+ face=$(check_nfd_status_face_existence $faceIdUdp4 udp4://$IP4_B1)
+ if [ "-1" = $face ]; then
+ clean_up
+ exit 2
+ fi
+
+
+ # Invoke nfdc create udp://$IP6_B1.
+ faceIdUdp6=$(nfdc create udp6://[$IP6_B1] | grep -Po 'FaceId: .*?,' | sed 's/FaceId: //' | sed 's/,//')
+ sleep 2
+ face=$(check_nfd_status_face_existence $faceIdUdp6 udp6://[$IP6_B1])
+ if [ "-1" = $face ]; then
+ clean_up
+ exit 2
+ fi
+
+ # Invoke nfdc to add next hops
+ nfdc add-nexthop -c 24 ndn:/test-nfdc $faceIdTcp4
+ nfdc add-nexthop -c 26 ndn:/test-nfdc $faceIdTcp6
+ nfdc add-nexthop -c 14 ndn:/test-nfdc $faceIdUdp4
+ nfdc add-nexthop -c 16 ndn:/test-nfdc $faceIdUdp6
+
+ # check correctness of add-nexthop -c 24 ndn:/test-nfdc $faceIdTcp4
+ check_nfd_status_correctness $faceIdTcp4 tcp4://$IP4_B1 /test-nfdc 24
+
+ # check correctness of add-nexthop -c 26 ndn:/test-nfdc $faceIdTcp6
+ check_nfd_status_correctness $faceIdTcp6 tcp6://[$IP6_B1] /test-nfdc 26
+
+ # check correctness of add-nexthop -c 14 ndn:/test-nfdc $faceIdUdp4
+ check_nfd_status_correctness $faceIdUdp4 udp4://$IP4_B1 /test-nfdc 14
+
+ # check correctness of add-nexthop -c 16 ndn:/test-nfdc $faceIdUdp6
+ check_nfd_status_correctness $faceIdUdp6 udp6://[$IP6_B1] /test-nfdc 16
+
+ # Invoke nfdc to choose BroadcastStrategy for ndn:/ namespace.
+ nfdc set-strategy ndn:/ ndn:/localhost/nfd/strategy/broadcast
+
+ ndnping ndn:/test-nfdc -c $NUM_OF_PINGS
+
+ check_nfd_status_counters $faceIdTcp4 tcp4://$IP4_B1 out $NUM_OF_PINGS
+ check_nfd_status_counters $faceIdTcp6 tcp6://[$IP6_B1] out $NUM_OF_PINGS
+ check_nfd_status_counters $faceIdUdp4 udp4://$IP4_B1 out $NUM_OF_PINGS
+ check_nfd_status_counters $faceIdUdp6 udp6://[$IP6_B1] out $NUM_OF_PINGS
+
+ ssh $CTRL_B "$workdir/test-B.sh $workdir"
+ if [[ $? -ne 0 ]]; then
+ echo "Failed to verify correctness on node B" >> $testLog
+ clean_up
+ exit 3
+ fi
+
+ nfdc destroy $faceIdTcp4
+ echo "after nfdc destroy $faceIdTcp4" >> $testLog
+ face=$(check_nfd_status_face_existence $faceIdTcp4 tcp4://$IP4_B1)
+ if [ "-1" != $face ]; then
+ echo "face $faceIdTcp4 still exists after nfdc destory" >> $testLog
+ clean_up
+ exit 2
+ fi
+
+ nfdc destroy $faceIdTcp6
+ echo "after nfdc destroy $faceIdTcp6" >> $testLog
+ face=$(check_nfd_status_face_existence $faceIdTcp6 tcp6://[$IP6_B1])
+ if [ "-1" != $face ]; then
+ clean_up
+ exit 2
+ fi
+
+ clean_up
+
+# run test case B: nfdc add-nexthop / remove-nexthop test case
+elif [[ $testCase == 'B' ]]; then
+
+ # Invoke nfdc to add next hop
+ faceId=$(nfdc add-nexthop -c 44 ndn:/test-nfdc udp4://$IP4_B1 | grep -Po 'FaceId: .*?,' | sed 's/FaceId: //' | sed 's/,//')
+ if [[ "ERROR" == $faceId* ]]
+ then
+ echo "nfdc: Failed to add nexthop for $IP4_B1" >> $testLog
+ clean_up
+ exit 1
+ fi
+
+ check_nfd_status_correctness $faceId udp4://$IP4_B1 /test-nfdc 44
+
+ # invoke nfdc to remove the nexthop for created FaceId
+ removeNextHop=$(nfdc remove-nexthop ndn:/test-nfdc $faceId)
+
+ # check the existence of ndn:/test-nfdc FIB entry
+ fibEntry=$(nfd-status | grep /test-nfdc)
+ if [ ! -z "$fibEntry" ]; then
+ echo "nfd-status: Failed to delete ndn:/test-nfdc FIB entry" >> $testLog
+ clean_up
+ exit 2
+ fi
+ clean_up
+
+# run test case C: test nfdc register / unregister test case
+elif [[ $testCase == 'C' ]]; then
+
+ # run nrd
+ start_nrd
+
+ # Invoke nfdc register a new prefix
+ faceId=$(nfdc register -c 55 ndn:/test-nfdc udp4://$IP4_B1 | grep -Po 'FaceId: .*?,' | sed 's/FaceId: //' | sed 's/,//')
+ if [[ "ERROR" == $faceId* ]]; then
+ echo "nfdc: Failed to register ndn:/test-nfdc for $IP4_B1" >> $testLog
+ clean_up
+ exit 1
+ fi
+ check_nfd_status_correctness $faceId udp4://$IP4_B1 /test-nfdc 55
+
+ # Invoke nfdc to unregister the prefix
+ unregisterPrefix=$(nfdc unregister ndn:/test-nfdc $faceId)
+
+ # check the existence of ndn:/test-nfdc FIB entry
+ fibEntry=$(nfd-status | grep /test-nfdc)
+ if [ ! -z "$fibEntry" ]; then
+ echo "nfd-status: Failed to unregister prefix" >> $testLog
+ clean_up
+ exit 2
+ fi
+ clean_up
+fi
+
+clean_up
+exit 0
+