Fixed: [Issues with ietf-snmp modules](https://github.com/clicon/clixon/issues/353)
This commit is contained in:
parent
74da966096
commit
9a5504eed0
5 changed files with 136 additions and 3 deletions
|
|
@ -46,6 +46,7 @@ Expected: September 2022
|
|||
|
||||
### Corrected Bugs
|
||||
|
||||
* Fixed: [Issues with ietf-snmp modules](https://github.com/clicon/clixon/issues/353)
|
||||
* Fixed: [Missing/no namespace error in YANG augments with default values](https://github.com/clicon/clixon/issues/354)
|
||||
* Fixed: [Validation of mandatory in choice/case does not work in some cases](https://github.com/clicon/clixon/issues/349)
|
||||
|
||||
|
|
|
|||
|
|
@ -66,6 +66,11 @@
|
|||
#define YANG_FLAG_CONFIG_VALUE 0x20 /* Ancestor config cache value */
|
||||
#endif
|
||||
|
||||
#define YANG_FLAG_DISABLED 0x40 /* Disabled due to if-feature evaluate to false
|
||||
* Transformed to ANYDATA but some code may need to check
|
||||
* why it is an ANYDATA
|
||||
*/
|
||||
|
||||
/*
|
||||
* Types
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -2789,7 +2789,7 @@ ys_populate2(yang_stmt *ys,
|
|||
* @retval -1 Error
|
||||
* @retval 0 Feature not enabled: remove yt
|
||||
* @retval 1 OK
|
||||
* @note On return 1 the over-lying function need to remove yt from its parent
|
||||
* @note On return 0 the over-lying function need to remove yt from its parent
|
||||
* @note cannot use yang_apply here since child-list is modified (destructive)
|
||||
* @note if-features is parsed in full context here, previous restricted pass in ys_parse_sub
|
||||
*/
|
||||
|
|
@ -2835,6 +2835,7 @@ yang_features(clicon_handle h,
|
|||
ys->ys_keyword = Y_ANYDATA;
|
||||
ys_freechildren(ys);
|
||||
ys->ys_len = 0;
|
||||
yang_flag_set(ys, YANG_FLAG_DISABLED);
|
||||
break;
|
||||
}
|
||||
for (j=i+1; j<yt->ys_len; j++)
|
||||
|
|
|
|||
|
|
@ -289,10 +289,13 @@ yang_augment_node(clicon_handle h,
|
|||
if (childkey != Y_ACTION && childkey != Y_NOTIFICATION && childkey != Y_UNKNOWN &&
|
||||
childkey != Y_CONTAINER && childkey != Y_LEAF && childkey != Y_LIST &&
|
||||
childkey != Y_LEAF_LIST && childkey != Y_USES && childkey != Y_CHOICE){
|
||||
clicon_log(LOG_WARNING, "Warning: Augment failed in module %s: node %s %d cannot be added to target node %s",
|
||||
/* Special case if yc0 is disabled by if-feature=false, then it is transformed to ANYDATA
|
||||
*/
|
||||
if (yang_flag_get(yc0, YANG_FLAG_DISABLED) == 0)
|
||||
clicon_log(LOG_WARNING, "Warning: Augment failed in module %s: node %s of type %s cannot be added to target node %s (see RFC 7950 Sec 17)",
|
||||
yang_argument_get(ys_module(ys)),
|
||||
yang_argument_get(yc0),
|
||||
yang_key2str(childkey),
|
||||
childkey,
|
||||
schema_nodeid);
|
||||
goto ok;
|
||||
}
|
||||
|
|
|
|||
123
test/test_augment_default.sh
Executable file
123
test/test_augment_default.sh
Executable file
|
|
@ -0,0 +1,123 @@
|
|||
#!/usr/bin/env bash
|
||||
# yang augment and default values
|
||||
# See https://github.com/clicon/clixon/issues/354
|
||||
#
|
||||
# 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/augment.yang
|
||||
fyang2=$dir/example.yang
|
||||
|
||||
cat <<EOF > $cfg
|
||||
<clixon-config xmlns="http://clicon.org/config">
|
||||
<CLICON_CONFIGFILE>$cfg</CLICON_CONFIGFILE>
|
||||
<CLICON_FEATURE>ietf-netconf:startup</CLICON_FEATURE>
|
||||
<CLICON_YANG_DIR>$dir</CLICON_YANG_DIR>
|
||||
<CLICON_YANG_DIR>${YANG_INSTALLDIR}</CLICON_YANG_DIR>
|
||||
<CLICON_YANG_MAIN_FILE>$fyang</CLICON_YANG_MAIN_FILE>
|
||||
<CLICON_CLISPEC_DIR>/usr/local/lib/$APPNAME/clispec</CLICON_CLISPEC_DIR>
|
||||
<CLICON_CLI_DIR>/usr/local/lib/$APPNAME/cli</CLICON_CLI_DIR>
|
||||
<CLICON_CLI_MODE>$APPNAME</CLICON_CLI_MODE>
|
||||
<CLICON_SOCK>/usr/local/var/$APPNAME/$APPNAME.sock</CLICON_SOCK>
|
||||
<CLICON_BACKEND_PIDFILE>/usr/local/var/$APPNAME/$APPNAME.pidfile</CLICON_BACKEND_PIDFILE>
|
||||
<CLICON_XMLDB_DIR>$dir</CLICON_XMLDB_DIR>
|
||||
<CLICON_YANG_LIBRARY>true</CLICON_YANG_LIBRARY>
|
||||
</clixon-config>
|
||||
EOF
|
||||
|
||||
cat <<EOF > $fyang2
|
||||
module example {
|
||||
yang-version 1.1;
|
||||
namespace "urn:example:clixon";
|
||||
prefix ex;
|
||||
revision "2019-03-04";
|
||||
container table{
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
cat <<EOF > $fyang
|
||||
module augment {
|
||||
yang-version 1.1;
|
||||
namespace "urn:example:augment";
|
||||
prefix aug;
|
||||
import example {
|
||||
prefix ex;
|
||||
}
|
||||
revision "2019-03-04";
|
||||
augment "/ex:table" {
|
||||
container map{
|
||||
leaf name{
|
||||
type string;
|
||||
}
|
||||
leaf enable {
|
||||
type boolean;
|
||||
default true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EOF
|
||||
|
||||
cat <<EOF > $dir/startup_db
|
||||
<${DATASTORE_TOP}>
|
||||
<table xmlns="urn:example:clixon">
|
||||
<map xmlns="urn:example:augment">
|
||||
<name>me</name>
|
||||
</map>
|
||||
</table>
|
||||
</${DATASTORE_TOP}>
|
||||
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 startup -f $cfg"
|
||||
start_backend -s startup -f $cfg
|
||||
fi
|
||||
|
||||
new "wait backend"
|
||||
wait_backend
|
||||
|
||||
new "cli show config startup"
|
||||
#expectpart "$($clixon_cli -1 -f $cfg -l o show config xml)" 0 '<table xmlns="urn:example:clixon">' '<map xmlns="urn:example:augment">' '<aug:enable xmlns:aug="urn:example:augment">true</aug:enable>'
|
||||
expectpart "$($clixon_cli -1 -f $cfg -l o show config xml)" 0 '<table xmlns="urn:example:clixon">' '<map xmlns="urn:example:augment">' '<enable>true</enable>'
|
||||
|
||||
new "cli delete map name"
|
||||
expectpart "$($clixon_cli -1 -f $cfg -l o delete table map name me)" 0 ""
|
||||
|
||||
new "cli show config deleted"
|
||||
#expectpart "$($clixon_cli -1 -f $cfg -l o show config xml)" 0 '<table xmlns="urn:example:clixon">' '<aug:map xmlns:aug="urn:example:augment">' '<aug:enable>true</aug:enable>'
|
||||
expectpart "$($clixon_cli -1 -f $cfg -l o show config xml)" 0 '<table xmlns="urn:example:clixon">' '<map xmlns="urn:example:augment">' '<enable>true</enable>'
|
||||
|
||||
new "cli set map name"
|
||||
expectpart "$($clixon_cli -1 -f $cfg -l o set table map name x)" 0 ""
|
||||
|
||||
new "cli show config set"
|
||||
#expectpart "$($clixon_cli -1 -f $cfg -l o show config xml)" 0 '<table xmlns="urn:example:clixon">' '<map xmlns="urn:example:augment">' '<aug:enable xmlns:aug="urn:example:augment">true</aug:enable>'
|
||||
expectpart "$($clixon_cli -1 -f $cfg -l o show config xml)" 0 '<table xmlns="urn:example:clixon">' '<map xmlns="urn:example:augment">' '<enable>true</enable>'
|
||||
|
||||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue