System-only config: Source of truth
Candidate, fix system-only in cache when locked or modified, re-read otherwise Remove system-only from cache after commit
This commit is contained in:
parent
cfa4803e0f
commit
313a2caadd
16 changed files with 189 additions and 78 deletions
|
|
@ -133,6 +133,7 @@ EOF
|
|||
new "check datastore using netconf"
|
||||
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><get-config><source><candidate/></source><filter type=\"xpath\" select=\"/ex:table/ex:parameter[ex:name='x']\" xmlns:ex=\"urn:example:clixon\" /></get-config></rpc>" "" "<rpc-reply $DEFAULTNS><data>$XML</data></rpc-reply>"
|
||||
|
||||
sudo chmod a+r $dir/candidate_db
|
||||
new "check datastore direct access"
|
||||
expectpart "$($clixon_util_datastore -d candidate -b $dir -y $fyang -Y ${YANG_INSTALLDIR} -Y $dir get /)" 0 "$XML"
|
||||
|
||||
|
|
|
|||
|
|
@ -276,6 +276,56 @@ check_db running true xml
|
|||
new "Get mydata from running"
|
||||
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><get-config><source><running/></source></get-config></rpc>" "<rpc-reply $DEFAULTNS><data><store xmlns=\"urn:example:std\"><keys><key><name>a</name><system-only-data>mydata</system-only-data><normal-data>otherdata</normal-data></key></keys></store></data></rpc-reply>"
|
||||
|
||||
new "Get mydata from candidate"
|
||||
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><get-config><source><running/></source></get-config></rpc>" "<rpc-reply $DEFAULTNS><data><store xmlns=\"urn:example:std\"><keys><key><name>a</name><system-only-data>mydata</system-only-data><normal-data>otherdata</normal-data></key></keys></store></data></rpc-reply>"
|
||||
|
||||
new "Source-of-truth: modify system-only"
|
||||
sudo chmod 666 $dir/system-only.xml
|
||||
cat <<EOF > $dir/system-only.xml
|
||||
<store xmlns="urn:example:std">
|
||||
<keys>
|
||||
<key>
|
||||
<name>a</name>
|
||||
<system-only-data>CHANGED</system-only-data>
|
||||
</key>
|
||||
</keys>
|
||||
</store>
|
||||
EOF
|
||||
|
||||
new "Get mydata from candidate again"
|
||||
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><get-config><source><candidate/></source></get-config></rpc>" "<rpc-reply $DEFAULTNS><data><store xmlns=\"urn:example:std\"><keys><key><name>a</name><system-only-data>CHANGED</system-only-data><normal-data>otherdata</normal-data></key></keys></store></data></rpc-reply>"
|
||||
|
||||
new "Restore original"
|
||||
cp $dir/y_db $dir/system-only.xml
|
||||
|
||||
new "Get mydata from candidate again"
|
||||
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><get-config><source><running/></source></get-config></rpc>" "<rpc-reply $DEFAULTNS><data><store xmlns=\"urn:example:std\"><keys><key><name>a</name><system-only-data>mydata</system-only-data><normal-data>otherdata</normal-data></key></keys></store></data></rpc-reply>"
|
||||
|
||||
new "Source-of-truth: modify system-only, then edit"
|
||||
cat <<EOF > $dir/system-only.xml
|
||||
<store xmlns="urn:example:std">
|
||||
<keys>
|
||||
<key>
|
||||
<name>a</name>
|
||||
<system-only-data>CHANGED</system-only-data>
|
||||
</key>
|
||||
</keys>
|
||||
</store>
|
||||
EOF
|
||||
|
||||
new "Add normal data"
|
||||
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><edit-config><target><candidate/></target><config><store xmlns=\"urn:example:std\"><keys><key><name>a</name><normal-data>otherdata2</normal-data></key></keys></store></config></edit-config></rpc>" "<rpc-reply $DEFAULTNS><ok/></rpc-reply>"
|
||||
|
||||
new "Get mydata from candidate expect CHANGED"
|
||||
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><get-config><source><candidate/></source></get-config></rpc>" "<rpc-reply $DEFAULTNS><data><store xmlns=\"urn:example:std\"><keys><key><name>a</name><system-only-data>CHANGED</system-only-data><normal-data>otherdata2</normal-data></key></keys></store></data></rpc-reply>"
|
||||
|
||||
new "Restore original"
|
||||
cp $dir/y_db $dir/system-only.xml
|
||||
|
||||
new "Discard"
|
||||
new "netconf discard-changes"
|
||||
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><discard-changes/></rpc>" "" "<rpc-reply $DEFAULTNS><ok/></rpc-reply>"
|
||||
|
||||
new "Remove mydata"
|
||||
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><edit-config><target><candidate/></target><config><store xmlns=\"urn:example:std\"><keys><key><name>a</name><system-only-data nc:operation=\"delete\" xmlns:nc=\"${BASENS}\">mydata</system-only-data></key></keys></store></config><default-operation>none</default-operation></edit-config></rpc>" "<rpc-reply $DEFAULTNS><ok/></rpc-reply>"
|
||||
|
||||
|
|
@ -419,7 +469,7 @@ fi
|
|||
new "wait restconf"
|
||||
wait_restconf
|
||||
|
||||
new "Add mydata"
|
||||
new "Add system-only data"
|
||||
expectpart "$(curl $CURLOPTS -X POST -H "Content-Type: application/yang-data+json" -d '{"clixon-standard:store":{"keys":{"key":[{"name":"a","system-only-data":"mydata"}]}}}' $RCPROTO://localhost/restconf/data)" 0 "HTTP/$HVER 201"
|
||||
|
||||
new "Add normal data"
|
||||
|
|
|
|||
|
|
@ -97,30 +97,9 @@ wait_backend
|
|||
# clixon_cli < $dir/cli1 &
|
||||
# echo "show devices" > $dir/cli1
|
||||
|
||||
if false; then
|
||||
mkfifo $dir/cli1
|
||||
# cat > $dir/cli1 &
|
||||
$clixon_cli -f $cfg < $dir/cli1 &
|
||||
new "cli 1st edit async"
|
||||
echo "set table parameter x value a" > $dir/cli1
|
||||
jobs -l %
|
||||
PIDS=($(jobs -l % | cut -c 6- | awk '{print $1}'))
|
||||
# echo "PIDS:$PIDS"
|
||||
|
||||
new "cli 2nd edit expect fail"
|
||||
expectpart "$($clixon_cli -1f $cfg set table parameter y value b 2>&1)" 255 "lock-denied" "lock is already held"
|
||||
|
||||
kill ${PIDS[0]} # kill the while loop above to close STDIN on 1st
|
||||
wait
|
||||
|
||||
new "cli 3rd edit expect ok"
|
||||
expectpart "$($clixon_cli -1f $cfg set table parameter z value c)" 0 "^$"
|
||||
else
|
||||
new "cli 1st edit async"
|
||||
sleep 60 | expectpart "$($clixon_cli -f $cfg set table parameter x value a)" 0 "" &
|
||||
if [ $valgrindtest -eq 1 ]; then
|
||||
sleep 1
|
||||
fi
|
||||
sleep 1
|
||||
PIDS=($(jobs -l % | cut -c 6- | awk '{print $1}'))
|
||||
|
||||
new "cli 2nd edit expect fail"
|
||||
|
|
@ -152,7 +131,7 @@ PIDS=($(jobs -l % | cut -c 6- | awk '{print $1}'))
|
|||
|
||||
new "cli edit 2nd expected ok"
|
||||
expectpart "$($clixon_cli -1f $cfg set table parameter x value a)" 0 "^$"
|
||||
fi
|
||||
|
||||
if [ $BE -ne 0 ]; then
|
||||
new "Kill backend"
|
||||
# Check if premature kill
|
||||
|
|
|
|||
|
|
@ -377,9 +377,7 @@ expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<xx:rpc xmlns:xx
|
|||
|
||||
new "asynchronous lock running"
|
||||
sleep 60 | cat <(echo "$HELLONO11<rpc $DEFAULTNS><lock><target><running/></target></lock></rpc>]]>]]>") -| $clixon_netconf -qf $cfg >> /dev/null &
|
||||
if [ $valgrindtest -eq 1 ]; then
|
||||
sleep 1
|
||||
fi
|
||||
sleep 1
|
||||
PIDS=($(jobs -l % | cut -c 6- | awk '{print $1}'))
|
||||
|
||||
new "try commit should fail"
|
||||
|
|
@ -415,7 +413,7 @@ expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS>
|
|||
new "netconf lock"
|
||||
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><lock><target><candidate/></target></lock></rpc>" "" "<rpc-reply $DEFAULTNS><ok/></rpc-reply>"
|
||||
|
||||
new "copy startup to candidate"
|
||||
new "copy candidate to startup"
|
||||
expecteof_netconf "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO" "<rpc $DEFAULTNS><copy-config><target><startup/></target><source><candidate/></source></copy-config></rpc>" "" "<rpc-reply $DEFAULTNS><ok/></rpc-reply>"
|
||||
|
||||
new "copy startup to candidate using prefix xx"
|
||||
|
|
|
|||
|
|
@ -110,7 +110,8 @@ function testrun(){
|
|||
echo -n " /proc/$pid/statm: "
|
||||
cat /proc/$pid/statm|awk '{print $1*4/1000 "M"}'
|
||||
fi
|
||||
for db in running candidate startup; do
|
||||
dbs="running candidate startup";
|
||||
for db in $dbs; do
|
||||
echo "$db"
|
||||
resdb0=$(echo "$res" | $clixon_util_xpath -p "/rpc-reply/datastores/datastore[name=\"$db\"]")
|
||||
resdb=${resdb0#"nodeset:0:"}
|
||||
|
|
|
|||
|
|
@ -172,8 +172,8 @@ expectpart "$(curl $CURLOPTS -X DELETE $RCPROTO://localhost/restconf/data)" 0 "H
|
|||
new "restconf GET null datastore"
|
||||
expectpart "$(curl $CURLOPTS -X GET $RCPROTO://localhost/restconf/data/example:cont1)" 0 "HTTP/$HVER 404" '{"ietf-restconf:errors":{"error":{"error-type":"application","error-tag":"invalid-value","error-severity":"error","error-message":"Instance does not exist"}}}'
|
||||
|
||||
new "restconf PUT initial datastore"
|
||||
expectpart "$(curl $CURLOPTS -X PUT -H "Content-Type: application/yang-data+json" -d '{"ietf-restconf:data":{"example:cont1":{"interface":{"name":"local0","type":"regular"}}}}' $RCPROTO://localhost/restconf/data)" 0 "HTTP/$HVER 204" # 201 Created (new resource) -> 204 No Content (existing modified)
|
||||
new "restconf PUT initial datastore"
|
||||
expectpart "$(curl $CURLOPTS -X PUT -H "Content-Type: application/yang-data+json" -d '{"ietf-restconf:data":{"example:cont1":{"interface":{"name":"local0","type":"regular"}}}}' $RCPROTO://localhost/restconf/data)" 0 "HTTP/$HVER 201" # 201 Created (new resource) -> 204 No Content (existing modified)
|
||||
|
||||
new "restconf GET datastore"
|
||||
expectpart "$(curl $CURLOPTS -X GET $RCPROTO://localhost/restconf/data/example:cont1)" 0 "HTTP/$HVER 200" '{"example:cont1":{"interface":\[{"name":"local0","type":"regular"}\]}}'
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue