1c87c5fbaSopenharmony_ci#!/bin/bash 2c87c5fbaSopenharmony_ci 3c87c5fbaSopenharmony_cifunction start_tcpdump { 4c87c5fbaSopenharmony_ci testfunc=$1 5c87c5fbaSopenharmony_ci logfile=$LOGDIR/"$testfunc"_$(date +%s).dump 6c87c5fbaSopenharmony_ci tcpdumpcmd="$tcpdump -i $INTERFACE host $SERVERADDRESS and (udp port $SERVERPORT or icmp) -s0 -n -w $logfile" 7c87c5fbaSopenharmony_ci if [ $verbose ]; then 8c87c5fbaSopenharmony_ci echo "$tcpdumpcmd" 9c87c5fbaSopenharmony_ci $tcpdumpcmd& 10c87c5fbaSopenharmony_ci else 11c87c5fbaSopenharmony_ci $tcpdumpcmd 2>/dev/null& 12c87c5fbaSopenharmony_ci fi 13c87c5fbaSopenharmony_ci tcpdumppid=$! 14c87c5fbaSopenharmony_ci # wait until tcpdump is ready to write 15c87c5fbaSopenharmony_ci for t in {0..20} ; do 16c87c5fbaSopenharmony_ci if [ ! -e $logfile ] ; then 17c87c5fbaSopenharmony_ci sleep 0.1 18c87c5fbaSopenharmony_ci else 19c87c5fbaSopenharmony_ci sleep 1 20c87c5fbaSopenharmony_ci if [ $verbose ]; then 21c87c5fbaSopenharmony_ci echo "tcpdump started" 22c87c5fbaSopenharmony_ci fi 23c87c5fbaSopenharmony_ci break 24c87c5fbaSopenharmony_ci fi 25c87c5fbaSopenharmony_ci done 26c87c5fbaSopenharmony_ci} 27c87c5fbaSopenharmony_ci 28c87c5fbaSopenharmony_cifunction kill_tcpdump { 29c87c5fbaSopenharmony_ci kill $tcpdumppid 2>/dev/null || ERROR=1 30c87c5fbaSopenharmony_ci if [ $ERROR ]; then 31c87c5fbaSopenharmony_ci echo "tcpdump failed." 32c87c5fbaSopenharmony_ci exit 1 33c87c5fbaSopenharmony_ci fi 34c87c5fbaSopenharmony_ci} 35c87c5fbaSopenharmony_ci 36c87c5fbaSopenharmony_cifunction start_coap_test { 37c87c5fbaSopenharmony_ci if [ -z $1 ]; then 38c87c5fbaSopenharmony_ci echo "missing argument for start_coap_test" 39c87c5fbaSopenharmony_ci exit 1 40c87c5fbaSopenharmony_ci fi 41c87c5fbaSopenharmony_ci start_tcpdump $1 42c87c5fbaSopenharmony_ci if [ $verbose ]; then 43c87c5fbaSopenharmony_ci echo "client command: $COAP_CLIENT $clientopts $testaddress" 44c87c5fbaSopenharmony_ci fi 45c87c5fbaSopenharmony_ci echo -e "\nOutput of client:" 46c87c5fbaSopenharmony_ci # for OBS 47c87c5fbaSopenharmony_ci if [[ ! -z $2 ]]; then 48c87c5fbaSopenharmony_ci testfifo=/tmp/tmpfifo$(date +%s) 49c87c5fbaSopenharmony_ci mkfifo $testfifo 50c87c5fbaSopenharmony_ci $COAP_CLIENT $clientopts "$testaddress" &> $testfifo & 51c87c5fbaSopenharmony_ci clientpid=$! 52c87c5fbaSopenharmony_ci ($timeoutcmd $clienttimeout cat $testfifo | if read -n 1 char; then echo "output: $char" ; fi) 2>/dev/null 53c87c5fbaSopenharmony_ci # when client has written an output to fifo, kill client 54c87c5fbaSopenharmony_ci kill $clientpid 55c87c5fbaSopenharmony_ci rm $testfifo 56c87c5fbaSopenharmony_ci if [[ $2 == "wait" ]] ; then 57c87c5fbaSopenharmony_ci echo "Client killed. Waiting.." 58c87c5fbaSopenharmony_ci sleep $longtimeout 59c87c5fbaSopenharmony_ci fi 60c87c5fbaSopenharmony_ci else 61c87c5fbaSopenharmony_ci $COAP_CLIENT $clientopts "$testaddress" 62c87c5fbaSopenharmony_ci fi 63c87c5fbaSopenharmony_ci kill_tcpdump 64c87c5fbaSopenharmony_ci} 65c87c5fbaSopenharmony_ci 66c87c5fbaSopenharmony_ci 67c87c5fbaSopenharmony_ci## 68c87c5fbaSopenharmony_ci# Perform GET (CON mode) on resource /test 69c87c5fbaSopenharmony_ci# 70c87c5fbaSopenharmony_ci# pre: resource /test exists and can handle GET with arbitrary payload 71c87c5fbaSopenharmony_ci# 72c87c5fbaSopenharmony_ci# client sends GET request with Type=0(CON) and Code=1(GET) 73c87c5fbaSopenharmony_ci# 74c87c5fbaSopenharmony_ci# check if sent request contains Type value indicating 0 and Code 75c87c5fbaSopenharmony_ci# value indicating 1 76c87c5fbaSopenharmony_ci# 77c87c5fbaSopenharmony_ci# check if server sends response containing Code = 69(2.05 Content), 78c87c5fbaSopenharmony_ci# the same Message ID as that of previous request, content type option 79c87c5fbaSopenharmony_ci# 80c87c5fbaSopenharmony_ci# verify that server displays received information 81c87c5fbaSopenharmony_ci# 82c87c5fbaSopenharmony_cifunction TD_COAP_CORE_01 { 83c87c5fbaSopenharmony_ci clientopts="$callopts -m get" 84c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/test 85c87c5fbaSopenharmony_ci echo "perform GET (CON mode) on resource $testaddress" 86c87c5fbaSopenharmony_ci start_coap_test $1 87c87c5fbaSopenharmony_ci} 88c87c5fbaSopenharmony_ci 89c87c5fbaSopenharmony_ci## 90c87c5fbaSopenharmony_ci# Perform POST transaction (CON mode) on resource /test: create 91c87c5fbaSopenharmony_ci# resource /test 92c87c5fbaSopenharmony_ci# 93c87c5fbaSopenharmony_ci# pre: resource /test doesn't exist but can be created on /test 94c87c5fbaSopenharmony_ci# 95c87c5fbaSopenharmony_ci# client sends POST with Type=0(CON), Code=2(POST), arbitrary payload, 96c87c5fbaSopenharmony_ci# Content type option 97c87c5fbaSopenharmony_ci# 98c87c5fbaSopenharmony_ci# check: client sends request containing Type value indicating 0 and 99c87c5fbaSopenharmony_ci# Code value indicating 2 100c87c5fbaSopenharmony_ci# 101c87c5fbaSopenharmony_ci# verify: Server displays received information 102c87c5fbaSopenharmony_ci# 103c87c5fbaSopenharmony_ci# check: server sends response containing Code=69(2.01 Created), same 104c87c5fbaSopenharmony_ci# message ID as that of the previous request, Content type option 105c87c5fbaSopenharmony_ci# 106c87c5fbaSopenharmony_ci# verify: client displays received information 107c87c5fbaSopenharmony_ci# 108c87c5fbaSopenharmony_cifunction TD_COAP_CORE_02 { 109c87c5fbaSopenharmony_ci # -t 0: content type text/plain 110c87c5fbaSopenharmony_ci clientopts="$callopts -m post -t 0 -e sometext" 111c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/test 112c87c5fbaSopenharmony_ci echo "perform POST (CON) on resource $testaddress" 113c87c5fbaSopenharmony_ci start_coap_test $1 114c87c5fbaSopenharmony_ci} 115c87c5fbaSopenharmony_ci 116c87c5fbaSopenharmony_ci## 117c87c5fbaSopenharmony_ci# Perform PUT transaction (CON mode) on resource /test 118c87c5fbaSopenharmony_ci# 119c87c5fbaSopenharmony_ci# pre: resource /test exists which can handle PUT 120c87c5fbaSopenharmony_ci# 121c87c5fbaSopenharmony_ci# Client sends a PUT request with Type=0(CON), Code=3(PUT), arbitrary 122c87c5fbaSopenharmony_ci# payload, content type option 123c87c5fbaSopenharmony_ci# 124c87c5fbaSopenharmony_ci# check: sent request contains Type value indicating 0 and Code value 125c87c5fbaSopenharmony_ci# indicating 3 126c87c5fbaSopenharmony_ci# 127c87c5fbaSopenharmony_ci# verify: server displays received information 128c87c5fbaSopenharmony_ci# 129c87c5fbaSopenharmony_ci# check: Server sends response containing Code=68(2.04 Changed), same 130c87c5fbaSopenharmony_ci# Message ID as that of the previous request 131c87c5fbaSopenharmony_ci# 132c87c5fbaSopenharmony_ci# verify: client displays received response 133c87c5fbaSopenharmony_ci# 134c87c5fbaSopenharmony_cifunction TD_COAP_CORE_03 { 135c87c5fbaSopenharmony_ci clientopts="$callopts -m put -t 0 -e sometext" 136c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/test 137c87c5fbaSopenharmony_ci echo "perform PUT (CON) on resource $testaddress" 138c87c5fbaSopenharmony_ci start_coap_test $1 139c87c5fbaSopenharmony_ci} 140c87c5fbaSopenharmony_ci 141c87c5fbaSopenharmony_ci## 142c87c5fbaSopenharmony_ci# Perform DELETE transaction (CON mode) on resource /test 143c87c5fbaSopenharmony_ci# 144c87c5fbaSopenharmony_ci# pre: resource /test exists which can handle DELETE 145c87c5fbaSopenharmony_ci# 146c87c5fbaSopenharmony_ci# Client sends a DELETE request with Type=0(CON), Code=4(DELETE) 147c87c5fbaSopenharmony_ci# 148c87c5fbaSopenharmony_ci# check: sent request contains Type value indicating 0 and Code value 149c87c5fbaSopenharmony_ci# indicating 4 150c87c5fbaSopenharmony_ci# 151c87c5fbaSopenharmony_ci# check: Server sends response containing Code=66(2.02 Deleted), same 152c87c5fbaSopenharmony_ci# Message ID as that of the previous request 153c87c5fbaSopenharmony_ci# 154c87c5fbaSopenharmony_ci# verify: client displays received response 155c87c5fbaSopenharmony_ci# 156c87c5fbaSopenharmony_cifunction TD_COAP_CORE_04 { 157c87c5fbaSopenharmony_ci clientopts="$callopts -m delete" 158c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/test 159c87c5fbaSopenharmony_ci echo "perform DELETE (CON) on resource $testaddress" 160c87c5fbaSopenharmony_ci start_coap_test $1 161c87c5fbaSopenharmony_ci} 162c87c5fbaSopenharmony_ci 163c87c5fbaSopenharmony_ci## 164c87c5fbaSopenharmony_ci# Perform GET transaction (NON mode) on resource /test 165c87c5fbaSopenharmony_ci# 166c87c5fbaSopenharmony_ci# pre: resource /test exits which can handle GET 167c87c5fbaSopenharmony_ci# 168c87c5fbaSopenharmony_ci# Client sends a GET request with Type=1(NON), Code=1(GET) 169c87c5fbaSopenharmony_ci# 170c87c5fbaSopenharmony_ci# check: sent request contains Type value indicating 1 and Code value 171c87c5fbaSopenharmony_ci# indicating 1 172c87c5fbaSopenharmony_ci# 173c87c5fbaSopenharmony_ci# check: Server sends response containing Type=1(NON), Code=69(2.05 174c87c5fbaSopenharmony_ci# Content), content type option 175c87c5fbaSopenharmony_ci# 176c87c5fbaSopenharmony_ci# verify: client displays received response 177c87c5fbaSopenharmony_ci# 178c87c5fbaSopenharmony_cifunction TD_COAP_CORE_05 { 179c87c5fbaSopenharmony_ci # -N: send non-confirmable message 180c87c5fbaSopenharmony_ci clientopts="$callopts -m get -N" 181c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/test 182c87c5fbaSopenharmony_ci echo "perform GET (NON mode) on resource $testaddress" 183c87c5fbaSopenharmony_ci start_coap_test $1 184c87c5fbaSopenharmony_ci} 185c87c5fbaSopenharmony_ci 186c87c5fbaSopenharmony_ci## 187c87c5fbaSopenharmony_ci# Perform POST transaction (NON mode), create resource on /test 188c87c5fbaSopenharmony_ci# 189c87c5fbaSopenharmony_ci# pre: resource on /test doesn't exist but can be created 190c87c5fbaSopenharmony_ci# 191c87c5fbaSopenharmony_ci# Client sends a POST request with Type=1(NON), Code=2(POST), 192c87c5fbaSopenharmony_ci# arbitrary payload, content type option 193c87c5fbaSopenharmony_ci# 194c87c5fbaSopenharmony_ci# check: sent request contains Type value indicating 1 and Code value 195c87c5fbaSopenharmony_ci# indicating 2 196c87c5fbaSopenharmony_ci# 197c87c5fbaSopenharmony_ci# verify: Server displays the received information 198c87c5fbaSopenharmony_ci# 199c87c5fbaSopenharmony_ci# check: Server sends response containing Type=1(NON), Code=65(2.01 200c87c5fbaSopenharmony_ci# Created) 201c87c5fbaSopenharmony_ci# 202c87c5fbaSopenharmony_ci# verify: client displays received response 203c87c5fbaSopenharmony_ci# 204c87c5fbaSopenharmony_cifunction TD_COAP_CORE_06 { 205c87c5fbaSopenharmony_ci clientopts="$callopts -m post -t 0 -e sometext -N" 206c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/test 207c87c5fbaSopenharmony_ci echo "perform POST (NON) on resource $testaddress" 208c87c5fbaSopenharmony_ci start_coap_test $1 209c87c5fbaSopenharmony_ci} 210c87c5fbaSopenharmony_ci 211c87c5fbaSopenharmony_ci## 212c87c5fbaSopenharmony_ci# Perform PUT transaction (NON mode) on resource /test 213c87c5fbaSopenharmony_ci# 214c87c5fbaSopenharmony_ci# pre: /test exists and can handle PUT 215c87c5fbaSopenharmony_ci# 216c87c5fbaSopenharmony_ci# Client sends a PUT request with Type=1(NON), Code=3(PUT), 217c87c5fbaSopenharmony_ci# arbitrary payload, content type option 218c87c5fbaSopenharmony_ci# 219c87c5fbaSopenharmony_ci# check: sent request contains Type value indicating 1 and Code value 220c87c5fbaSopenharmony_ci# indicating 3 221c87c5fbaSopenharmony_ci# 222c87c5fbaSopenharmony_ci# verify: Server displays the received information 223c87c5fbaSopenharmony_ci# 224c87c5fbaSopenharmony_ci# check: Server sends response containing Type=1(NON), Code=68(2.04 225c87c5fbaSopenharmony_ci# Changed) 226c87c5fbaSopenharmony_ci# 227c87c5fbaSopenharmony_ci# verify: client displays received response 228c87c5fbaSopenharmony_ci# 229c87c5fbaSopenharmony_cifunction TD_COAP_CORE_07 { 230c87c5fbaSopenharmony_ci clientopts="$callopts -m put -t 0 -e sometext -N" 231c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/test 232c87c5fbaSopenharmony_ci echo "perform PUT (NON) on resource $testaddress" 233c87c5fbaSopenharmony_ci start_coap_test $1 234c87c5fbaSopenharmony_ci} 235c87c5fbaSopenharmony_ci 236c87c5fbaSopenharmony_ci## 237c87c5fbaSopenharmony_ci# Perform DELETE transaction (NON mode) on resource /test 238c87c5fbaSopenharmony_ci# 239c87c5fbaSopenharmony_ci# pre: /test exists and can handle DELETE 240c87c5fbaSopenharmony_ci# 241c87c5fbaSopenharmony_ci# Client sends a DELETE request with Type=1(NON), Code=4(DELETE) 242c87c5fbaSopenharmony_ci# 243c87c5fbaSopenharmony_ci# check: sent request contains Type value indicating 1 and Code value 244c87c5fbaSopenharmony_ci# indicating 4 245c87c5fbaSopenharmony_ci# 246c87c5fbaSopenharmony_ci# check: Server sends response containing Type=1(NON), Code=66(2.02 247c87c5fbaSopenharmony_ci# Deleted) 248c87c5fbaSopenharmony_ci# 249c87c5fbaSopenharmony_ci# verify: client displays received response 250c87c5fbaSopenharmony_ci# 251c87c5fbaSopenharmony_cifunction TD_COAP_CORE_08 { 252c87c5fbaSopenharmony_ci clientopts="$callopts -m delete -N" 253c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/test 254c87c5fbaSopenharmony_ci echo "perform DELETE (NON) on resource $testaddress" 255c87c5fbaSopenharmony_ci start_coap_test $1 256c87c5fbaSopenharmony_ci} 257c87c5fbaSopenharmony_ci 258c87c5fbaSopenharmony_ci## 259c87c5fbaSopenharmony_ci# Perform GET transaction with a separate response on resource /separate 260c87c5fbaSopenharmony_ci# 261c87c5fbaSopenharmony_ci# pre: resource /separate exists which cannot be served immediately and which 262c87c5fbaSopenharmony_ci# cannot be acknowledged in a piggy-backed way 263c87c5fbaSopenharmony_ci# 264c87c5fbaSopenharmony_ci# Client sends a confirmable GET request to server's resource 265c87c5fbaSopenharmony_ci# 266c87c5fbaSopenharmony_ci# check: sent request contains Type=0(CON), Code=1(GET), client 267c87c5fbaSopenharmony_ci# generated Message ID 268c87c5fbaSopenharmony_ci# 269c87c5fbaSopenharmony_ci# check: Server sends response containing Type=2(ACK), message ID same 270c87c5fbaSopenharmony_ci# as the request, empty Payload 271c87c5fbaSopenharmony_ci# 272c87c5fbaSopenharmony_ci# check: Server sends response containing Type=0(CON), Code=69(2.05 273c87c5fbaSopenharmony_ci# content), Payload=Content of the requested resource, Content type option 274c87c5fbaSopenharmony_ci# 275c87c5fbaSopenharmony_ci# check: Client sends response containing Type=2(ACK), message ID same 276c87c5fbaSopenharmony_ci# as the response, empty Payload 277c87c5fbaSopenharmony_ci# 278c87c5fbaSopenharmony_ci# verify: client displays received response 279c87c5fbaSopenharmony_ci# 280c87c5fbaSopenharmony_cifunction TD_COAP_CORE_09 { 281c87c5fbaSopenharmony_ci clientopts="$callopts -m get" 282c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/separate 283c87c5fbaSopenharmony_ci echo "perform GET (CON) on resource $testaddress which cannot be served immediately" 284c87c5fbaSopenharmony_ci start_coap_test $1 285c87c5fbaSopenharmony_ci} 286c87c5fbaSopenharmony_ci 287c87c5fbaSopenharmony_ci## 288c87c5fbaSopenharmony_ci# Perform GET transaction with Token on resource /test 289c87c5fbaSopenharmony_ci# 290c87c5fbaSopenharmony_ci# pre: resource /test exists which can handle GET requests 291c87c5fbaSopenharmony_ci# 292c87c5fbaSopenharmony_ci# Client sends a confirmable GET request to server's resource 293c87c5fbaSopenharmony_ci# including Token option 294c87c5fbaSopenharmony_ci# 295c87c5fbaSopenharmony_ci# check: sent request contains Type=0(CON) and Code=1(GET), client 296c87c5fbaSopenharmony_ci# generated Token value, length of the token which should be between 1 297c87c5fbaSopenharmony_ci# to 8 B, Option Type=Token 298c87c5fbaSopenharmony_ci# 299c87c5fbaSopenharmony_ci# check: Server sends response containing Code=69(2.05 content), 300c87c5fbaSopenharmony_ci# length of the token should be between 1 to 8 B, Token value same as 301c87c5fbaSopenharmony_ci# the requested, Payload=Content of the requested resource, Content 302c87c5fbaSopenharmony_ci# type option 303c87c5fbaSopenharmony_ci# 304c87c5fbaSopenharmony_ci# verify: client displays received response 305c87c5fbaSopenharmony_ci# 306c87c5fbaSopenharmony_cifunction TD_COAP_CORE_10 { 307c87c5fbaSopenharmony_ci clientopts="$callopts -m get -T sometok" 308c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/test 309c87c5fbaSopenharmony_ci echo "perform GET (CON) on resource $testaddress with Token" 310c87c5fbaSopenharmony_ci start_coap_test $1 311c87c5fbaSopenharmony_ci} 312c87c5fbaSopenharmony_ci 313c87c5fbaSopenharmony_ci## 314c87c5fbaSopenharmony_ci# Perform GET transaction without Token on resource /test 315c87c5fbaSopenharmony_ci# 316c87c5fbaSopenharmony_ci# pre: resource /test exists which can handle GET requests 317c87c5fbaSopenharmony_ci# 318c87c5fbaSopenharmony_ci# Client sends a confirmable GET request to server's resource 319c87c5fbaSopenharmony_ci# not containing Token option 320c87c5fbaSopenharmony_ci# 321c87c5fbaSopenharmony_ci# check: sent request contains Type=0(CON) and Code=1(GET), no Token 322c87c5fbaSopenharmony_ci# option 323c87c5fbaSopenharmony_ci# 324c87c5fbaSopenharmony_ci# check: Server sends response containing Code=69(2.05 content), no 325c87c5fbaSopenharmony_ci# Token option, Payload=Content of the requested resource, Content 326c87c5fbaSopenharmony_ci# type option 327c87c5fbaSopenharmony_ci# 328c87c5fbaSopenharmony_ci# verify: client displays received response 329c87c5fbaSopenharmony_ci# 330c87c5fbaSopenharmony_cifunction TD_COAP_CORE_11 { 331c87c5fbaSopenharmony_ci clientopts="$callopts -m get" 332c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/test 333c87c5fbaSopenharmony_ci echo "perform GET (CON mode) without Token on resource $testaddress" 334c87c5fbaSopenharmony_ci start_coap_test $1 335c87c5fbaSopenharmony_ci} 336c87c5fbaSopenharmony_ci 337c87c5fbaSopenharmony_ci## 338c87c5fbaSopenharmony_ci# Perform GET transaction to resource /seg1/seg2/seg3 339c87c5fbaSopenharmony_ci# 340c87c5fbaSopenharmony_ci# pre: resource /seg1/seg2/seg3 exists on server 341c87c5fbaSopenharmony_ci# 342c87c5fbaSopenharmony_ci# Client sends a confirmable GET request to server's resource 343c87c5fbaSopenharmony_ci# 344c87c5fbaSopenharmony_ci# check: sent request contains Type=0(CON) and Code=1(GET), Option 345c87c5fbaSopenharmony_ci# type=URI-Path (one for each path segment) 346c87c5fbaSopenharmony_ci# 347c87c5fbaSopenharmony_ci# check: Server sends response containing Code=69(2.05 content), 348c87c5fbaSopenharmony_ci# Payload=Content of the requested resource, Content type option 349c87c5fbaSopenharmony_ci# 350c87c5fbaSopenharmony_ci# verify: client displays received response 351c87c5fbaSopenharmony_ci# 352c87c5fbaSopenharmony_cifunction TD_COAP_CORE_12 { 353c87c5fbaSopenharmony_ci clientopts="$callopts -m get" 354c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/seg1/seg2/seg3 355c87c5fbaSopenharmony_ci echo "perform GET (CON mode) on resource $testaddress" 356c87c5fbaSopenharmony_ci start_coap_test $1 357c87c5fbaSopenharmony_ci} 358c87c5fbaSopenharmony_ci 359c87c5fbaSopenharmony_ci## 360c87c5fbaSopenharmony_ci# Perform GET transaction to resource /query 361c87c5fbaSopenharmony_ci# 362c87c5fbaSopenharmony_ci# pre: resource /query exists on server 363c87c5fbaSopenharmony_ci# 364c87c5fbaSopenharmony_ci# Client sends a confirmable GET request with three Query parameters 365c87c5fbaSopenharmony_ci# (e.g. ?first=1&second=2&third=3) to server's resource 366c87c5fbaSopenharmony_ci# 367c87c5fbaSopenharmony_ci# check: sent request contains Type=0(CON) and Code=1(GET), Option 368c87c5fbaSopenharmony_ci# type=URI-Query (More than one query parameter) 369c87c5fbaSopenharmony_ci# 370c87c5fbaSopenharmony_ci# check: Server sends response containing Type=0/2(Con/ACK), 371c87c5fbaSopenharmony_ci# Code=69(2.05 content), Payload=Content of the requested resource, 372c87c5fbaSopenharmony_ci# Content type option 373c87c5fbaSopenharmony_ci# 374c87c5fbaSopenharmony_ci# verify: client displays received response 375c87c5fbaSopenharmony_ci# 376c87c5fbaSopenharmony_cifunction TD_COAP_CORE_13 { 377c87c5fbaSopenharmony_ci clientopts="$callopts -m get" 378c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/query 379c87c5fbaSopenharmony_ci query="?first=1&second=2&third=3" 380c87c5fbaSopenharmony_ci echo -e "perform GET (CON mode) on resource $testaddress with query $query" 381c87c5fbaSopenharmony_ci testaddress=$testaddress$query 382c87c5fbaSopenharmony_ci start_coap_test $1 383c87c5fbaSopenharmony_ci} 384c87c5fbaSopenharmony_ci 385c87c5fbaSopenharmony_ci## 386c87c5fbaSopenharmony_ci# Perform GET transaction to resource /test in lossy context 387c87c5fbaSopenharmony_ci# 388c87c5fbaSopenharmony_ci# pre: gateway is introduced and configured to produce packet loss, 389c87c5fbaSopenharmony_ci# resource /test exists on server 390c87c5fbaSopenharmony_ci# 391c87c5fbaSopenharmony_ci# Configuration=CoAP_CFG_02 392c87c5fbaSopenharmony_ci# 393c87c5fbaSopenharmony_ci# observe: One dropped request, one dropped request ACK, one dropped 394c87c5fbaSopenharmony_ci# response, one dropped response ACK and its retransmission, test 395c87c5fbaSopenharmony_ci# sequence should be executed several times 396c87c5fbaSopenharmony_ci# 397c87c5fbaSopenharmony_ci# Client sends a confirmable GET request to server's resource 398c87c5fbaSopenharmony_ci# 399c87c5fbaSopenharmony_ci# check: sent request contains Type=0(CON) and Code=1(GET), Client 400c87c5fbaSopenharmony_ci# generated Message ID 401c87c5fbaSopenharmony_ci# 402c87c5fbaSopenharmony_ci# check: Server sends response containing Type=2(ACK), Code=69(2.05 403c87c5fbaSopenharmony_ci# content), Payload=Content of the requested resource, Content type 404c87c5fbaSopenharmony_ci# option 405c87c5fbaSopenharmony_ci# 406c87c5fbaSopenharmony_ci# verify: client displays received response 407c87c5fbaSopenharmony_ci# 408c87c5fbaSopenharmony_cifunction TD_COAP_CORE_14 { 409c87c5fbaSopenharmony_ci clientopts="$callopts -m get" 410c87c5fbaSopenharmony_ci #FIXME: address for lossy context? 411c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/test 412c87c5fbaSopenharmony_ci echo "perform GET (CON mode) on resource $testaddress in lossy context" 413c87c5fbaSopenharmony_ci start_coap_test $1 414c87c5fbaSopenharmony_ci} 415c87c5fbaSopenharmony_ci 416c87c5fbaSopenharmony_ci## 417c87c5fbaSopenharmony_ci# Perform GET transaction to resource /separate in lossy context 418c87c5fbaSopenharmony_ci# 419c87c5fbaSopenharmony_ci# pre: gateway is introduced and configured to produce packet loss, 420c87c5fbaSopenharmony_ci# resource /separate exists which cannot be served immediately and 421c87c5fbaSopenharmony_ci# which cannot be acknowledged in a piggy-backed way 422c87c5fbaSopenharmony_ci# 423c87c5fbaSopenharmony_ci# Configuration=CoAP_CFG_02 424c87c5fbaSopenharmony_ci# 425c87c5fbaSopenharmony_ci# observe: One dropped request, one dropped request ACK, one dropped 426c87c5fbaSopenharmony_ci# response, one dropped response ACK and its retransmission, test 427c87c5fbaSopenharmony_ci# sequence should be executed several times 428c87c5fbaSopenharmony_ci# 429c87c5fbaSopenharmony_ci# Client sends a confirmable GET request to server's resource 430c87c5fbaSopenharmony_ci# 431c87c5fbaSopenharmony_ci# check: sent request contains Type=0(CON) and Code=1(GET), Client 432c87c5fbaSopenharmony_ci# generated Message ID 433c87c5fbaSopenharmony_ci# 434c87c5fbaSopenharmony_ci# check: server sends response containing Type=2(ACK), Message ID same 435c87c5fbaSopenharmony_ci# as the request, empty Payload 436c87c5fbaSopenharmony_ci# 437c87c5fbaSopenharmony_ci# check: Server sends response containing Type=0(CON), Code=69(2.05 438c87c5fbaSopenharmony_ci# content), Payload=Content of the requested resource, Content type 439c87c5fbaSopenharmony_ci# option 440c87c5fbaSopenharmony_ci# 441c87c5fbaSopenharmony_ci# check: Client sends response containing Type=2(ACK), message ID same 442c87c5fbaSopenharmony_ci# as the response, empty Payload 443c87c5fbaSopenharmony_ci# 444c87c5fbaSopenharmony_ci# verify: client displays received response 445c87c5fbaSopenharmony_ci# 446c87c5fbaSopenharmony_cifunction TD_COAP_CORE_15 { 447c87c5fbaSopenharmony_ci clientopts="$callopts -m get" 448c87c5fbaSopenharmony_ci #FIXME: address for lossy context? 449c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/separate 450c87c5fbaSopenharmony_ci echo "perform GET (CON mode) on resource $testaddress in lossy context" 451c87c5fbaSopenharmony_ci start_coap_test $1 452c87c5fbaSopenharmony_ci} 453c87c5fbaSopenharmony_ci 454c87c5fbaSopenharmony_ci### LINK ### 455c87c5fbaSopenharmony_ci 456c87c5fbaSopenharmony_ci## 457c87c5fbaSopenharmony_ci# Access to well-known interface for resource discovery 458c87c5fbaSopenharmony_ci# 459c87c5fbaSopenharmony_ci# Pre: client supports CoRE Link Format, server supports 460c87c5fbaSopenharmony_ci# /.well-known/core resource and the CoRE Link Format 461c87c5fbaSopenharmony_ci# 462c87c5fbaSopenharmony_ci# Client retrieves Server's list of resource 463c87c5fbaSopenharmony_ci# 464c87c5fbaSopenharmony_ci# check: client sends GET request for /.well-known/core resource 465c87c5fbaSopenharmony_ci# 466c87c5fbaSopenharmony_ci# check: server sends response containing content-type option 467c87c5fbaSopenharmony_ci# indicating 40 (application/link-format), payload indicating all the 468c87c5fbaSopenharmony_ci# links available on Server 469c87c5fbaSopenharmony_ci# 470c87c5fbaSopenharmony_ci# client displays the list of resources available on Server 471c87c5fbaSopenharmony_ci# 472c87c5fbaSopenharmony_cifunction TD_COAP_LINK_01 { 473c87c5fbaSopenharmony_ci clientopts="$callopts -m get" 474c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/.well-known/core 475c87c5fbaSopenharmony_ci echo "retrieve server's list of resource" 476c87c5fbaSopenharmony_ci start_tcpdump $1 477c87c5fbaSopenharmony_ci if [ $verbose ]; then 478c87c5fbaSopenharmony_ci echo "client command: $COAP_CLIENT $clientopts $testaddress" 479c87c5fbaSopenharmony_ci fi 480c87c5fbaSopenharmony_ci clientoutput=$($COAP_CLIENT $clientopts "$testaddress") 481c87c5fbaSopenharmony_ci if [[ ! $(echo $clientoutput | grep rt) ]] ; then 482c87c5fbaSopenharmony_ci echo "no resource with attribute rt found on server" 483c87c5fbaSopenharmony_ci else 484c87c5fbaSopenharmony_ci rt="${clientoutput##*rt=}" 485c87c5fbaSopenharmony_ci rt="${rt%%;*}" 486c87c5fbaSopenharmony_ci fi 487c87c5fbaSopenharmony_ci echo -e "\nOutput of client:" 488c87c5fbaSopenharmony_ci echo -e $clientoutput 489c87c5fbaSopenharmony_ci echo 490c87c5fbaSopenharmony_ci kill_tcpdump 491c87c5fbaSopenharmony_ci} 492c87c5fbaSopenharmony_ci 493c87c5fbaSopenharmony_ci## 494c87c5fbaSopenharmony_ci# Use filtered requests for limiting discovery results 495c87c5fbaSopenharmony_ci# 496c87c5fbaSopenharmony_ci# Pre: client supports CoRE Link Format, server supports CoRE Link 497c87c5fbaSopenharmony_ci# Format and offers different types of resources (Type 1, Type 2 498c87c5fbaSopenharmony_ci# (extracted from /.well-knwon/core resource 499c87c5fbaSopenharmony_ci# 500c87c5fbaSopenharmony_ci# Client retrieves Server's list of resource of a specific Type 1 501c87c5fbaSopenharmony_ci# 502c87c5fbaSopenharmony_ci# check: client sends GET request for /.well-known/core resource 503c87c5fbaSopenharmony_ci# containing URI-Query indicating "rt=Type1" 504c87c5fbaSopenharmony_ci# 505c87c5fbaSopenharmony_ci# check: server sends response containing content-type option 506c87c5fbaSopenharmony_ci# indicating 40 (application/link-format), payload indicating only the 507c87c5fbaSopenharmony_ci# links of type Type1 available on server 508c87c5fbaSopenharmony_ci# 509c87c5fbaSopenharmony_ci# client displays the list of resources of type Type1 available on Server 510c87c5fbaSopenharmony_ci# 511c87c5fbaSopenharmony_cifunction TD_COAP_LINK_02 { 512c87c5fbaSopenharmony_ci clientopts="$callopts -m get" 513c87c5fbaSopenharmony_ci echo "retrieve server's list of resource for appropriate type" 514c87c5fbaSopenharmony_ci if [[ ! -z $rt ]]; then 515c87c5fbaSopenharmony_ci testaddress="coap://$SERVERTUP/.well-known/core?rt=$rt" 516c87c5fbaSopenharmony_ci else 517c87c5fbaSopenharmony_ci echo "no appropriate resource found. Skipping test" 518c87c5fbaSopenharmony_ci return 519c87c5fbaSopenharmony_ci fi 520c87c5fbaSopenharmony_ci start_coap_test $1 521c87c5fbaSopenharmony_ci} 522c87c5fbaSopenharmony_ci 523c87c5fbaSopenharmony_ci### BLOCK ### 524c87c5fbaSopenharmony_ci 525c87c5fbaSopenharmony_ci## 526c87c5fbaSopenharmony_ci# Perform GET blockwise transfer for large resource (early negotiation) 527c87c5fbaSopenharmony_ci# 528c87c5fbaSopenharmony_ci# pre: Client supports Block transfers, Server supports Block 529c87c5fbaSopenharmony_ci# transfers, Server offers a large resource /large, client knows 530c87c5fbaSopenharmony_ci# /large requires block transfer 531c87c5fbaSopenharmony_ci# 532c87c5fbaSopenharmony_ci# Client is requested to retrieve resource /large 533c87c5fbaSopenharmony_ci# 534c87c5fbaSopenharmony_ci# check: client sends a GET request containing Block2 option indicating block 535c87c5fbaSopenharmony_ci# number 0 and desired block size 536c87c5fbaSopenharmony_ci# 537c87c5fbaSopenharmony_ci# check: Each request contains Block2 option indicating block number 538c87c5fbaSopenharmony_ci# of the next block and size of the last received block 539c87c5fbaSopenharmony_ci# 540c87c5fbaSopenharmony_ci# check: server sends further responses containing Block2 option 541c87c5fbaSopenharmony_ci# indicating block number and size 542c87c5fbaSopenharmony_ci# 543c87c5fbaSopenharmony_ci# verify: client displays received response 544c87c5fbaSopenharmony_ci# 545c87c5fbaSopenharmony_cifunction TD_COAP_BLOCK_01 { 546c87c5fbaSopenharmony_ci clientopts="$callopts -m get -b 1024" 547c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/large 548c87c5fbaSopenharmony_ci echo "perform GET on large resource $testaddress (early negotiation)" 549c87c5fbaSopenharmony_ci start_coap_test $1 550c87c5fbaSopenharmony_ci} 551c87c5fbaSopenharmony_ci 552c87c5fbaSopenharmony_ci## 553c87c5fbaSopenharmony_ci# Perform GET blockwise transfer for large resource (late negotiation) 554c87c5fbaSopenharmony_ci# 555c87c5fbaSopenharmony_ci# pre: Client supports Block transfers, Server supports Block 556c87c5fbaSopenharmony_ci# transfers, Server offers a large resource /large, client does not 557c87c5fbaSopenharmony_ci# know /large requires block transfer 558c87c5fbaSopenharmony_ci# 559c87c5fbaSopenharmony_ci# Client is requested to retrieve resource /large 560c87c5fbaSopenharmony_ci# 561c87c5fbaSopenharmony_ci# check: client sends a GET request not containing Block2 option 562c87c5fbaSopenharmony_ci# 563c87c5fbaSopenharmony_ci# check: server sends response containing Block2 option indicating 564c87c5fbaSopenharmony_ci# block number and size 565c87c5fbaSopenharmony_ci# 566c87c5fbaSopenharmony_ci# check: Each request contains Block2 option indicating block number 567c87c5fbaSopenharmony_ci# of the next block and size of the last received block or the desired 568c87c5fbaSopenharmony_ci# size of the next block 569c87c5fbaSopenharmony_ci# 570c87c5fbaSopenharmony_ci# check: server sends further responses containing Block2 option 571c87c5fbaSopenharmony_ci# indicating block number and size 572c87c5fbaSopenharmony_ci# 573c87c5fbaSopenharmony_ci# verify: client displays received response 574c87c5fbaSopenharmony_ci# 575c87c5fbaSopenharmony_cifunction TD_COAP_BLOCK_02 { 576c87c5fbaSopenharmony_ci clientopts="$callopts -m get" 577c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/large 578c87c5fbaSopenharmony_ci echo "perform GET blockwise transfer for large resource (late negotiation) on resource $testaddress" 579c87c5fbaSopenharmony_ci start_coap_test $1 stop 580c87c5fbaSopenharmony_ci} 581c87c5fbaSopenharmony_ci 582c87c5fbaSopenharmony_ci## 583c87c5fbaSopenharmony_ci# Perform PUT blockwise transfer for large resource 584c87c5fbaSopenharmony_ci# 585c87c5fbaSopenharmony_ci# pre: Client supports Block transfers, Server supports Block 586c87c5fbaSopenharmony_ci# transfers, Server offers a large updatable resource /large-update 587c87c5fbaSopenharmony_ci# 588c87c5fbaSopenharmony_ci# Client is requested to retrieve resource /large-update on server 589c87c5fbaSopenharmony_ci# 590c87c5fbaSopenharmony_ci# check: client sends a PUT request containing Block1 option 591c87c5fbaSopenharmony_ci# indicating block number 0 and block size 592c87c5fbaSopenharmony_ci# 593c87c5fbaSopenharmony_ci# check: client sends further request containing Block1 option 594c87c5fbaSopenharmony_ci# indicating block number and size 595c87c5fbaSopenharmony_ci# 596c87c5fbaSopenharmony_ci# verify: server indicates presence of the complete updated resource 597c87c5fbaSopenharmony_ci# /large-update 598c87c5fbaSopenharmony_ci# 599c87c5fbaSopenharmony_cifunction TD_COAP_BLOCK_03 { 600c87c5fbaSopenharmony_ci clientopts="$callopts -m put -b 1024" 601c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/large-update 602c87c5fbaSopenharmony_ci echo "perform PUT on large resource $testaddress" 603c87c5fbaSopenharmony_ci start_coap_test $1 604c87c5fbaSopenharmony_ci} 605c87c5fbaSopenharmony_ci 606c87c5fbaSopenharmony_ci## 607c87c5fbaSopenharmony_ci# Perform POST blockwise transfer for large resource 608c87c5fbaSopenharmony_ci# 609c87c5fbaSopenharmony_ci# pre: Client supports Block transfers, Server supports Block 610c87c5fbaSopenharmony_ci# transfers, Server accepts creation of new resources on /large-create 611c87c5fbaSopenharmony_ci# 612c87c5fbaSopenharmony_ci# Client is requested to create a new resource on server 613c87c5fbaSopenharmony_ci# 614c87c5fbaSopenharmony_ci# check: client sends a POST request containing Block1 option 615c87c5fbaSopenharmony_ci# indicating block number 0 and block size 616c87c5fbaSopenharmony_ci# 617c87c5fbaSopenharmony_ci# check: client sends further requests containing Block1 option 618c87c5fbaSopenharmony_ci# indicating block number and size 619c87c5fbaSopenharmony_ci# 620c87c5fbaSopenharmony_ci# verify: server indicates presence of the complete new resource 621c87c5fbaSopenharmony_ci# 622c87c5fbaSopenharmony_cifunction TD_COAP_BLOCK_04 { 623c87c5fbaSopenharmony_ci clientopts="$callopts -m post -b 1024" 624c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/large-create 625c87c5fbaSopenharmony_ci echo "perform POST on large resource $testaddress" 626c87c5fbaSopenharmony_ci start_coap_test $1 627c87c5fbaSopenharmony_ci} 628c87c5fbaSopenharmony_ci 629c87c5fbaSopenharmony_ci# # OBS 630c87c5fbaSopenharmony_ci 631c87c5fbaSopenharmony_ci## 632c87c5fbaSopenharmony_ci# Handle observe option 633c87c5fbaSopenharmony_ci# 634c87c5fbaSopenharmony_ci# pre: client supports Observe option, server supports observe option, 635c87c5fbaSopenharmony_ci# server offers an observable resource /obs which changes periodically 636c87c5fbaSopenharmony_ci# (e.g. every 5s.) 637c87c5fbaSopenharmony_ci# 638c87c5fbaSopenharmony_ci# client is requested to observe resource /obs on server 639c87c5fbaSopenharmony_ci# 640c87c5fbaSopenharmony_ci# check: client sends a GET request containing observe option 641c87c5fbaSopenharmony_ci# 642c87c5fbaSopenharmony_ci# verify: client displays the received information 643c87c5fbaSopenharmony_ci# 644c87c5fbaSopenharmony_ci# check: server sends response containing observe option indicating 645c87c5fbaSopenharmony_ci# increasing values, as resource changes 646c87c5fbaSopenharmony_ci# 647c87c5fbaSopenharmony_ci# verify: client displays the updated information 648c87c5fbaSopenharmony_ci# 649c87c5fbaSopenharmony_cifunction TD_COAP_OBS_01 { 650c87c5fbaSopenharmony_ci # we need some time to verify the correct behavior 651c87c5fbaSopenharmony_ci clientopts="$callopts -s 0" #"-v 5 -B $longtimeout -s 0" 652c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/obs 653c87c5fbaSopenharmony_ci echo "observe resource $testaddress" 654c87c5fbaSopenharmony_ci start_coap_test $1 655c87c5fbaSopenharmony_ci} 656c87c5fbaSopenharmony_ci 657c87c5fbaSopenharmony_ci## 658c87c5fbaSopenharmony_ci# Stop resource observation 659c87c5fbaSopenharmony_ci# 660c87c5fbaSopenharmony_ci# pre: client supports Observe option, server supports observe option, 661c87c5fbaSopenharmony_ci# server offers an observable resource /obs which changes periodically 662c87c5fbaSopenharmony_ci# (e.g. every 5s.), client is observing /obs on server 663c87c5fbaSopenharmony_ci# 664c87c5fbaSopenharmony_ci# client is requested to stop observing resource /obs on server 665c87c5fbaSopenharmony_ci# 666c87c5fbaSopenharmony_ci# check: client sends a GET request not containing observe option 667c87c5fbaSopenharmony_ci# 668c87c5fbaSopenharmony_ci# verify: client displays the received information 669c87c5fbaSopenharmony_ci# 670c87c5fbaSopenharmony_ci# check: server does not send further response 671c87c5fbaSopenharmony_ci# 672c87c5fbaSopenharmony_ci# verify: client does not display the updated information 673c87c5fbaSopenharmony_ci# 674c87c5fbaSopenharmony_ci# function TD_COAP_OBS_02 { 675c87c5fbaSopenharmony_ci# #FIXME: client does not support stopping yet 676c87c5fbaSopenharmony_ci # we need some time to verify the correct behavior 677c87c5fbaSopenharmony_ci# clientopts="-v 5 -B $longtimeout -s 1" 678c87c5fbaSopenharmony_ci# testaddress=coap://$SERVERTUP/obs 679c87c5fbaSopenharmony_ci# echo "stop observing resource $testaddress" 680c87c5fbaSopenharmony_ci# start_coap_test $1 681c87c5fbaSopenharmony_ci# } 682c87c5fbaSopenharmony_ci 683c87c5fbaSopenharmony_ci## 684c87c5fbaSopenharmony_ci# client detection of deregistration (Max-Age) 685c87c5fbaSopenharmony_ci# 686c87c5fbaSopenharmony_ci# pre: client supports Observe option, server supports observe option, 687c87c5fbaSopenharmony_ci# server offers an observable resource /obs which changes periodically 688c87c5fbaSopenharmony_ci# (e.g. every 5s.), client is observing /obs on server 689c87c5fbaSopenharmony_ci# 690c87c5fbaSopenharmony_ci# Server is rebooted 691c87c5fbaSopenharmony_ci# 692c87c5fbaSopenharmony_ci# check: Server does not send notifications 693c87c5fbaSopenharmony_ci# 694c87c5fbaSopenharmony_ci# verify: Client does not display updated information 695c87c5fbaSopenharmony_ci# 696c87c5fbaSopenharmony_ci# verify: After Max-Age expiration, client sends a new GET with observe 697c87c5fbaSopenharmony_ci# option for Server's observable resource 698c87c5fbaSopenharmony_ci# 699c87c5fbaSopenharmony_ci# check: Sent request contains Observe option indicating 0 700c87c5fbaSopenharmony_ci# 701c87c5fbaSopenharmony_ci# check: Server sends response containing Observe option 702c87c5fbaSopenharmony_ci# 703c87c5fbaSopenharmony_ci# verify: client displays the received information 704c87c5fbaSopenharmony_ci# 705c87c5fbaSopenharmony_ci# check: Server sends response containing Observe option indicating 706c87c5fbaSopenharmony_ci# increasing values, as resource changes 707c87c5fbaSopenharmony_ci# 708c87c5fbaSopenharmony_ci# verify: Client displays the updated information 709c87c5fbaSopenharmony_ci# 710c87c5fbaSopenharmony_cifunction TD_COAP_OBS_03 { 711c87c5fbaSopenharmony_ci clientopts="$callopts -s 0"#"-v5 -B $longtimeout -s 0" 712c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/obs 713c87c5fbaSopenharmony_ci echo "client detection of deregistration (Max-Age)" 714c87c5fbaSopenharmony_ci start_coap_test $1 715c87c5fbaSopenharmony_ci} 716c87c5fbaSopenharmony_ci 717c87c5fbaSopenharmony_ci## 718c87c5fbaSopenharmony_ci# Server detection of deregistration (client OFF) 719c87c5fbaSopenharmony_ci# 720c87c5fbaSopenharmony_ci# pre: client supports Observe option, server supports observe option, 721c87c5fbaSopenharmony_ci# server offers an observable resource /obs which changes periodically 722c87c5fbaSopenharmony_ci# (e.g. every 5s.), client is observing /obs on server 723c87c5fbaSopenharmony_ci# 724c87c5fbaSopenharmony_ci# Client is switched off 725c87c5fbaSopenharmony_ci# 726c87c5fbaSopenharmony_ci# check: Server’s confirmable responses are not acknowledged 727c87c5fbaSopenharmony_ci# 728c87c5fbaSopenharmony_ci# verify: After some delay, Server does not send further responses 729c87c5fbaSopenharmony_ci# 730c87c5fbaSopenharmony_cifunction TD_COAP_OBS_04 { 731c87c5fbaSopenharmony_ci clientopts="$callopts -s 0" 732c87c5fbaSopenharmony_ci#"-v 5 -B $longtimeout -s 0" 733c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/obs 734c87c5fbaSopenharmony_ci echo "server detection of deregistration (client off)" 735c87c5fbaSopenharmony_ci start_coap_test $1 wait 736c87c5fbaSopenharmony_ci} 737c87c5fbaSopenharmony_ci 738c87c5fbaSopenharmony_ci## 739c87c5fbaSopenharmony_ci# Server detection of deregistration (explicit RST) 740c87c5fbaSopenharmony_ci# 741c87c5fbaSopenharmony_ci# pre: client supports Observe option, server supports observe option, 742c87c5fbaSopenharmony_ci# server offers an observable resource /obs which changes periodically 743c87c5fbaSopenharmony_ci# (e.g. every 5s.), client is observing /obs on server 744c87c5fbaSopenharmony_ci# 745c87c5fbaSopenharmony_ci# Client is rebooted 746c87c5fbaSopenharmony_ci# 747c87c5fbaSopenharmony_ci# check: Server sends response containing Observe option 748c87c5fbaSopenharmony_ci# 749c87c5fbaSopenharmony_ci# verify: Client discards response and does not display information 750c87c5fbaSopenharmony_ci# 751c87c5fbaSopenharmony_ci# check: Client sends RST to Server 752c87c5fbaSopenharmony_ci# 753c87c5fbaSopenharmony_ci# check: Server does not send further response 754c87c5fbaSopenharmony_ci# 755c87c5fbaSopenharmony_cifunction TD_COAP_OBS_05 { 756c87c5fbaSopenharmony_ci clientopts="$callopts -s 0 -p $CLIENTPORT" 757c87c5fbaSopenharmony_ci#"-v 5 -B $longtimeout -p $CLIENTPORT -s 0" 758c87c5fbaSopenharmony_ci testaddress=coap://$SERVERTUP/obs 759c87c5fbaSopenharmony_ci echo "server detection of deregistration (explicit RST)" 760c87c5fbaSopenharmony_ci start_coap_test $1 stop 761c87c5fbaSopenharmony_ci clientopts="$callopts -p $CLIENTPORT -s 0 -N" 762c87c5fbaSopenharmony_ci#"-v 5 -B $clienttimeout -p $CLIENTPORT -s 0 -N" 763c87c5fbaSopenharmony_ci testaddress=coap://[::1]/obs 764c87c5fbaSopenharmony_ci start_coap_test $1 765c87c5fbaSopenharmony_ci} 766