Pagination draft
This commit is contained in:
parent
ab0bc0ea4b
commit
78f5a6983c
15 changed files with 1206 additions and 86 deletions
|
|
@ -1,13 +1,14 @@
|
|||
#!/usr/bin/env bash
|
||||
# Restconf RFC8040 Appendix A and B "jukebox" example
|
||||
# For collection / scaling activity
|
||||
# For pagination / scaling I-D activity
|
||||
# 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.xml
|
||||
fjukebox=$dir/example-jukebox.yang
|
||||
fexample=$dir/example-module.yang
|
||||
fstate=$dir/mystate.xml
|
||||
|
||||
cat <<EOF > $cfg
|
||||
<clixon-config xmlns="http://clicon.org/config">
|
||||
|
|
@ -25,42 +26,250 @@ cat <<EOF > $cfg
|
|||
</clixon-config>
|
||||
EOF
|
||||
|
||||
cat <<EOF > $dir/startup_db
|
||||
cat <<'EOF' > $dir/startup_db
|
||||
<config>
|
||||
<jukebox xmlns="http://example.com/ns/example-jukebox">
|
||||
<library>
|
||||
<artist>
|
||||
<name>Foo Fighters</name>
|
||||
<album xmlns="http://example.com/ns/example-jukebox">
|
||||
<name>Crime and Punishment</name>
|
||||
<year>1995</year>
|
||||
</album>
|
||||
<album xmlns="http://example.com/ns/example-jukebox">
|
||||
<name>One by One</name>
|
||||
<year>2002</year>
|
||||
</album>
|
||||
<album xmlns="http://example.com/ns/example-jukebox">
|
||||
<name>The Color and the Shape</name>
|
||||
<year>1997</year>
|
||||
</album>
|
||||
<album xmlns="http://example.com/ns/example-jukebox">
|
||||
<name>There is Nothing Left to Loose</name>
|
||||
<year>1999</year>
|
||||
</album>
|
||||
<album xmlns="http://example.com/ns/example-jukebox">
|
||||
<name>White and Black</name>
|
||||
<year>1998</year>
|
||||
</album>
|
||||
</artist>
|
||||
</library>
|
||||
</jukebox>
|
||||
<admins xmlns="http://example.com/ns/example-module">
|
||||
<admin>
|
||||
<name>Alice</name>
|
||||
<access>permit</access>
|
||||
<email-address>alice@example.com</email-address>
|
||||
<password>$0$1543</password>
|
||||
<preference>
|
||||
<number>1</number>
|
||||
<number>2</number>
|
||||
</preference>
|
||||
<skill>
|
||||
<name>Customer Service</name>
|
||||
<rank>99</rank>
|
||||
</skill>
|
||||
<skill>
|
||||
<name>Problem Solving</name>
|
||||
<rank>90</rank>
|
||||
</skill>
|
||||
</admin>
|
||||
<admin>
|
||||
<name>Bob</name>
|
||||
<access>limited</access>
|
||||
<email-address>bob@example.com</email-address>
|
||||
<password>$0$2789</password>
|
||||
<preference>
|
||||
<number>2</number>
|
||||
<number>3</number>
|
||||
</preference>
|
||||
<skill>
|
||||
<name>Problem Solving</name>
|
||||
<rank>98</rank>
|
||||
</skill>
|
||||
<skill>
|
||||
<name>Conflict Resolution</name>
|
||||
<rank>93</rank>
|
||||
</skill>
|
||||
</admin>
|
||||
<admin>
|
||||
<name>Joe</name>
|
||||
<access>permit</access>
|
||||
<email-address>joe@example.com</email-address>
|
||||
<password>$0$6523</password>
|
||||
<preference>
|
||||
<number>1</number>
|
||||
<number>4</number>
|
||||
</preference>
|
||||
<skill>
|
||||
<name>Management</name>
|
||||
<rank>96</rank>
|
||||
</skill>
|
||||
<skill>
|
||||
<name>Collaboration</name>
|
||||
<rank>92</rank>
|
||||
</skill>
|
||||
</admin>
|
||||
<admin>
|
||||
<name>Frank</name>
|
||||
<access>deny</access>
|
||||
<email-address>frank@example.com</email-address>
|
||||
<password>$0$4030</password>
|
||||
<preference>
|
||||
<number>5</number>
|
||||
<number>9</number>
|
||||
</preference>
|
||||
<skill>
|
||||
<name>Organization</name>
|
||||
<rank>90</rank>
|
||||
</skill>
|
||||
<skill>
|
||||
<name>Negotiation</name>
|
||||
<rank>80</rank>
|
||||
</skill>
|
||||
</admin>
|
||||
<admin>
|
||||
<name>Tom</name>
|
||||
<access>permit</access>
|
||||
<email-address>tom@example.com</email-address>
|
||||
<password>$0$2376</password>
|
||||
<preference>
|
||||
<number>2</number>
|
||||
<number>5</number>
|
||||
</preference>
|
||||
<skill>
|
||||
<name>Adaptability.</name>
|
||||
<rank>98</rank>
|
||||
</skill>
|
||||
<skill>
|
||||
<name>Active Listening</name>
|
||||
<rank>85</rank>
|
||||
</skill>
|
||||
</admin>
|
||||
</admins>
|
||||
<rulebase xmlns="http://example.com/ns/example-module">
|
||||
<rule>
|
||||
<name>SvrA-http</name>
|
||||
<match>92.0.2.0/24</match>
|
||||
<action>forwarding</action>
|
||||
</rule>
|
||||
<rule>
|
||||
<name>SvrA-ftp</name>
|
||||
<match>203.0.113.1/32</match>
|
||||
<action>forwarding</action>
|
||||
</rule>
|
||||
<rule>
|
||||
<name>p2p</name>
|
||||
<match>p2p</match>
|
||||
<action>logging</action>
|
||||
</rule>
|
||||
<rule>
|
||||
<name>any</name>
|
||||
<match>any</match>
|
||||
<action>logging</action>
|
||||
</rule>
|
||||
<rule>
|
||||
<name>SvrA-tcp</name>
|
||||
<match>80</match>
|
||||
<action>forwarding</action>
|
||||
</rule>
|
||||
</rulebase>
|
||||
<prefixes xmlns="http://example.com/ns/example-module">
|
||||
<prefix-list>
|
||||
<ip-prefix>10.0.0.0/8</ip-prefix>
|
||||
<masklength-lower>17</masklength-lower>
|
||||
<masklength-upper>18</masklength-upper>
|
||||
</prefix-list>
|
||||
<prefix-list>
|
||||
<ip-prefix>2000:1::/48</ip-prefix>
|
||||
<masklength-lower>48</masklength-lower>
|
||||
<masklength-upper>48</masklength-upper>
|
||||
</prefix-list>
|
||||
<prefix-list>
|
||||
<ip-prefix>2000:2::/48</ip-prefix>
|
||||
<masklength-lower>48</masklength-lower>
|
||||
<masklength-upper>48</masklength-upper>
|
||||
</prefix-list>
|
||||
<prefix-list>
|
||||
<ip-prefix>2000:3::/48</ip-prefix>
|
||||
<masklength-lower>16</masklength-lower>
|
||||
<masklength-upper>16</masklength-upper>
|
||||
</prefix-list>
|
||||
<prefix-list>
|
||||
<ip-prefix>::/0</ip-prefix>
|
||||
<masklength-lower>0</masklength-lower>
|
||||
<masklength-upper>128</masklength-upper>
|
||||
</prefix-list>
|
||||
</prefixes>
|
||||
</config>
|
||||
EOF
|
||||
|
||||
# Common Jukebox spec (fjukebox must be set)
|
||||
. ./jukebox.sh
|
||||
cat<<EOF > $fstate
|
||||
<admins xmlns="http://example.com/ns/example-module">
|
||||
<admin>
|
||||
<name>Alice</name>
|
||||
<status>Available</status>
|
||||
</admin>
|
||||
<admin>
|
||||
<name>Bob</name>
|
||||
<status>Busy</status>
|
||||
</admin>
|
||||
<admin>
|
||||
<name>Joe</name>
|
||||
<status>Do Not Disturb</status>
|
||||
</admin>
|
||||
<admin>
|
||||
<name>Frank</name>
|
||||
<status>Offline</status>
|
||||
</admin>
|
||||
<admin>
|
||||
<name>Tom</name>
|
||||
<status>Do Not Disturb</status>
|
||||
</admin>
|
||||
</admins>
|
||||
<device-logs xmlns="http://example.com/ns/example-module">
|
||||
<device-log>
|
||||
<device-id>Cloud-IoT-Device-A</device-id>
|
||||
<time-received>2020-07-08T12:38:32Z</time-received>
|
||||
<time-generated>2020-07-08T12:37:12Z</time-generated>
|
||||
<message>Upload contains 6 datapoints</message>
|
||||
</device-log>
|
||||
<device-log>
|
||||
<device-id>Cloud-IoT-Device-B</device-id>
|
||||
<time-received>2020-07-08T16:20:54Z</time-received>
|
||||
<time-generated>2020-07-08T16:20:14Z</time-generated>
|
||||
<message>Upload successful</message>
|
||||
</device-log>
|
||||
<device-log>
|
||||
<device-id>Cloud-IoT-Device-C</device-id>
|
||||
<time-received>2020-07-08T17:30:34Z</time-received>
|
||||
<time-generated>2020-07-08T17:30:12Z</time-generated>
|
||||
<message>Receive a configuration update</message>
|
||||
</device-log>
|
||||
<device-log>
|
||||
<device-id>Cloud-IoT-Device-D</device-id>
|
||||
<time-received>2020-07-08T18:40:13Z</time-received>
|
||||
<time-generated>2020-07-08T18:40:00Z</time-generated>
|
||||
<message>Keep-alive ping sent to server</message>
|
||||
</device-log>
|
||||
<device-log>
|
||||
<device-id>Cloud-IoT-Device-E</device-id>
|
||||
<time-received>2020-07-08T19:48:34Z</time-received>
|
||||
<time-generated>2020-07-08T19:48:00Z</time-generated>
|
||||
<message>Uploading data to DataPoint</message>
|
||||
</device-log>
|
||||
</device-logs>
|
||||
<audit-logs xmlns="http://example.com/ns/example-module">
|
||||
<audit-log>
|
||||
<source-ip>192.168.0.92</source-ip>
|
||||
<log-creation>2020-11-01T06:47:59Z</log-creation>
|
||||
<request>User-logged-out</request>
|
||||
<outcome>true</outcome>
|
||||
</audit-log>
|
||||
<audit-log>
|
||||
<source-ip>192.168.0.92</source-ip>
|
||||
<log-creation>2020-11-01T06:49:03Z</log-creation>
|
||||
<request>User-logged-in</request>
|
||||
<outcome>true</outcome>
|
||||
</audit-log>
|
||||
<audit-log>
|
||||
<source-ip>192.168.0.92</source-ip>
|
||||
<log-creation>2020-11-01T06:51:34Z</log-creation>
|
||||
<request>Patron-card-viewed</request>
|
||||
<outcome>false</outcome>
|
||||
</audit-log>
|
||||
<audit-log>
|
||||
<source-ip>192.168.0.92</source-ip>
|
||||
<log-creation>2020-11-01T06:53:01Z</log-creation>
|
||||
<request>User-logged-out</request>
|
||||
<outcome>true</outcome>
|
||||
</audit-log>
|
||||
<audit-log>
|
||||
<source-ip>192.168.0.92</source-ip>
|
||||
<log-creation>2020-11-01T06:56:22Z</log-creation>
|
||||
<request>User-logged-in</request>
|
||||
<outcome>false</outcome>
|
||||
</audit-log>
|
||||
</audit-logs>
|
||||
EOF
|
||||
|
||||
new "test params: -f $cfg -- -s" # XXX: -sS state file
|
||||
# Common example-module spec (fexample must be set)
|
||||
. ./example_module.sh
|
||||
|
||||
new "test params: -f $cfg -s startup -- -sS $fstate"
|
||||
|
||||
if [ $BE -ne 0 ]; then
|
||||
new "kill old backend"
|
||||
|
|
@ -69,8 +278,8 @@ if [ $BE -ne 0 ]; then
|
|||
err
|
||||
fi
|
||||
sudo pkill -f clixon_backend # to be sure
|
||||
new "start backend -s startup -f $cfg"
|
||||
start_backend -s startup -f "$cfg"
|
||||
new "start backend -s startup -f $cfg -- -sS $mystate"
|
||||
start_backend -s startup -f $cfg -- -sS $fstate
|
||||
fi
|
||||
|
||||
new "waiting"
|
||||
|
|
@ -87,12 +296,13 @@ if [ $RC -ne 0 ]; then
|
|||
wait_restconf
|
||||
fi
|
||||
|
||||
new "C.1. 'count' Parameter NETCONF"
|
||||
expecteof "$clixon_netconf -qf $cfg" 0 "<rpc message-id=\"101\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><get-pageable-list xmlns=\"urn:ietf:params:xml:ns:yang:ietf-netconf-list-pagination\"><datastore xmlns:ds=\"urn:ietf:params:xml:ns:yang:ietf-datastores\">ds:running</datastore><list-target xmlns:exm=\"http://example.com/ns/example-module\">/exm:admins/exm:admin[exm:name='Bob']/exm:skill</list-target><count>2</count></get-pageable-list></rpc>]]>]]>" '<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="101"><pageable-list xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-list-pagination"><skill xmlns="http://example.com/ns/example-module"><name>Conflict Resolution</name><rank>93</rank></skill><skill xmlns="http://example.com/ns/example-module"><name>Problem Solving</name><rank>98</rank></skill></pageable-list></rpc-reply>]]>]]>$'
|
||||
|
||||
if false; then # XXX notyet
|
||||
new "C.1. 'count' Parameter RESTCONF"
|
||||
expectpart "$(curl $CURLOPTS -X GET -H "Accept: application/yang.collection+xml" $RCPROTO://localhost/restconf/data/example-jukebox:jukebox/library/artist=Foo%20Fighters/album/?count=2)" 0 "HTTP/1.1 200 OK" "application/yang.collection+xml" '<collection xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-collection"><album xmlns="http://example.com/ns/example-jukebox"><name>Crime and Punishment</name><year>1995</year></album><album xmlns="http://example.com/ns/example-jukebox"><name>One by One</name><year>2002</year></album></collection>'
|
||||
|
||||
new "C.1. 'count' Parameter NETCONF"
|
||||
expecteof "$clixon_netconf -qf $cfg" 0 "<rpc netconf:message-id=\"101\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><get-collection xmlns=\"urn:ietf:params:xml:ns:yang:ietf-netconf-collection\"><datastore>running</datastore><module-name>example-jukebox</module-name><list-target>/example-jukebox:jukebox/library/artist=Foo Fighters/album</list-target><count>2</count></get-collection></rpc>]]>]]>" '^<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" netconf:message-id="101"><collection xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-collection"><album xmlns="http://example.com/ns/example-jukebox"><name>Crime and Punishment</name><year>1995</year></album><album xmlns="http://example.com/ns/example-jukebox"><name>One by One</name><year>2002</year></album></collection></rpc-reply>]]>]]>$'
|
||||
|
||||
fi
|
||||
if [ $RC -ne 0 ]; then
|
||||
new "Kill restconf daemon"
|
||||
stop_restconf
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue