Fix tests for http/1 and http/2 only respectively
This commit is contained in:
parent
a7a699a8b5
commit
55377786c1
9 changed files with 121 additions and 32 deletions
|
|
@ -266,7 +266,7 @@ restconf_connection_sanity(clicon_handle h,
|
|||
if (rc->rc_ssl == NULL &&
|
||||
rc->rc_proto == HTTP_2 &&
|
||||
clicon_option_bool(h, "CLICON_RESTCONF_HTTP2_PLAIN") == 0){
|
||||
if (netconf_invalid_value_xml(&xerr, "protocol", "Non-tls HTTP/2 is disabled") < 0)
|
||||
if (netconf_invalid_value_xml(&xerr, "protocol", "Plain HTTP/2 is disabled") < 0)
|
||||
goto done;
|
||||
if ((media_str = restconf_param_get(h, "HTTP_ACCEPT")) == NULL){
|
||||
media_out = YANG_DATA_JSON;
|
||||
|
|
|
|||
|
|
@ -406,8 +406,8 @@ function wait_restconf(){
|
|||
else
|
||||
myproto=${RCPROTO}
|
||||
fi
|
||||
# echo "curl $CURLOPTS $* $myproto://localhost/restconf"
|
||||
hdr=$(curl $CURLOPTS $* $myproto://localhost/restconf 2> /dev/null)
|
||||
# echo "curl $CURLOPTS $myproto://localhost/restconf"
|
||||
hdr=$(curl $CURLOPTS $myproto://localhost/restconf 2> /dev/null)
|
||||
# echo "hdr:\"$hdr\""
|
||||
let i=0;
|
||||
while [[ $hdr != *"200"* ]]; do
|
||||
|
|
|
|||
|
|
@ -156,13 +156,21 @@ function testrun()
|
|||
|
||||
new "start restconf daemon"
|
||||
# inline of start_restconf, cant make quotes to work
|
||||
echo "sudo -u $wwwstartuser -s $clixon_restconf $RCLOG -D $DBG -f $cfg -R <xml>"
|
||||
echo "sudo -u $wwwstartuser -s $clixon_restconf $RCLOG -D $DBG -f $cfg -R $RESTCONFIG1"
|
||||
sudo -u $wwwstartuser -s $clixon_restconf $RCLOG -D $DBG -f $cfg -R "$RESTCONFIG1" &
|
||||
if [ $? -ne 0 ]; then
|
||||
err1 "expected 0" "$?"
|
||||
fi
|
||||
fi
|
||||
|
||||
#------------------------------------------------------- HTTP/1 + HTTP/2
|
||||
if [ ${HAVE_LIBNGHTTP2} = true -a ${HAVE_LIBEVHTP} = true ]; then
|
||||
|
||||
if [ $proto = http ]; then # No plain http/2
|
||||
HVER=1.1
|
||||
else
|
||||
HVER=2
|
||||
fi
|
||||
new "wait restconf"
|
||||
wait_restconf
|
||||
|
||||
|
|
@ -170,7 +178,51 @@ function testrun()
|
|||
echo "curl $CURLOPTS -X GET $proto://$addr/.well-known/host-meta"
|
||||
expectpart "$(curl $CURLOPTS -X GET $proto://$addr/.well-known/host-meta)" 0 "HTTP/$HVER 200" "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>"
|
||||
|
||||
if [ ${HAVE_LIBNGHTTP2} = true -a ${HAVE_LIBEVHTP} = false ]; then
|
||||
echo "fcgi or native+http/1 or native+http/1+http/2"
|
||||
if [ "${WITH_RESTCONF}" = "native" ]; then # XXX does not work with nginx
|
||||
new "restconf GET http/1.0 - returns 1.0"
|
||||
expectpart "$(curl $CURLOPTS --http1.0 -X GET $proto://$addr/.well-known/host-meta)" 0 'HTTP/1.0 200 OK' "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>"
|
||||
fi
|
||||
new "restconf GET http/1.1"
|
||||
expectpart "$(curl $CURLOPTS --http1.1 -X GET $proto://$addr/.well-known/host-meta)" 0 'HTTP/1.1 200 OK' "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>"
|
||||
|
||||
new "restconf GET http/2 switch protocol"
|
||||
if [ $proto = http ]; then # see (2) https to http port in restconf_main_native.c
|
||||
expectpart "$(curl $CURLOPTS --http2 -X GET $proto://$addr/.well-known/host-meta)" 0 "" "HTTP/1.1 200" "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>"
|
||||
else
|
||||
expectpart "$(curl $CURLOPTS --http2 -X GET $proto://$addr/.well-known/host-meta)" 0 "" "HTTP/2 200" "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>" # Only if https: HTTP/1.1 101 Switching Protocols
|
||||
fi
|
||||
|
||||
# http2-prior knowledge
|
||||
if [ $proto = http ]; then # see (2) https to http port in restconf_main_native.c
|
||||
new "restconf GET http/2 prior-knowledge (http)"
|
||||
expectpart "$(curl $CURLOPTS --http2-prior-knowledge -X GET $proto://$addr/.well-known/host-meta 2>&1)" "16 52 55" # "Error in the HTTP2 framing layer" "Connection reset by peer"
|
||||
else
|
||||
new "restconf GET https/2 prior-knowledge"
|
||||
expectpart "$(curl $CURLOPTS --http2-prior-knowledge -X GET $proto://$addr/.well-known/host-meta)" 0 "HTTP/$HVER 200" "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>"
|
||||
fi
|
||||
|
||||
# Wrong protocol http when https or vice versa
|
||||
if [ $proto = http ]; then # see (2) https to http port in restconf_main_native.c
|
||||
new "Wrong proto=https on http port, expect err 35 wrong version number"
|
||||
expectpart "$(curl $CURLOPTS -X GET https://$addr:80/.well-known/host-meta 2>&1)" 35 #"wrong version number" # dependent on curl version
|
||||
else # see (1) http to https port in restconf_main_native.c
|
||||
new "Wrong proto=http on https port, expect bad request"
|
||||
expectpart "$(curl $CURLOPTS -X GET http://$addr:443/.well-known/host-meta)" 0 "HTTP/" "400"
|
||||
# expectpart "$(curl $CURLOPTS -X GET http://$addr:443/.well-known/host-meta 2>&1)" 56 "Connection reset by peer"
|
||||
fi
|
||||
|
||||
#------------------------------------------------------- HTTP/2 ONLY
|
||||
elif [ ${HAVE_LIBNGHTTP2} = true -a ${HAVE_LIBEVHTP} = false ]; then
|
||||
HVER=2
|
||||
|
||||
new "wait restconf"
|
||||
wait_restconf https
|
||||
|
||||
new "restconf root discovery. RFC 8040 3.1 (xml+xrd)"
|
||||
echo "curl $CURLOPTS -X GET $proto://$addr/.well-known/host-meta"
|
||||
expectpart "$(curl $CURLOPTS -X GET $proto://$addr/.well-known/host-meta)" 0 "HTTP/$HVER 200" "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>"
|
||||
|
||||
echo "native + http/2 only"
|
||||
# Important here is robustness of restconf daemon, not a meaningful reply
|
||||
if [ $proto = http ]; then # see (2) https to http port in restconf_main_native.c
|
||||
|
|
@ -210,7 +262,18 @@ function testrun()
|
|||
new "Wrong proto=http on https port, expect bad request"
|
||||
expectpart "$(curl $CURLOPTS -X GET http://$addr:443/.well-known/host-meta)" "16 52 55" --not-- 'HTTP'
|
||||
fi
|
||||
else
|
||||
|
||||
else #------------------------------------------------------- HTTP/1 only
|
||||
|
||||
HVER=1.1
|
||||
|
||||
new "wait restconf"
|
||||
wait_restconf
|
||||
|
||||
new "restconf root discovery. RFC 8040 3.1 (xml+xrd)"
|
||||
echo "curl $CURLOPTS -X GET $proto://$addr/.well-known/host-meta"
|
||||
expectpart "$(curl $CURLOPTS -X GET $proto://$addr/.well-known/host-meta)" 0 "HTTP/$HVER 200" "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>"
|
||||
|
||||
echo "fcgi or native+http/1 or native+http/1+http/2"
|
||||
if [ "${WITH_RESTCONF}" = "native" ]; then # XXX does not work with nginx
|
||||
new "restconf GET http/1.0 - returns 1.0"
|
||||
|
|
@ -219,20 +282,9 @@ function testrun()
|
|||
new "restconf GET http/1.1"
|
||||
expectpart "$(curl $CURLOPTS --http1.1 -X GET $proto://$addr/.well-known/host-meta)" 0 'HTTP/1.1 200 OK' "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>"
|
||||
|
||||
if ${HAVE_LIBNGHTTP2}; then
|
||||
# http/1 + http/2
|
||||
|
||||
new "restconf GET http/2 switch protocol"
|
||||
if [ $proto = http ]; then # see (2) https to http port in restconf_main_native.c
|
||||
expectpart "$(curl $CURLOPTS --http2 -X GET $proto://$addr/.well-known/host-meta)" 0 "" "HTTP/1.1 200" "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>"
|
||||
else
|
||||
expectpart "$(curl $CURLOPTS --http2 -X GET $proto://$addr/.well-known/host-meta)" 0 "" "HTTP/2 200" "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>" # Only if https: HTTP/1.1 101 Switching Protocols
|
||||
fi
|
||||
else
|
||||
# http/1 only Try http/2 - go back to http/1.1
|
||||
new "restconf GET http/2 switch protocol"
|
||||
expectpart "$(curl $CURLOPTS --http2 -X GET $proto://$addr/.well-known/host-meta)" 0 "HTTP/1.1 200 OK" "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>"
|
||||
fi
|
||||
|
||||
# http2-prior knowledge
|
||||
if [ $proto = http ]; then # see (2) https to http port in restconf_main_native.c
|
||||
|
|
@ -485,23 +537,20 @@ function testrun()
|
|||
}
|
||||
|
||||
# Go thru all combinations of IPv4/IPv6, http/https, local/backend config
|
||||
protos="http"
|
||||
if ${HAVE_LIBEVHTP}; then
|
||||
protos="http" # No plain http for http/2 only
|
||||
fi
|
||||
if [ "${WITH_RESTCONF}" = "native" ]; then
|
||||
# http only relevant for internal (for fcgi: need nginx config)
|
||||
protos="$protos https"
|
||||
fi
|
||||
for proto in $protos; do
|
||||
if [ $proto = https ]; then
|
||||
HVER=2
|
||||
else
|
||||
HVER=1.1
|
||||
fi
|
||||
addrs="127.0.0.1"
|
||||
if $IPv6 ; then
|
||||
addrs="$addrs \[::1\]"
|
||||
fi
|
||||
for addr in $addrs; do
|
||||
new "restconf test: proto:$proto addr:$addr"
|
||||
new "restconf test: proto:$proto addr:$addr HVER:$HVER"
|
||||
testrun $proto $addr
|
||||
done
|
||||
done
|
||||
|
|
|
|||
|
|
@ -27,10 +27,17 @@ anonymous=myanonymous
|
|||
fyang=$dir/myexample.yang
|
||||
|
||||
# No ssl
|
||||
|
||||
|
||||
if ! ${HAVE_LIBEVHTP}; then
|
||||
echo "...skipped: LIBEVHTP is false, must run with http/1 (evhtp)"
|
||||
if [ "$s" = $0 ]; then exit 0; else return 0; fi
|
||||
fi
|
||||
RCPROTO=http
|
||||
HVER=1.1
|
||||
|
||||
# Start with common config, then append fcgi/native specific config
|
||||
# NOTE this is replaced in testrun()
|
||||
cat <<EOF > $cfg
|
||||
<clixon-config xmlns="http://clicon.org/config">
|
||||
<CLICON_CONFIGFILE>$cfg</CLICON_CONFIGFILE>
|
||||
|
|
@ -285,6 +292,7 @@ fi
|
|||
|
||||
# unset conditional parameters
|
||||
unset RCPROTO
|
||||
unset HVER
|
||||
unset RESTCONFIG1
|
||||
unset MSGANON
|
||||
unset MSGWILMA
|
||||
|
|
|
|||
|
|
@ -30,6 +30,12 @@ fyang=$dir/example.yang
|
|||
fyang2=$dir/augment.yang
|
||||
fxml=$dir/initial.xml
|
||||
fstate=$dir/state.xml
|
||||
|
||||
if ! ${HAVE_LIBEVHTP}; then
|
||||
echo "...skipped: LIBEVHTP is false, must run with http/1 (evhtp)"
|
||||
if [ "$s" = $0 ]; then exit 0; else return 0; fi
|
||||
fi
|
||||
|
||||
RCPROTO=http # Force to http due to netcat
|
||||
HVER=1.1
|
||||
|
||||
|
|
@ -327,6 +333,8 @@ fi
|
|||
|
||||
# Set by restconf_config
|
||||
unset RESTCONFIG
|
||||
unset HVER
|
||||
unset RCPROTO
|
||||
|
||||
rm -rf $dir
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,12 @@ if [ "${WITH_RESTCONF}" != "native" ]; then
|
|||
if [ "$s" = $0 ]; then exit 0; else return 0; fi # skip
|
||||
fi
|
||||
|
||||
# Cant make it work in sum.sh...
|
||||
if ! ${HAVE_LIBEVHTP}; then
|
||||
echo "...skipped: LIBEVHTP is false, must run with http/1 (evhtp)"
|
||||
if [ "$s" = $0 ]; then exit 0; else return 0; fi
|
||||
fi
|
||||
|
||||
APPNAME=example
|
||||
|
||||
cfg=$dir/conf.xml
|
||||
|
|
|
|||
|
|
@ -24,6 +24,11 @@ RESTCONFDBG=$DBG
|
|||
RCPROTO=http # no ssl here
|
||||
HVER=1.1
|
||||
|
||||
if ! ${HAVE_LIBEVHTP}; then
|
||||
echo "...skipped: LIBEVHTP is false, must run with http/1 (evhtp)"
|
||||
if [ "$s" = $0 ]; then exit 0; else return 0; fi
|
||||
fi
|
||||
|
||||
# log-destination in restconf xml: syslog or file
|
||||
: ${LOGDST:=syslog}
|
||||
# Set daemon command-line to -f
|
||||
|
|
|
|||
|
|
@ -34,6 +34,10 @@ startupdb=$dir/startup_db
|
|||
RESTCONFDBG=$DBG
|
||||
RCPROTO=http # no ssl here
|
||||
HVER=1.1
|
||||
if ! ${HAVE_LIBEVHTP}; then
|
||||
echo "...skipped: LIBEVHTP is false, must run with http/1 (evhtp)"
|
||||
if [ "$s" = $0 ]; then exit 0; else return 0; fi
|
||||
fi
|
||||
|
||||
INVALIDADDR=251.1.1.1 # used by fourth usecase as invalid
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,11 @@ if [ "${WITH_RESTCONF}" != "native" ]; then
|
|||
if [ "$s" = $0 ]; then exit 0; else return 0; fi # skip
|
||||
fi
|
||||
|
||||
if ! ${HAVE_LIBEVHTP}; then
|
||||
echo "...skipped: LIBEVHTP is false, must run with http/1 (evhtp)"
|
||||
if [ "$s" = $0 ]; then exit 0; else return 0; fi
|
||||
fi
|
||||
|
||||
# Skip if valgrind restconf (actually valgrind version < 3.16 27 May 2020)
|
||||
if [ $valgrindtest -eq 3 ]; then
|
||||
if [ "$s" = $0 ]; then exit 0; else return 0; fi # skip
|
||||
|
|
@ -173,8 +178,10 @@ new "netconf commit"
|
|||
expecteof "$clixon_netconf -qf $cfg" 0 "$DEFAULTHELLO<rpc $DEFAULTNS><commit/></rpc>]]>]]>" "^<rpc-reply $DEFAULTNS><ok/></rpc-reply>]]>]]>$"
|
||||
|
||||
# NOTE http/1.1
|
||||
if ${HAVE_LIBEVHTP}; then
|
||||
new "restconf http get config on default netns"
|
||||
expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+xml' http://127.0.0.1/restconf/data/clixon-example:table)" 0 "HTTP/1.1 200" '<table xmlns="urn:example:clixon"><parameter><name>a</name><value>42</value></parameter></table>'
|
||||
fi
|
||||
|
||||
new "restconf http get config on addr:$vaddr in netns:$netns"
|
||||
expectpart "$(sudo ip netns exec $netns curl $CURLOPTS -X GET -H 'Accept: application/yang-data+xml' https://$vaddr/restconf/data/clixon-example:table)" 0 "HTTP/$HVER 200" '<table xmlns="urn:example:clixon"><parameter><name>a</name><value>42</value></parameter></table>'
|
||||
|
|
@ -185,9 +192,11 @@ expectpart "$(sudo ip netns exec $netns curl $CURLOPTS -X GET -H 'Accept: applic
|
|||
new "restconf https/SSL put table b"
|
||||
expectpart "$(sudo ip netns exec $netns curl $CURLOPTS -X POST -H 'Content-Type: application/yang-data+xml' -d '<parameter xmlns="urn:example:clixon"><name>b</name><value>99</value></parameter>' https://$vaddr/restconf/data/clixon-example:table)" 0 "HTTP/$HVER 201"
|
||||
|
||||
if ${HAVE_LIBEVHTP}; then
|
||||
# NOTE http/1.1
|
||||
new "restconf http get table b on default ns"
|
||||
expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+xml' http://127.0.0.1/restconf/data/clixon-example:table/parameter=b)" 0 "HTTP/1.1 200" '<parameter xmlns="urn:example:clixon"><name>b</name><value>99</value></parameter>'
|
||||
fi
|
||||
|
||||
# Negative
|
||||
new "restconf get config on wrong port in netns:$netns"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue