#!/usr/bin/env bash # Yang when and must conditional xpath specification # Testing of validation phase. # Magic line must be first in script (see README.md) s="$_" ; . ./lib.sh || if [ "$s" = $0 ]; then exit 0; else return 0; fi APPNAME=example cfg=$dir/conf_yang.xml fyang=$dir/test.yang cat < $cfg $cfg ${YANG_INSTALLDIR} $fyang /usr/local/lib/$APPNAME/clispec /usr/local/lib/$APPNAME/cli $APPNAME /usr/local/var/$APPNAME/$APPNAME.sock /usr/local/var/$APPNAME/$APPNAME.pidfile /usr/local/var/$APPNAME EOF cat < $fyang module $APPNAME{ yang-version 1.1; namespace "urn:example:clixon"; prefix ex; identity routing-protocol { description "Base identity from which routing protocol identities are derived."; } identity direct { base routing-protocol; description "Routing pseudo-protocol which provides routes to directly connected networks."; } identity static { base routing-protocol; description "Static routing pseudo-protocol."; } list whenex { key "type name"; leaf type { type identityref { base routing-protocol; } } leaf name { type string; } leaf route-preference { type uint32; } container static-routes { when "../type='static'" { description "This container is only valid for the 'static' routing protocol."; } presence true; } } container interface { leaf ifType { type enumeration { enum ethernet; enum atm; } } leaf ifMTU { type uint32; } must 'ifType != "ethernet" or ifMTU = 1500' { error-message "An Ethernet MTU must be 1500"; } must 'ifType != "atm" or' + ' (ifMTU <= 17966 and ifMTU >= 64)' { error-message "An ATM MTU must be 64 .. 17966"; } } } EOF new "test params: -f $cfg" if [ $BE -ne 0 ]; then new "kill old backend" sudo clixon_backend -zf $cfg if [ $? -ne 0 ]; then err fi new "start backend -s init -f $cfg" start_backend -s init -f $cfg fi new "wait backend" wait_backend new "when: add static route" expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "staticr1" "" "" new "when: validate ok" expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "" "" "" new "when: add direct route" expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "directr2" "" "" new "when get config" expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "" "" "directr2staticr1" new "when: validate fail" expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "" "" "applicationoperation-failederrorFailed WHEN condition of static-routes in module example (WHEN xpath is ../type='static')" new "when: discard-changes" expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "" "" "" new "must: add interface" expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "ethernet1500" "" "" new "must: validate ok" expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "" "" "" new "must: add atm interface" expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "atm32" "" "" new "must: atm validate fail" expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "" "" "applicationoperation-failederrorAn ATM MTU must be 64 .. 17966" new "must: add eth interface" expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "ethernet989" "" "" new "must: eth validate fail" expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "" "" "applicationoperation-failederrorAn Ethernet MTU must be 1500" if [ $BE -ne 0 ]; then new "Kill backend" # Check if premature kill pid=$(pgrep -u root -f clixon_backend) if [ -z "$pid" ]; then err "backend already dead" fi # kill backend stop_backend -f $cfg fi rm -rf $dir new "endtest" endtest