diff --git a/CHANGELOG.md b/CHANGELOG.md index cfa85e95..d7120d5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Major New features * YANG Features * Yang 1.1 feature and if-feature according to RFC 7950 7.20.1 and 7.20.2. + * See https://github.com/clicon/clixon/issues/41 * Features are declared via CLICON_FEATURE in the configuration file. Examples showing enabling (1) a specific feature; (2) all features in a module; (3) all features in all modules: ``` ietf-routing:router-id diff --git a/test/test_feature.sh b/test/test_feature.sh new file mode 100755 index 00000000..afcb05bb --- /dev/null +++ b/test/test_feature.sh @@ -0,0 +1,109 @@ +#!/bin/bash +# Yang features. if-feature +APPNAME=example +# include err() and new() functions and creates $dir +. ./lib.sh + +cfg=$dir/conf_yang.xml +fyang=$dir/test.yang + +cat < $cfg + + $APPNAME:A + ietf-routing:router-id + $cfg + /usr/local/share/$APPNAME/yang + $APPNAME + /usr/local/lib/$APPNAME/clispec + /usr/local/lib/$APPNAME/cli + $APPNAME + /usr/local/var/$APPNAME/$APPNAME.sock + /usr/local/var/$APPNAME/$APPNAME.pidfile + 1 + /usr/local/var/$APPNAME + /usr/local/lib/xmldb/text.so + true + +EOF + +cat < $fyang +module $APPNAME{ + prefix ex; + import ietf-routing { + prefix rt; + } + feature A{ + description "This test feature is enabled"; + } + feature B{ + description "This test feature is disabled"; + } + feature C{ + description "This test feature is disabled"; + } + leaf x{ + if-feature A; + type "string"; + } + leaf y{ + if-feature B; + type "string"; + } + leaf z{ + type "string"; + } +} +EOF +new "start backend -s init -f $cfg -y $fyang" +# kill old backend (if any) +new "kill old backend" +sudo clixon_backend -zf $cfg -y $fyang +if [ $? -ne 0 ]; then + err +fi + +new "start backend -s init -f $cfg -y $fyang" +# start new backend +sudo $clixon_backend -s init -f $cfg -y $fyang +if [ $? -ne 0 ]; then + err +fi + +new "cli enabled feature" +expectfn "$clixon_cli -1f $cfg -y $fyang set x foo" 0 "" + +new "cli disabled feature" +expectfn "$clixon_cli -1f $cfg -l o -y $fyang set y foo" 255 "CLI syntax error: \"set y foo\": Unknown command" + +new "cli enabled feature in other module" +expectfn "$clixon_cli -1f $cfg -y $fyang set routing routing-instance A router-id 1.2.3.4" 0 "" + +new "cli disabled feature in other module" +expectfn "$clixon_cli -1f $cfg -l o -y $fyang set routing routing-instance A default-ribs" 255 "CLI syntax error: \"set routing routing-instance A default-ribs\": Unknown command" + +new "netconf discard-changes" +expecteof "$clixon_netconf -qf $cfg -y $fyang" 0 "]]>]]>" "^]]>]]>$" + +new "netconf enabled feature" +expecteof "$clixon_netconf -qf $cfg -y $fyang" 0 "foo]]>]]>" "^]]>]]>$" + +new "netconf validate enabled feature" +expecteof "$clixon_netconf -qf $cfg -y $fyang" 0 "]]>]]>" "^]]>]]>$" + +new "netconf disabled feature" +expecteof "$clixon_netconf -qf $cfg -y $fyang" 0 "foo]]>]]>" '^operation-failedprotocolerrorXML node config/A has no corresponding yang specification \(Invalid XML or wrong Yang spec?' + +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