diff --git a/doc/FAQ.md b/doc/FAQ.md index ff0ed3a1..f15ee42c 100644 --- a/doc/FAQ.md +++ b/doc/FAQ.md @@ -486,7 +486,7 @@ limitations. See the (README)(../README.md) for more information. ## How do I write a CLI translator function? The CLI can perform variable translation. This is useful if you want to -prcess the input, such as hashing, encrypting or in other way +process the input, such as hashing, encrypting or in other way translate the input. Yang example: diff --git a/test/lib.sh b/test/lib.sh index feac39c1..1f0a8107 100755 --- a/test/lib.sh +++ b/test/lib.sh @@ -87,12 +87,6 @@ new(){ testname=$1 >&2 echo "Test$testnr [$1]" } -# No CR -new2(){ - testnr=`expr $testnr + 1` - testname=$1 - >&2 echo -n "Test$testnr [$1]" -} # clixon command tester. # Arguments: @@ -158,9 +152,7 @@ expecteq(){ if [ -z "$ret" -a -z "$expect" ]; then return fi - if [[ "$ret" = "$expect" ]]; then - echo - else + if [[ "$ret" != "$expect" ]]; then err "$expect" "$ret" fi } diff --git a/test/test_choice.sh b/test/test_choice.sh index 373bf835..e1ca5ff9 100755 --- a/test/test_choice.sh +++ b/test/test_choice.sh @@ -139,7 +139,7 @@ expecteof "$clixon_netconf -qf $cfg -y $fyang" 0 "]]>]]>" "^ new "restconf set protocol tcp" expecteq "$(curl -s -X PUT http://localhost/restconf/data/system:system/protocol -d {\"system:protocol\":{\"tcp\":null}})" "" -new2 "restconf get protocol tcp" +new "restconf get protocol tcp" expecteq "$(curl -s -X GET http://localhost/restconf/data/system:system)" '{"system:system": {"protocol": {"tcp": null}}} ' diff --git a/test/test_nacm.sh b/test/test_nacm.sh index dd0bab2e..cc968e82 100755 --- a/test/test_nacm.sh +++ b/test/test_nacm.sh @@ -131,7 +131,7 @@ sudo su -c "$clixon_restconf -f $cfg -D $DBG -- -a" -s /bin/sh www-data & sleep $RCWAIT -new2 "auth get" +new "auth get" expecteq "$(curl -u andy:bar -sS -X GET http://localhost/restconf/data/nacm-example:x)" 'null ' @@ -141,13 +141,13 @@ expecteof "$clixon_netconf -qf $cfg" 0 "]]>]]>" "^]]>]]>$" -new2 "auth get (no user: access denied)" +new "auth get (no user: access denied)" expecteq "$(curl -sS -X GET -H \"Accept:\ application/yang-data+json\" http://localhost/restconf/data)" '{"ietf-restconf:errors" : {"error": {"error-type": "protocol","error-tag": "access-denied","error-severity": "error","error-message": "The requested URL was unauthorized"}}} ' -new2 "auth get (wrong passwd: access denied)" +new "auth get (wrong passwd: access denied)" expecteq "$(curl -u andy:foo -sS -X GET http://localhost/restconf/data)" '{"ietf-restconf:errors" : {"error": {"error-type": "protocol","error-tag": "access-denied","error-severity": "error","error-message": "The requested URL was unauthorized"}}} ' -new2 "auth get (access)" +new "auth get (access)" expecteq "$(curl -u andy:bar -sS -X GET http://localhost/restconf/data/nacm-example:x)" '{"nacm-example:x": 0} ' @@ -156,24 +156,24 @@ expecteq "$(curl -u andy:bar -sS -X GET http://localhost/restconf/data/nacm-exam new "enable nacm" expecteq "$(curl -u andy:bar -sS -X PUT -d '{"ietf-netconf-acm:enable-nacm": true}' http://localhost/restconf/data/ietf-netconf-acm:nacm/enable-nacm)" "" -new2 "admin get nacm" +new "admin get nacm" expecteq "$(curl -u andy:bar -sS -X GET http://localhost/restconf/data/nacm-example:x)" '{"nacm-example:x": 0} ' -new2 "limited get nacm" +new "limited get nacm" expecteq "$(curl -u wilma:bar -sS -X GET http://localhost/restconf/data/nacm-example:x)" '{"nacm-example:x": 0} ' -new2 "guest get nacm" +new "guest get nacm" expecteq "$(curl -u guest:bar -sS -X GET http://localhost/restconf/data/nacm-example:x)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "access denied"}}} ' new "admin edit nacm" expecteq "$(curl -u andy:bar -sS -X PUT -d '{"nacm-example:x": 1}' http://localhost/restconf/data/nacm-example:x)" "" -new2 "limited edit nacm" +new "limited edit nacm" expecteq "$(curl -u wilma:bar -sS -X PUT -d '{"nacm-example:x": 2}' http://localhost/restconf/data/nacm-example:x)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "default deny"}}} ' -new2 "guest edit nacm" +new "guest edit nacm" expecteq "$(curl -u guest:bar -sS -X PUT -d '{"nacm-example:x": 3}' http://localhost/restconf/data/nacm-example:x)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "access denied"}}} ' new "Kill restconf daemon" diff --git a/test/test_nacm_ext.sh b/test/test_nacm_ext.sh index ce337a0c..abc5f410 100755 --- a/test/test_nacm_ext.sh +++ b/test/test_nacm_ext.sh @@ -151,41 +151,41 @@ sudo su -c "$clixon_restconf -f $cfg -D $DBG -- -a" -s /bin/sh www-data & sleep $RCWAIT -new2 "auth get" +new "auth get" expecteq "$(curl -u andy:bar -sS -X GET http://localhost/restconf/data/clixon-example:state)" '{"clixon-example:state": {"op": "42"}} ' new "Set x to 0" expecteq "$(curl -u andy:bar -sS -X PUT -d '{"nacm-example:x": 0}' http://localhost/restconf/data/nacm-example:x)" "" -new2 "auth get (no user: access denied)" +new "auth get (no user: access denied)" expecteq "$(curl -sS -X GET -H \"Accept:\ application/yang-data+json\" http://localhost/restconf/data)" '{"ietf-restconf:errors" : {"error": {"error-type": "protocol","error-tag": "access-denied","error-severity": "error","error-message": "The requested URL was unauthorized"}}} ' -new2 "auth get (wrong passwd: access denied)" +new "auth get (wrong passwd: access denied)" expecteq "$(curl -u andy:foo -sS -X GET http://localhost/restconf/data)" '{"ietf-restconf:errors" : {"error": {"error-type": "protocol","error-tag": "access-denied","error-severity": "error","error-message": "The requested URL was unauthorized"}}} ' -new2 "auth get (access)" +new "auth get (access)" expecteq "$(curl -u andy:bar -sS -X GET http://localhost/restconf/data/nacm-example:x)" '{"nacm-example:x": 0} ' -new2 "admin get nacm" +new "admin get nacm" expecteq "$(curl -u andy:bar -sS -X GET http://localhost/restconf/data/nacm-example:x)" '{"nacm-example:x": 0} ' -new2 "limited get nacm" +new "limited get nacm" expecteq "$(curl -u wilma:bar -sS -X GET http://localhost/restconf/data/nacm-example:x)" '{"nacm-example:x": 0} ' -new2 "guest get nacm" +new "guest get nacm" expecteq "$(curl -u guest:bar -sS -X GET http://localhost/restconf/data/nacm-example:x)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "access denied"}}} ' new "admin edit nacm" expecteq "$(curl -u andy:bar -sS -X PUT -d '{"nacm-example:x": 1}' http://localhost/restconf/data/nacm-example:x)" "" -new2 "limited edit nacm" +new "limited edit nacm" expecteq "$(curl -u wilma:bar -sS -X PUT -d '{"x": 2}' http://localhost/restconf/data/nacm-example:x)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "default deny"}}} ' -new2 "guest edit nacm" +new "guest edit nacm" expecteq "$(curl -u guest:bar -sS -X PUT -d '{"x": 3}' http://localhost/restconf/data/nacm-example:x)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "access denied"}}} ' new "cli show conf as admin" diff --git a/test/test_nacm_module_read.sh b/test/test_nacm_module_read.sh index 6dfc74c5..252bfd31 100755 --- a/test/test_nacm_module_read.sh +++ b/test/test_nacm_module_read.sh @@ -159,22 +159,22 @@ expecteq "$(curl -u andy:bar -sS -X PUT -d '{"enable-nacm": true}' http://localh #----READ access #user:admin -new2 "admin read ok" +new "admin read ok" expecteq "$(curl -u andy:bar -sS -X GET http://localhost/restconf/data/clixon-example:translate)" '{"clixon-example:translate": [{"k": "key42","value": "val42"},{ "k": "key43","value": "val43"}]} ' -new2 "admin read netconf ok" +new "admin read netconf ok" expecteof "$clixon_netconf -U andy -qf $cfg" 0 ']]>]]>' '^key42val42key43val43]]>]]>$' -new2 "admin read element ok" +new "admin read element ok" expecteq "$(curl -u andy:bar -sS -X GET http://localhost/restconf/data/clixon-example:translate=key42/value)" '{"clixon-example:value": "val42"} ' -new2 "admin read other module OK" +new "admin read other module OK" expecteq "$(curl -u andy:bar -sS -X GET http://localhost/restconf/data/nacm-example:x)" '{"nacm-example:x": 42} ' -new2 "admin read state OK" +new "admin read state OK" expecteq "$(curl -u andy:bar -sS -X GET http://localhost/restconf/data/clixon-example:state)" '{"clixon-example:state": {"op": "42"}} ' @@ -188,66 +188,66 @@ fi #user:limit -new2 "limit read ok" +new "limit read ok" expecteq "$(curl -u wilma:bar -sS -X GET http://localhost/restconf/data/clixon-example:translate)" '{"clixon-example:translate": [{"k": "key42","value": "val42"},{ "k": "key43","value": "val43"}]} ' -new2 "limit read netconf ok" +new "limit read netconf ok" expecteof "$clixon_netconf -U wilma -qf $cfg" 0 ']]>]]>' '^key42val42key43val43]]>]]>$' -new2 "limit read element ok" +new "limit read element ok" expecteq "$(curl -u wilma:bar -sS -X GET http://localhost/restconf/data/clixon-example:translate=key42/value)" '{"clixon-example:value": "val42"} ' -new2 "limit read other module fail" +new "limit read other module fail" expecteq "$(curl -u wilma:bar -sS -X GET http://localhost/restconf/data/nacm-example:x)" 'null ' -new2 "limit read state OK" +new "limit read state OK" expecteq "$(curl -u wilma:bar -sS -X GET http://localhost/restconf/data/clixon-example:state)" '{"clixon-example:state": {"op": "42"}} ' -new2 "limit read top ok (part)" +new "limit read top ok (part)" expecteq "$(curl -u wilma:bar -sS -X GET http://localhost/restconf/data)" '{"data": {"clixon-example:translate": [{"k": "key42","value": "val42"},{ "k": "key43","value": "val43"}],"clixon-example:state": {"op": "42"}}} ' #user:guest -new2 "guest read fail" +new "guest read fail" expecteq "$(curl -u guest:bar -sS -X GET http://localhost/restconf/data/clixon-example:translate)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "default deny"}}} ' -new2 "guest read netconf fail" +new "guest read netconf fail" expecteof "$clixon_netconf -U guest -qf $cfg" 0 ']]>]]>' '^applicationaccess-deniederrordefault deny]]>]]>$' -new2 "guest read element fail" +new "guest read element fail" expecteq "$(curl -u guest:bar -sS -X GET http://localhost/restconf/data/clixon-example:translate=key42/value)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "default deny"}}} ' -new2 "guest read other module fail" +new "guest read other module fail" expecteq "$(curl -u guest:bar -sS -X GET http://localhost/restconf/data/nacm-example:x)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "default deny"}}} ' -new2 "guest read state fail" +new "guest read state fail" expecteq "$(curl -u guest:bar -sS -X GET http://localhost/restconf/data/clixon-example:state)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "default deny"}}} ' -new2 "guest read top ok (part)" +new "guest read top ok (part)" expecteq "$(curl -u guest:bar -sS -X GET http://localhost/restconf/data)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "default deny"}}} ' #------- RPC operation -new2 "admin rpc ok" +new "admin rpc ok" expecteq "$(curl -u andy:bar -s -X POST -d '{"clixon-example:input":{"x":42}}' http://localhost/restconf/operations/clixon-example:example)" '{"clixon-example:output": {"x": "42","y": "42"}} ' new "admin rpc netconf ok" expecteof "$clixon_netconf -U andy -qf $cfg" 0 '0]]>]]>' '^042]]>]]>$' -new2 "limit rpc ok" +new "limit rpc ok" expecteq "$(curl -u wilma:bar -s -X POST http://localhost/restconf/operations/clixon-example:example -d '{"clixon-example:input":{"x":42}}' )" '{"clixon-example:output": {"x": "42","y": "42"}} ' new "limit rpc netconf ok" expecteof "$clixon_netconf -U wilma -qf $cfg" 0 '0]]>]]>' '^042]]>]]>$' -new2 "guest rpc fail" +new "guest rpc fail" expecteq "$(curl -u guest:bar -s -X POST http://localhost/restconf/operations/clixon-example:example -d '{"clixon-example:input":{"x":42}}' )" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "access denied"}}} ' new "guest rpc netconf fail" @@ -258,15 +258,15 @@ expecteof "$clixon_netconf -U guest -qf $cfg" 0 '42$RULES')" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "default deny"}}} ' # replace all, then must include NACM rules as well @@ -184,7 +184,7 @@ MSG="$RULES" new "update root list permit" expecteq "$(curl -u andy:bar -sS -H 'Content-Type: application/yang-data+xml' -X PUT http://localhost/restconf/data -d "$MSG")" '' -new2 "delete root list deny" +new "delete root list deny" expecteq "$(curl -u wilma:bar -sS -X DELETE http://localhost/restconf/data)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "default deny"}}} ' new "delete root permit" @@ -194,62 +194,62 @@ expecteq "$(curl -u andy:bar -sS -X DELETE http://localhost/restconf/data)" '' nacm #----------leaf -new2 "create leaf deny" +new "create leaf deny" expecteq "$(curl -u guest:bar -sS -H 'Content-Type: application/yang-data+xml' -X PUT http://localhost/restconf/data/nacm-example:x -d '42')" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "access denied"}}} ' new "create leaf permit" expecteq "$(curl -u wilma:bar -sS -H 'Content-Type: application/yang-data+xml' -X PUT http://localhost/restconf/data/nacm-example:x -d '42')" '' -new2 "update leaf deny" +new "update leaf deny" expecteq "$(curl -u wilma:bar -sS -H 'Content-Type: application/yang-data+xml' -X PUT http://localhost/restconf/data/nacm-example:x -d '99')" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "access denied"}}} ' new "update leaf permit" expecteq "$(curl -u guest:bar -sS -H 'Content-Type: application/yang-data+xml' -X PUT http://localhost/restconf/data/nacm-example:x -d '99')" '' -new2 "read leaf check" +new "read leaf check" expecteq "$(curl -u guest:bar -sS -X GET http://localhost/restconf/data/nacm-example:x)" '{"nacm-example:x": 99} ' -new2 "delete leaf deny" +new "delete leaf deny" expecteq "$(curl -u guest:bar -sS -X DELETE http://localhost/restconf/data/nacm-example:x)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "access denied"}}} ' new "delete leaf permit" expecteq "$(curl -u wilma:bar -sS -X DELETE http://localhost/restconf/data/nacm-example:x)" '' #----- list/container -new2 "create list deny" +new "create list deny" expecteq "$(curl -u guest:bar -sS -H 'Content-Type: application/yang-data+xml' -X PUT http://localhost/restconf/data/nacm-example:a=key42 -d 'key42str')" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "access denied"}}} ' new "create list permit" expecteq "$(curl -u wilma:bar -sS -H 'Content-Type: application/yang-data+xml' -X PUT http://localhost/restconf/data/nacm-example:a=key42 -d 'key42str')" '' -new2 "update list deny" +new "update list deny" expecteq "$(curl -u wilma:bar -sS -H 'Content-Type: application/yang-data+xml' -X PUT http://localhost/restconf/data/nacm-example:a=key42 -d 'key42update')" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "access denied"}}} ' new "update list permit" expecteq "$(curl -u guest:bar -sS -H 'Content-Type: application/yang-data+xml' -X PUT http://localhost/restconf/data/nacm-example:a=key42 -d 'key42update')" '' -new2 "read list check" +new "read list check" expecteq "$(curl -u guest:bar -sS -X GET http://localhost/restconf/data/nacm-example:a)" '{"nacm-example:a": [{"k": "key42","b": {"c": "update"}}]} ' -new2 "delete list deny" +new "delete list deny" expecteq "$(curl -u guest:bar -sS -X DELETE http://localhost/restconf/data/nacm-example:a=key42)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "access denied"}}} ' new "delete list permit" expecteq "$(curl -u wilma:bar -sS -X DELETE http://localhost/restconf/data/nacm-example:a=key42)" '' #----- default deny (clixon-example limit and guest have default access) -new2 "default create list deny" +new "default create list deny" expecteq "$(curl -u wilma:bar -sS -X PUT http://localhost/restconf/data/clixon-example:translate=key42 -d '{"clixon-example:translate": [{"k": "key42","value": "val42"}]}')" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "default deny"}}} ' -new2 "create list permit" +new "create list permit" expecteq "$(curl -u andy:bar -sS -X PUT http://localhost/restconf/data/clixon-example:translate=key42 -d '{"clixon-example:translate": [{"k": "key42","value": "val42"}]}')" '' -new2 "default update list deny" +new "default update list deny" expecteq "$(curl -u wilma:bar -sS -X PUT http://localhost/restconf/data/clixon-example:translate=key42 -d '{"clixon-example:translate": [{"k": "key42","value": "val99"}]}')" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "default deny"}}} ' -new2 "default delete list deny" +new "default delete list deny" expecteq "$(curl -u wilma:bar -sS -X DELETE http://localhost/restconf/data/clixon-example:translate=key42)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "default deny"}}} ' new "Kill restconf daemon" diff --git a/test/test_nacm_protocol.sh b/test/test_nacm_protocol.sh index 14f6ed61..515eb8f7 100755 --- a/test/test_nacm_protocol.sh +++ b/test/test_nacm_protocol.sh @@ -165,7 +165,7 @@ expecteq "$(curl -u andy:bar -sS -X PUT -d '{"enable-nacm": true}' http://localh #--------------- nacm enabled -new2 "admin get nacm" +new "admin get nacm" expecteq "$(curl -u andy:bar -sS -X GET http://localhost/restconf/data/nacm-example:x)" '{"nacm-example:x": 0} ' @@ -183,14 +183,14 @@ expecteof "$clixon_netconf -qf $cfg -U andy" 0 "4 new "deny-delete-config: limited fail (netconf)" expecteof "$clixon_netconf -qf $cfg -U wilma" 0 "]]>]]>" "^applicationaccess-deniederroraccess denied]]>]]>$" -new2 "deny-delete-config: guest fail (restconf)" +new "deny-delete-config: guest fail (restconf)" expecteq "$(curl -u guest:bar -sS -X DELETE http://localhost/restconf/data)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "default deny"}}} ' # In restconf delete-config is translated to edit-config which is permitted new "deny-delete-config: limited fail (restconf) ok" expecteq "$(curl -u wilma:bar -sS -X DELETE http://localhost/restconf/data)" '' -new2 "admin get nacm (should be null)" +new "admin get nacm (should be null)" expecteq "$(curl -u andy:bar -sS -X GET http://localhost/restconf/data/nacm-example:x)" 'null ' @@ -211,7 +211,7 @@ expecteq "$(curl -u andy:bar -sS -X PUT -d '{"ietf-netconf-acm:enable-nacm": tru new "permit-edit-config: limited ok restconf" expecteq "$(curl -u wilma:bar -sS -X PUT -d '{"nacm-example:x": 2}' http://localhost/restconf/data/nacm-example:x)" '' -new2 "permit-edit-config: guest fail restconf" +new "permit-edit-config: guest fail restconf" expecteq "$(curl -u guest:bar -sS -X PUT -d '{"nacm-example:x": 2}' http://localhost/restconf/data/nacm-example:x)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "access-denied","error-severity": "error","error-message": "default deny"}}} ' new "Kill restconf daemon" diff --git a/test/test_restconf.sh b/test/test_restconf.sh index 462ac83f..78f074a8 100755 --- a/test/test_restconf.sh +++ b/test/test_restconf.sh @@ -57,22 +57,22 @@ sleep $RCWAIT new "restconf tests" -new2 "restconf root discovery. RFC 8040 3.1 (xml+xrd)" +new "restconf root discovery. RFC 8040 3.1 (xml+xrd)" expecteq "$(curl -s -X GET http://localhost/.well-known/host-meta)" " " -new2 "restconf get restconf resource. RFC 8040 3.3 (json)" +new "restconf get restconf resource. RFC 8040 3.3 (json)" expecteq "$(curl -sG http://localhost/restconf)" '{"restconf": {"data": null,"operations": null,"yang-library-version": "2016-06-21"}} ' -new2 "restconf get restconf resource. RFC 8040 3.3 (xml)" +new "restconf get restconf resource. RFC 8040 3.3 (xml)" # Get XML instead of JSON? expecteq "$(curl -s -H 'Accept: application/yang-data+xml' -G http://localhost/restconf)" '2016-06-21 ' # Should be alphabetically ordered -new2 "restconf get restconf/operations. RFC8040 3.3.2 (json)" +new "restconf get restconf/operations. RFC8040 3.3.2 (json)" expecteq "$(curl -sG http://localhost/restconf/operations)" '{"operations": {"clixon-example:client-rpc": null,"clixon-example:empty": null,"clixon-example:optional": null,"clixon-example:example": null,"clixon-lib:debug": null} ' @@ -84,7 +84,7 @@ if [ -z "$match" ]; then err "$expect" "$ret" fi -new2 "restconf get restconf/yang-library-version. RFC8040 3.3.3" +new "restconf get restconf/yang-library-version. RFC8040 3.3.3" expecteq "$(curl -sG http://localhost/restconf/yang-library-version)" '{"yang-library-version": "2016-06-21"}' new "restconf get restconf/yang-library-version. RFC8040 3.3.3 (xml)" @@ -95,7 +95,7 @@ if [ -z "$match" ]; then err "$expect" "$ret" fi -new2 "restconf schema resource, RFC 8040 sec 3.7 according to RFC 7895 (explicit resource)" +new "restconf schema resource, RFC 8040 sec 3.7 according to RFC 7895 (explicit resource)" expecteq "$(curl -s -H 'Accept: application/yang-data+json' -G http://localhost/restconf/data/ietf-yang-library:modules-state/module=ietf-interfaces,2018-02-20)" '{"ietf-yang-library:module": [{"name": "ietf-interfaces","revision": "2018-02-20","namespace": "urn:ietf:params:xml:ns:yang:ietf-interfaces","conformance-type": "implement"}]} ' @@ -109,18 +109,18 @@ expectfn "curl -s -I http://localhost/restconf/data" 0 "HTTP/1.1 200 OK" new "restconf empty rpc" expecteq "$(curl -s -X POST -d {\"clixon-example:input\":null} http://localhost/restconf/operations/clixon-example:empty)" "" -new2 "restconf empty rpc with extra args (should fail)" +new "restconf empty rpc with extra args (should fail)" expecteq "$(curl -s -X POST -d {\"clixon-example:input\":{\"extra\":null}} http://localhost/restconf/operations/clixon-example:empty)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "unknown-element","error-info": {"bad-element": "extra"},"error-severity": "error"}}} ' -new2 "restconf get empty config + state json" +new "restconf get empty config + state json" expecteq "$(curl -sSG http://localhost/restconf/data/clixon-example:state)" '{"clixon-example:state": {"op": "42"}} ' -new2 "restconf get empty config + state json + module" +new "restconf get empty config + state json + module" expecteq "$(curl -sSG http://localhost/restconf/data/clixon-example:state)" '{"clixon-example:state": {"op": "42"}} ' -new2 "restconf get empty config + state json with wrong module name" +new "restconf get empty config + state json with wrong module name" expecteq "$(curl -sSG http://localhost/restconf/data/badmodule:state)" '{"ietf-restconf:errors" : {"error": {"error-type": "protocol","error-tag": "operation-failed","error-severity": "error","error-message": "No such yang module: badmodule"}}} ' new "restconf get empty config + state xml" @@ -131,7 +131,7 @@ if [ -z "$match" ]; then err "$expect" "$ret" fi -new2 "restconf get data/ json" +new "restconf get data/ json" expecteq "$(curl -s -G http://localhost/restconf/data/clixon-example:state/op=42)" '{"clixon-example:op": "42"} ' @@ -144,7 +144,7 @@ if [ -z "$match" ]; then err "$expect" "$ret" fi -new2 "restconf get state operation eth0 type json" +new "restconf get state operation eth0 type json" expecteq "$(curl -s -G http://localhost/restconf/data/clixon-example:state/op=42)" '{"clixon-example:op": "42"} ' @@ -157,7 +157,7 @@ if [ -z "$match" ]; then err "$expect" "$ret" fi -new2 "restconf GET datastore" +new "restconf GET datastore" expecteq "$(curl -s -X GET http://localhost/restconf/data/clixon-example:state)" '{"clixon-example:state": {"op": "42"}} ' @@ -187,15 +187,15 @@ expectfn 'curl -s -X POST -d {"ietf-interfaces:interface":{"name":"eth/0/0","typ # XXX cant get this to work #expecteq "$(curl -s -X POST -d '{"interface":{"name":"eth/0/0","type\":"ex:eth","enabled":true}}' http://localhost/restconf/data/interfaces)" "" -new2 "restconf Check eth/0/0 added config" +new "restconf Check eth/0/0 added config" expecteq "$(curl -s -G http://localhost/restconf/data/ietf-interfaces:interfaces)" '{"ietf-interfaces:interfaces": {"interface": [{"name": "eth/0/0","type": "ex:eth","enabled": true}]}} ' -new2 "restconf Check eth/0/0 added state" +new "restconf Check eth/0/0 added state" expecteq "$(curl -s -G http://localhost/restconf/data/clixon-example:state)" '{"clixon-example:state": {"op": "42"}} ' -new2 "restconf Re-post eth/0/0 which should generate error" +new "restconf Re-post eth/0/0 which should generate error" expecteq "$(curl -s -X POST -d '{"ietf-interfaces:interface":{"name":"eth/0/0","type":"ex:eth","enabled":true}}' http://localhost/restconf/data/ietf-interfaces:interfaces)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "data-exists","error-severity": "error","error-message": "Data already exists; cannot create new resource"}}} ' new "Add leaf description using POST" @@ -204,7 +204,7 @@ expecteq "$(curl -s -X POST -d '{"ietf-interfaces:description":"The-first-interf new "Add nothing using POST" expectfn 'curl -s -X POST http://localhost/restconf/data/ietf-interfaces:interfaces/interface=eth%2f0%2f0' 0 '"ietf-restconf:errors" : {"error": {"error-type": "rpc","error-tag": "malformed-message","error-severity": "error","error-message": " on line 1: syntax error at or before:' -new2 "restconf Check description added" +new "restconf Check description added" expecteq "$(curl -s -G http://localhost/restconf/data/ietf-interfaces:interfaces)" '{"ietf-interfaces:interfaces": {"interface": [{"name": "eth/0/0","description": "The-first-interface","type": "ex:eth","enabled": true}]}} ' @@ -214,33 +214,33 @@ expecteq "$(curl -s -X DELETE http://localhost/restconf/data/ietf-interfaces:in new "Check deleted eth/0/0" expectfn 'curl -s -G http://localhost/restconf/data' 0 $state -new2 "restconf Re-Delete eth/0/0 using none should generate error" +new "restconf Re-Delete eth/0/0 using none should generate error" expecteq "$(curl -s -X DELETE http://localhost/restconf/data/ietf-interfaces:interfaces/interface=eth%2f0%2f0)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "data-missing","error-severity": "error","error-message": "Data does not exist; cannot delete resource"}}} ' new "restconf Add subtree eth/0/0 using PUT" expecteq "$(curl -s -X PUT -d '{"ietf-interfaces:interface":{"name":"eth/0/0","type":"ex:eth","enabled":true}}' http://localhost/restconf/data/ietf-interfaces:interfaces/interface=eth%2f0%2f0)" "" -new2 "restconf get subtree" +new "restconf get subtree" expecteq "$(curl -s -G http://localhost/restconf/data/ietf-interfaces:interfaces)" '{"ietf-interfaces:interfaces": {"interface": [{"name": "eth/0/0","type": "ex:eth","enabled": true}]}} ' -new2 "restconf rpc using POST json" +new "restconf rpc using POST json" expecteq "$(curl -s -X POST -d '{"clixon-example:input":{"x":42}}' http://localhost/restconf/operations/clixon-example:example)" '{"clixon-example:output": {"x": "42","y": "42"}} ' -new2 "restconf rpc using POST json wrong" +new "restconf rpc using POST json wrong" expecteq "$(curl -s -X POST -d '{"clixon-example:input":{"wrongelement":"ipv4"}}' http://localhost/restconf/operations/clixon-example:example)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "unknown-element","error-info": {"bad-element": "wrongelement"},"error-severity": "error"}}} ' -new2 "restconf rpc non-existing rpc without namespace" +new "restconf rpc non-existing rpc without namespace" expecteq "$(curl -s -X POST -d '{}' http://localhost/restconf/operations/kalle)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "missing-element","error-info": {"bad-element": "kalle"},"error-severity": "error","error-message": "RPC not defined"}}} ' -new2 "restconf rpc non-existing rpc" +new "restconf rpc non-existing rpc" expecteq "$(curl -s -X POST -d '{}' http://localhost/restconf/operations/clixon-example:kalle)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "missing-element","error-info": {"bad-element": "kalle"},"error-severity": "error","error-message": "RPC not defined"}}} ' -new2 "restconf rpc missing name" +new "restconf rpc missing name" expecteq "$(curl -s -X POST -d '{}' http://localhost/restconf/operations)" '{"ietf-restconf:errors" : {"error": {"error-type": "protocol","error-tag": "operation-failed","error-severity": "error","error-message": "Operation name expected"}}} ' -new2 "restconf rpc missing input" +new "restconf rpc missing input" expecteq "$(curl -s -X POST -d '{}' http://localhost/restconf/operations/clixon-example:example)" '{"ietf-restconf:errors" : {"error": {"error-type": "rpc","error-tag": "malformed-message","error-severity": "error","error-message": "restconf RPC does not have input statement"}}} ' new "restconf rpc using POST xml" @@ -251,7 +251,7 @@ if [ -z "$match" ]; then err "$expect" "$ret" fi -new2 "restconf rpc using wrong prefix" +new "restconf rpc using wrong prefix" expecteq "$(curl -s -X POST -d '{"wrong:input":{"routing-instance-name":"ipv4"}}' http://localhost/restconf/operations/wrong:example)" '{"ietf-restconf:errors" : {"error": {"error-type": "protocol","error-tag": "operation-failed","error-severity": "error","error-message": "yang module not found"}}} ' new "restconf local client rpc using POST xml" diff --git a/test/test_restconf2.sh b/test/test_restconf2.sh index 31582531..59d78abb 100755 --- a/test/test_restconf2.sh +++ b/test/test_restconf2.sh @@ -116,10 +116,10 @@ new "restconf POST interface" expectfn 'curl -s -X POST -d {"example:interface":{"name":"TEST","type":"eth0"}} http://localhost/restconf/data/example:cont1' 0 "" # XXX should it be example:interface? -new2 "restconf POST again" +new "restconf POST again" expecteq "$(curl -s -X POST -d '{"interface":{"name":"TEST","type":"eth0"}}' http://localhost/restconf/data/example:cont1)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "data-exists","error-severity": "error","error-message": "Data already exists; cannot create new resource"}}} ' -new2 "restconf POST from top" +new "restconf POST from top" expecteq "$(curl -s -X POST -d '{"example:cont1":{"interface":{"name":"TEST","type":"eth0"}}}' http://localhost/restconf/data)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "data-exists","error-severity": "error","error-message": "Data already exists; cannot create new resource"}}} ' new "restconf DELETE" diff --git a/test/test_rpc.sh b/test/test_rpc.sh index 076ced83..9598ff91 100755 --- a/test/test_rpc.sh +++ b/test/test_rpc.sh @@ -68,28 +68,28 @@ fi new "netconf empty rpc" expecteof "$clixon_netconf -qf $cfg" 0 ']]>]]>' '^]]>]]>$' -new2 "restconf example rpc json/json default - no http media headers" +new "restconf example rpc json/json default - no http media headers" expecteq "$(curl -s -X POST -d '{"clixon-example:input":{"x":0}}' http://localhost/restconf/operations/clixon-example:example)" '{"clixon-example:output": {"x": "0","y": "42"}} ' -new2 "restconf example rpc json/json change y default" +new "restconf example rpc json/json change y default" expecteq "$(curl -s -X POST -d '{"clixon-example:input":{"x":"0","y":"99"}}' http://localhost/restconf/operations/clixon-example:example)" '{"clixon-example:output": {"x": "0","y": "99"}} ' -new2 "restconf example rpc json/json" +new "restconf example rpc json/json" # XXX example:input example:output expecteq "$(curl -s -X POST -H 'Content-Type: application/yang-data+json' -H 'Content-Type: application/yang-data+json' -d '{"clixon-example:input":{"x":"0"}}' http://localhost/restconf/operations/clixon-example:example)" '{"clixon-example:output": {"x": "0","y": "42"}} ' -new2 "restconf example rpc xml/json" +new "restconf example rpc xml/json" expecteq "$(curl -s -X POST -H 'Content-Type: application/yang-data+xml' -H 'Content-Type: application/yang-data+json' -d '0' http://localhost/restconf/operations/clixon-example:example)" '{"clixon-example:output": {"x": "0","y": "42"}} ' -new2 "restconf example rpc json/xml" +new "restconf example rpc json/xml" expecteq "$(curl -s -X POST -H 'Content-Type: application/yang-data+json' -H 'Accept: application/yang-data+xml' -d '{"clixon-example:input":{"x":"0"}}' http://localhost/restconf/operations/clixon-example:example)" '042 ' -new2 "restconf example rpc xml/xml" +new "restconf example rpc xml/xml" expecteq "$(curl -s -X POST -H 'Content-Type: application/yang-data+xml' -H 'Accept: application/yang-data+xml' -d '0' http://localhost/restconf/operations/clixon-example:example)" '042 ' @@ -106,7 +106,7 @@ if [ -z "$match" ]; then err "$expect" "$ret" fi -new2 "restconf empty rpc with input x" +new "restconf empty rpc with input x" expecteq "$(curl -s -X POST -d '{"clixon-example:input":{"x":0}}' http://localhost/restconf/operations/clixon-example:empty)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "unknown-element","error-info": {"bad-element": "x"},"error-severity": "error"}}} ' # cornercase: optional has yang input/output sections but test without body @@ -118,16 +118,16 @@ if [ -z "$match" ]; then err "$expect" "$ret" fi -new2 "restconf omit mandatory" +new "restconf omit mandatory" expecteq "$(curl -s -X POST -d '{"clixon-example:input":null}' http://localhost/restconf/operations/clixon-example:example)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "missing-element","error-info": {"bad-element": "x"},"error-severity": "error","error-message": "Mandatory variable"}}} ' -new2 "restconf add extra" +new "restconf add extra" expecteq "$(curl -s -X POST -d '{"clixon-example:input":{"x":"0","extra":"0"}}' http://localhost/restconf/operations/clixon-example:example)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "unknown-element","error-info": {"bad-element": "extra"},"error-severity": "error"}}} ' -new2 "restconf wrong method" +new "restconf wrong method" expecteq "$(curl -s -X POST -d '{"clixon-example:input":{"x":"0"}}' http://localhost/restconf/operations/clixon-example:wrong)" '{"ietf-restconf:errors" : {"error": {"error-type": "application","error-tag": "missing-element","error-info": {"bad-element": "wrong"},"error-severity": "error","error-message": "RPC not defined"}}} ' -new2 "restconf example missing input" +new "restconf example missing input" expecteq "$(curl -s -X POST -d '{"clixon-example:input":null}' http://localhost/restconf/operations/ietf-netconf:edit-config)" '{"ietf-restconf:errors" : {"error": {"error-type": "protocol","error-tag": "operation-failed","error-severity": "error","error-message": "yang module not found"}}} ' new "netconf kill-session missing session-id mandatory" diff --git a/test/test_yang_namespace.sh b/test/test_yang_namespace.sh index f674b61b..ae1f7cba 100755 --- a/test/test_yang_namespace.sh +++ b/test/test_yang_namespace.sh @@ -101,7 +101,7 @@ expecteof "$clixon_netconf -qf $cfg -y $fyang1" 0 " new "restconf set x in example1" expecteq "$(curl -s -X POST -d '{"example1:x":42}' http://localhost/restconf/data)" '' -new2 "restconf get config example1" +new "restconf get config example1" expecteq "$(curl -s -X GET http://localhost/restconf/data/example1:x)" '{"example1:x": 42} '