#!/usr/bin/env bash # XML inserty and merge two trees # This is mainly a development API check # Magic line must be first in script (see README.md) s="$_" ; . ./lib.sh || if [ "$s" = $0 ]; then exit 0; else return 0; fi : ${clixon_util_xml_mod:=clixon_util_xml_mod} OPTS="-D $DBG" APPNAME=example cfg=$dir/conf_yang.xml fyang=$dir/example.yang cat < $cfg $cfg $dir /usr/local/share/clixon /usr/local/lib/$APPNAME/clispec /usr/local/lib/$APPNAME/cli $APPNAME /usr/local/var/$APPNAME/$APPNAME.sock /usr/local/var/$APPNAME/$APPNAME.pidfile $dir EOF cat < $fyang module example { yang-version 1.1; namespace "urn:example:example"; prefix ex; revision 2019-01-13; container c{ leaf d{ type int32; } list a{ key x; leaf x{ type int32; } } } } EOF # insert/merge a tree into a base tree # Args: # 1: operation # 2: base tree # 3: insert tree # 4: xpath # 5: retval # 6: result function testrun(){ op=$1 x0=$2 x1=$3 xp=$4 ret=$5 res=$6 echo "$clixon_util_xml_mod -o $op -y $fyang -b "$x0" -x "$x1" -p $xp $OPTS" expectpart "$($clixon_util_xml_mod -o $op -y $fyang -b "$x0" -x "$x1" -p $xp $OPTS)" $ret "$res" } new "test params: -y $fyang $OPTS" # -------- insert # Empty element base list x0a='' x0b='' p=c new "insert 1st element" testrun insert "$x0a$x0b" "$x0a1$x0b" $p 0 '1' new "insert 2nd element" testrun insert "$x0a2$x0b" "$x0a1$x0b" $p 0 '12' new "insert container" testrun insert "$x0a1$x0b" "$x0a42$x0b" c 0 '421' # -------- parse parent new "parent 1st element" testrun parent "$x0a$x0b" "1" $p 0 '1' new "parse parent element" testrun parent "$x0a2$x0b" '1' $p 0 '12' new "parse parent container" testrun parent "$x0a1$x0b" '42' c 0 '421' # -------- merge new "merge empty" testrun merge "$x0a$x0b" "$x0a$x0b" $p 0 '' new "merge single w empty" testrun merge "$x0a1$x0b" "$x0a$x0b" . 0 '1' new "merge empty w single" testrun merge "$x0a$x0b" "$x0a1$x0b" . 0 '1' new "merge equal single" testrun merge "$x0a1$x0b" "$x0a1$x0b" . 0 '1' new "merge overlap" testrun merge "$x0a12$x0b" "$x0a23$x0b" . 0 '123' new "merge list and leaf" testrun merge "$x0a12$x0b" "$x0a42$x0b" . 0 '4212' new "merge leaf and list" testrun merge "$x0a42$x0b" "$x0a12$x0b" . 0 '4212' new "merge overlap with path fail, merge does not work w subtrees" testrun merge "$x0a12$x0b" "$x0a23$x0b" c 255 '' rm -rf $dir # unset conditional parameters unset clixon_util_xml_mod new "endtest" endtest