Investigation of https://github.com/clicon/clixon/issues/414
New tests and help texts
This commit is contained in:
parent
af1f5a037d
commit
6d82c70e26
3 changed files with 82 additions and 9 deletions
|
|
@ -795,7 +795,7 @@ xpath_vec(cxobj *xcur,
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
*vec=NULL;
|
*vec = NULL;
|
||||||
*veclen = 0;
|
*veclen = 0;
|
||||||
if (xpath_vec_ctx(xcur, nsc, xpath, 0, &xr) < 0)
|
if (xpath_vec_ctx(xcur, nsc, xpath, 0, &xr) < 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,20 @@ expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS>
|
||||||
new "netconf commit"
|
new "netconf commit"
|
||||||
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><commit/></rpc>" "" "<rpc-reply $DEFAULTNS><ok/></rpc-reply>"
|
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><commit/></rpc>" "" "<rpc-reply $DEFAULTNS><ok/></rpc-reply>"
|
||||||
|
|
||||||
|
new "given key show key"
|
||||||
|
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><get><filter type='xpath' select=\"/fi:x/fi:y[fi:a='1']/fi:a\" xmlns:fi='urn:example:filter' /></get></rpc>" "" "<rpc-reply $DEFAULTNS><data><x xmlns=\"urn:example:filter\"><y><a>1</a></y></x></data></rpc-reply>"
|
||||||
|
|
||||||
|
new "given key show value"
|
||||||
|
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><get><filter type='xpath' select=\"/fi:x/fi:y[fi:a='1']/fi:b\" xmlns:fi='urn:example:filter' /></get></rpc>" "" "<rpc-reply $DEFAULTNS><data><x xmlns=\"urn:example:filter\"><y><a>1</a><b>1</b></y></x></data></rpc-reply>"
|
||||||
|
|
||||||
|
# XXX Bug, see https://github.com/clicon/clixon/issues/414
|
||||||
|
#new "given value show key"
|
||||||
|
#expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><get><filter type='xpath' select=\"/fi:x/fi:y[fi:b='1']/fi:a\" xmlns:fi='urn:example:filter' /></get></rpc>" "" "<rpc-reply $DEFAULTNS><data><x xmlns=\"urn:example:filter\"><y><a>1</a></y></x></data></rpc-reply>"
|
||||||
|
|
||||||
|
# OK, see motivation of case (2) in https://github.com/clicon/clixon/issues/414
|
||||||
|
new "given value show value"
|
||||||
|
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><get><filter type='xpath' select=\"/fi:x/fi:y[fi:b='1']/fi:b\" xmlns:fi='urn:example:filter' /></get></rpc>" "" "<rpc-reply $DEFAULTNS><data><x xmlns=\"urn:example:filter\"><y><a>1</a><b>1</b></y></x></data></rpc-reply>"
|
||||||
|
|
||||||
new "wrong filter type"
|
new "wrong filter type"
|
||||||
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><get><filter type='foo'><x xmlns='urn:example:filter'><y><a>1</a></y></x></filter></get></rpc>" "" "<rpc-reply $DEFAULTNS><rpc-error><error-tag>operation-failed</error-tag><error-type>applicatio</error-type><error-severity>error</error-severity><error-message>filter type not supported</error-message><error-info>type</error-info></rpc-error></rpc-reply>"
|
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><get><filter type='foo'><x xmlns='urn:example:filter'><y><a>1</a></y></x></filter></get></rpc>" "" "<rpc-reply $DEFAULTNS><rpc-error><error-tag>operation-failed</error-tag><error-type>applicatio</error-type><error-severity>error</error-severity><error-message>filter type not supported</error-message><error-info>type</error-info></rpc-error></rpc-reply>"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,10 @@
|
||||||
# - /aaa/bbb/comment, where "comment" is nodetype
|
# - /aaa/bbb/comment, where "comment" is nodetype
|
||||||
# - //b*, combinations of // and "*"
|
# - //b*, combinations of // and "*"
|
||||||
# For more (outdated info): https://github.com/clicon/clixon/issues/54
|
# For more (outdated info): https://github.com/clicon/clixon/issues/54
|
||||||
|
# Test has three parts:
|
||||||
|
# - Only XML no YANG
|
||||||
|
# - negative tests with YANG
|
||||||
|
# - simple key/value test with YANG
|
||||||
|
|
||||||
# Magic line must be first in script (see README.md)
|
# Magic line must be first in script (see README.md)
|
||||||
s="$_" ; . ./lib.sh || if [ "$s" = $0 ]; then exit 0; else return 0; fi
|
s="$_" ; . ./lib.sh || if [ "$s" = $0 ]; then exit 0; else return 0; fi
|
||||||
|
|
@ -17,6 +21,9 @@ xml3=$dir/xml3.xml
|
||||||
xml4=$dir/xml4.xml
|
xml4=$dir/xml4.xml
|
||||||
xmlfn=$dir/xmlfn.xml
|
xmlfn=$dir/xmlfn.xml
|
||||||
|
|
||||||
|
fyang=$dir/clixon-example.yang
|
||||||
|
|
||||||
|
|
||||||
cat <<EOF > $xml
|
cat <<EOF > $xml
|
||||||
<aaa>
|
<aaa>
|
||||||
<bbb x="hello">
|
<bbb x="hello">
|
||||||
|
|
@ -120,6 +127,25 @@ cat <<EOF > $xmlfn
|
||||||
</root>
|
</root>
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF > $fyang
|
||||||
|
module clixon-example {
|
||||||
|
yang-version 1.1;
|
||||||
|
namespace "urn:example:clixon";
|
||||||
|
prefix ex;
|
||||||
|
container table{
|
||||||
|
list parameter{
|
||||||
|
key name;
|
||||||
|
leaf name{
|
||||||
|
type string;
|
||||||
|
}
|
||||||
|
leaf value{
|
||||||
|
type string;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
new "xpath not(aaa)"
|
new "xpath not(aaa)"
|
||||||
expectpart "$($clixon_util_xpath -D $DBG -f $xml -p "not(aaa)")" 0 "bool:false"
|
expectpart "$($clixon_util_xpath -D $DBG -f $xml -p "not(aaa)")" 0 "bool:false"
|
||||||
|
|
||||||
|
|
@ -325,6 +351,7 @@ expectpart "$($clixon_util_xpath -D $DBG -f $xmlfn -p "root/count/node[99=ancest
|
||||||
new "xpath functions as ncname: functioname:count"
|
new "xpath functions as ncname: functioname:count"
|
||||||
expectpart "$($clixon_util_xpath -D $DBG -f $xmlfn -p "root/node/ancestor[73=count]")" 0 "<ancestor><count>73</count></ancestor>"
|
expectpart "$($clixon_util_xpath -D $DBG -f $xmlfn -p "root/node/ancestor[73=count]")" 0 "<ancestor><count>73</count></ancestor>"
|
||||||
|
|
||||||
|
# PART 2
|
||||||
# Negative tests from fuzz crashes
|
# Negative tests from fuzz crashes
|
||||||
cat <<EOF > $dir/1.xml
|
cat <<EOF > $dir/1.xml
|
||||||
<table xmlns="urn:example:clixon">
|
<table xmlns="urn:example:clixon">
|
||||||
|
|
@ -340,56 +367,88 @@ cat <<EOF > $dir/1.xpath
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
new "negative xpath 1"
|
new "negative xpath 1"
|
||||||
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y /usr/local/share/clixon/clixon-example@${CLIXON_EXAMPLE_REV}.yang -Y /usr/local/share/clixon < $dir/1.xpath)" 0 "bool:false"
|
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y $fyang < $dir/1.xpath)" 0 "bool:false"
|
||||||
|
|
||||||
cat <<EOF > $dir/1.xpath
|
cat <<EOF > $dir/1.xpath
|
||||||
ter='x'/ex:table[exmeter='x']
|
ter='x'/ex:table[exmeter='x']
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
new "negative xpath 2"
|
new "negative xpath 2"
|
||||||
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y /usr/local/share/clixon/clixon-example@${CLIXON_EXAMPLE_REV}.yang -Y /usr/local/share/clixon < $dir/1.xpath)" 0 "bool:false"
|
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y $fyang < $dir/1.xpath)" 0 "bool:false"
|
||||||
|
|
||||||
cat <<EOF > $dir/1.xpath
|
cat <<EOF > $dir/1.xpath
|
||||||
/ex:table<ex*ptramble
|
/ex:table<ex*ptramble
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
new "negative xpath 3"
|
new "negative xpath 3"
|
||||||
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y /usr/local/share/clixon/clixon-example@${CLIXON_EXAMPLE_REV}.yang -Y /usr/local/share/clixon < $dir/1.xpath)" 0 "bool:false"
|
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y $fyang < $dir/1.xpath)" 0 "bool:false"
|
||||||
|
|
||||||
cat <<EOF > $dir/1.xpath
|
cat <<EOF > $dir/1.xpath
|
||||||
7/ex:table['x']
|
7/ex:table['x']
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
new "negative xpath 4"
|
new "negative xpath 4"
|
||||||
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y /usr/local/share/clixon/clixon-example@${CLIXON_EXAMPLE_REV}.yang -Y /usr/local/share/clixon < $dir/1.xpath)" 0 "number:7"
|
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y $fyang < $dir/1.xpath)" 0 "number:7"
|
||||||
|
|
||||||
cat <<EOF > $dir/1.xpath
|
cat <<EOF > $dir/1.xpath
|
||||||
/>meter*//ter
|
/>meter*//ter
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
new "negative xpath 5"
|
new "negative xpath 5"
|
||||||
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y /usr/local/share/clixon/clixon-example@${CLIXON_EXAMPLE_REV}.yang -Y /usr/local/share/clixon < $dir/1.xpath)" 0 "bool:false"
|
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y $fyang < $dir/1.xpath)" 0 "bool:false"
|
||||||
|
|
||||||
cat <<EOF > $dir/1.xpath
|
cat <<EOF > $dir/1.xpath
|
||||||
7=/ ter
|
7=/ ter
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
new "negative xpath 6"
|
new "negative xpath 6"
|
||||||
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y /usr/local/share/clixon/clixon-example@${CLIXON_EXAMPLE_REV}.yang -Y /usr/local/share/clixon < $dir/1.xpath)" 0 "bool:false"
|
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y $fyang < $dir/1.xpath)" 0 "bool:false"
|
||||||
|
|
||||||
cat <<EOF > $dir/1.xpath
|
cat <<EOF > $dir/1.xpath
|
||||||
/=7 ter
|
/=7 ter
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
new "negative xpath 7"
|
new "negative xpath 7"
|
||||||
#expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y /usr/local/share/clixon/clixon-example@${CLIXON_EXAMPLE_REV}.yang -Y /usr/local/share/clixon < $dir/1.xpath)" 0 "bool:false"
|
#expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y $fyang < $dir/1.xpath)" 0 "bool:false"
|
||||||
|
|
||||||
cat <<EOF > $dir/1.xpath
|
cat <<EOF > $dir/1.xpath
|
||||||
*<-9****
|
*<-9****
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
new "negative xpath 8"
|
new "negative xpath 8"
|
||||||
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y /usr/local/share/clixon/clixon-example@${CLIXON_EXAMPLE_REV}.yang -Y /usr/local/share/clixon < $dir/1.xpath)" 0 "bool:false"
|
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y $fyang < $dir/1.xpath)" 0 "bool:false"
|
||||||
|
|
||||||
|
# PART 3
|
||||||
|
|
||||||
|
|
||||||
|
cat <<EOF > $dir/1.xpath
|
||||||
|
/table/parameter[name='x']/name
|
||||||
|
EOF
|
||||||
|
|
||||||
|
new "given key show key"
|
||||||
|
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y $fyang < $dir/1.xpath)" 0 "<name>x</name>"
|
||||||
|
|
||||||
|
cat <<EOF > $dir/1.xpath
|
||||||
|
/table/parameter[name='x']/value
|
||||||
|
EOF
|
||||||
|
|
||||||
|
new "given key show value"
|
||||||
|
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y $fyang < $dir/1.xpath)" 0 "<value>42</value>"
|
||||||
|
|
||||||
|
cat <<EOF > $dir/1.xpath
|
||||||
|
/table/parameter[value='42']/name
|
||||||
|
EOF
|
||||||
|
|
||||||
|
new "given value show key"
|
||||||
|
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y $fyang < $dir/1.xpath)" 0 "<name>x</name>"
|
||||||
|
|
||||||
|
|
||||||
|
cat <<EOF > $dir/1.xpath
|
||||||
|
/table/parameter[value='42']/value
|
||||||
|
EOF
|
||||||
|
|
||||||
|
new "given value show value"
|
||||||
|
expectpart "$($clixon_util_xpath -D $DBG -f $dir/1.xml -n ex:urn:example:clixon -y $fyang < $dir/1.xpath)" 0 "<value>42</value>"
|
||||||
|
|
||||||
rm -rf $dir
|
rm -rf $dir
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue