#!/bin/bash # Restconf basic functionality # Assume http server setup, such as nginx described in apps/restconf/README.md APPNAME=example # include err() and new() functions and creates $dir . ./lib.sh cfg=$dir/conf.xml fyang=$dir/restconf.yang xml=$dir/xml.xml # example cat < $cfg $cfg /usr/local/share/clixon $fyang false /usr/local/var/$APPNAME/$APPNAME.sock $dir/restconf.pidfile /usr/local/var/$APPNAME /usr/local/lib/xmldb/text.so /usr/local/lib/$APPNAME/clispec /usr/local/lib/$APPNAME/cli $APPNAME true true true EOF # RFC5277 NETCONF Event Notifications cat < $fyang module example { namespace "http://example.com/event/1.0"; prefix ex; organization "Example, Inc."; contact "support at example.com"; description "Example Notification Data Model Module."; revision "2016-07-07" { description "Initial version."; reference "example.com document 2-9976."; } notification event { description "Example notification event."; leaf event-class { type string; description "Event class identifier."; } container reporting-entity { description "Event specific information."; leaf card { type string; description "Line card identifier."; } } leaf severity { type string; description "Event severity description."; } } } EOF # kill old backend (if any) new "kill old backend" sudo clixon_backend -zf $cfg if [ $? -ne 0 ]; then err fi new "start backend -s init -f $cfg -y $fyang" sudo $clixon_backend -s init -f $cfg -y $fyang # -D 1 if [ $? -ne 0 ]; then err fi new "kill old restconf daemon" sudo pkill -u www-data clixon_restconf new "start restconf daemon" sudo start-stop-daemon -S -q -o -b -x /www-data/clixon_restconf -d /www-data -c www-data -- -f $cfg -D 1 sleep 1 # get the stream list using netconf new "netconf event stream discovery RFC5277 Sec 3.2.5" expecteof "$clixon_netconf -qf $cfg -y $fyang" 0 ']]>]]>' 'CLICONClicon logsfalseNETCONFdefault NETCONF event streamfalse]]>]]>' new "netconf event stream discovery RFC8040 Sec 6.2" expecteof "$clixon_netconf -qf $cfg -y $fyang" 0 ']]>]]>' 'CLICONClicon logsfalsexmlhttps://example.com/stream/CLICONNETCONFdefault NETCONF event streamfalsexmlhttps://example.com/stream/NETCONF]]>]]>' new "restconf event stream discovery RFC8040 Sec 6.2" expectfn "curl -s -X GET http://localhost/restconf/data/ietf-restconf-monitoring:restconf-state/streams" 0 '{"streams": {"stream": \[{"name": "CLICON","description": "Clicon logs","replay-support": false,"access": \[{"encoding": "xml","location": "https://example.com/stream/CLICON"}\]},{ "name": "NETCONF","description": "default NETCONF event stream","replay-support": false,"access": \[{"encoding": "xml","location": "https://example.com/stream/NETCONF"}\]}\]}' new "restconf subscribe RFC8040 Sec 6.3, get location" expectfn "curl -s -X GET http://localhost/restconf/data/ietf-restconf-monitoring:restconf-state/streams/stream=NETCONF/access=xml/location" 0 '{"location": "https://example.com/stream/NETCONF"}' new "restconf monitor event stream RFC8040 Sec 6.3" #expectfn "curl -s -X GET http://localhost/stream/NETCONF" 0 '' #new "netconf subscription" NOTYET #expectwait "$clixon_netconf -qf $cfg -y $fyang" "ROUTING]]>]]>" "^]]>]]>Routing notification]]>]]>$" 30 new "Kill restconf daemon" sudo pkill -u www-data clixon_restconf new "Kill backend" # kill backend sudo clixon_backend -zf $cfg if [ $? -ne 0 ]; then err "kill backend" fi # Check if still alive pid=`pgrep clixon_backend` if [ -n "$pid" ]; then sudo kill $pid fi rm -rf $dir