From d932b2950666601bc7b86f657d4d74a5fc536b57 Mon Sep 17 00:00:00 2001 From: hoelscher <jens.hoelscher@fh-muenster.de> Date: Fri, 27 Nov 2015 02:04:26 +0100 Subject: [PATCH] add first testcases for testing packetdrill for sctp_ap_api --- .../8.1.1_sctp_rtoinfo_1.pkt | 9 ++ .../8.1.1_sctp_rtoinfo_2.pkt | 10 +++ .../8.1.1_sctp_rtoinfo_3.pkt | 11 +++ .../api_tests/9.10_sctp_send/sctp_send_1.pkt | 34 +++++++ .../api_tests/9.10_sctp_send/sctp_send_2.pkt | 47 ++++++++++ .../9.11_sctp_sendx/sctp_sendx_1.pkt | 65 ++++++++++++++ .../tests/bsd/sctp/api_tests/run-all-tests | 89 +++++++++++++++++++ 7 files changed, 265 insertions(+) create mode 100644 gtests/net/packetdrill/tests/bsd/sctp/api_tests/8.1_rw_socketoptions/8.1.1_sctp_rtoinfo_1.pkt create mode 100644 gtests/net/packetdrill/tests/bsd/sctp/api_tests/8.1_rw_socketoptions/8.1.1_sctp_rtoinfo_2.pkt create mode 100644 gtests/net/packetdrill/tests/bsd/sctp/api_tests/8.1_rw_socketoptions/8.1.1_sctp_rtoinfo_3.pkt create mode 100644 gtests/net/packetdrill/tests/bsd/sctp/api_tests/9.10_sctp_send/sctp_send_1.pkt create mode 100644 gtests/net/packetdrill/tests/bsd/sctp/api_tests/9.10_sctp_send/sctp_send_2.pkt create mode 100644 gtests/net/packetdrill/tests/bsd/sctp/api_tests/9.11_sctp_sendx/sctp_sendx_1.pkt create mode 100755 gtests/net/packetdrill/tests/bsd/sctp/api_tests/run-all-tests diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/8.1_rw_socketoptions/8.1.1_sctp_rtoinfo_1.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/8.1_rw_socketoptions/8.1.1_sctp_rtoinfo_1.pkt new file mode 100644 index 00000000..1a6fe676 --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/8.1_rw_socketoptions/8.1.1_sctp_rtoinfo_1.pkt @@ -0,0 +1,9 @@ +--tolerance_usecs=100000 + + 0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 ++0.0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) ++0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 ++0.0 bind(3, ..., ...) = 0 + +// Check sctp_rtoinfo before connection startup ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, srto_initial=..., srto_max=..., srto_min=...}, [16]) = 0 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/8.1_rw_socketoptions/8.1.1_sctp_rtoinfo_2.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/8.1_rw_socketoptions/8.1.1_sctp_rtoinfo_2.pkt new file mode 100644 index 00000000..80305cd4 --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/8.1_rw_socketoptions/8.1.1_sctp_rtoinfo_2.pkt @@ -0,0 +1,10 @@ +--tolerance_usecs=100000 + + 0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 ++0.0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) ++0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 ++0.0 bind(3, ..., ...) = 0 + +// Check sctp_rtoinfo before connection startup ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, srto_initial=100, srto_max=200, srto_min=50}, 16) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, srto_initial=100, srto_max=200, srto_min=50}, [16]) = 0 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/8.1_rw_socketoptions/8.1.1_sctp_rtoinfo_3.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/8.1_rw_socketoptions/8.1.1_sctp_rtoinfo_3.pkt new file mode 100644 index 00000000..164ace17 --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/8.1_rw_socketoptions/8.1.1_sctp_rtoinfo_3.pkt @@ -0,0 +1,11 @@ +--tolerance_usecs=100000 + + 0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 ++0.0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) ++0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 ++0.0 bind(3, ..., ...) = 0 + +// Check sctp_rtoinfo for one-to-one style check if srto_assoc_id is ignored ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, srto_initial=200, srto_max=400, srto_min=100}, 16) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=3, srto_initial=100, srto_max=200, srto_min=50}, 16) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, srto_initial=100, srto_max=200, srto_min=50}, [16]) = 0 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/9.10_sctp_send/sctp_send_1.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/9.10_sctp_send/sctp_send_1.pkt new file mode 100644 index 00000000..11faa137 --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/9.10_sctp_send/sctp_send_1.pkt @@ -0,0 +1,34 @@ +--tolerance_usecs=100000 + + 0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 ++0.0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) ++0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 ++0.0 bind(3, ..., ...) = 0 +// Check the handshake with an empty(!) cookie ++0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress) ++0.0 > sctp: INIT[flgs=0, tag=1, a_rwnd=..., os=..., is=..., tsn=1, ...] ++0.1 < sctp: INIT_ACK[flgs=0, tag=2, a_rwnd=1500, os=16, is=16, tsn=1, STATE_COOKIE[len=4, val=...]] ++0.0 > sctp: COOKIE_ECHO[flgs=0, len=4, val=...] ++0.1 < sctp: COOKIE_ACK[flgs=0] + ++0.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, +spp_hbinterval=0, spp_pathmaxrxt=8, spp_pathmtu=1468, spp_flags=SPP_HB_DISABLE, spp_ipv6_flowlabel=0, spp_dscp=0}, 152) = 0 + ++1.0 sctp_send(3, ..., 1000, {sinfo_stream=3, + sinfo_ssn=3, + sinfo_flags=0, + sinfo_ppid=htonl(7), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=1, + sinfo_cumtsn=6, + sinfo_assoc_id=3}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=3, ssn=0, ppid=7] ++0.0 < sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/9.10_sctp_send/sctp_send_2.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/9.10_sctp_send/sctp_send_2.pkt new file mode 100644 index 00000000..879896fe --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/9.10_sctp_send/sctp_send_2.pkt @@ -0,0 +1,47 @@ +--tolerance_usecs=100000 + + 0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 ++0.0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) ++0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 ++0.0 bind(3, ..., ...) = 0 +// Check the handshake with an empty(!) cookie ++0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress) ++0.0 > sctp: INIT[flgs=0, tag=1, a_rwnd=..., os=..., is=..., tsn=1, ...] ++0.1 < sctp: INIT_ACK[flgs=0, tag=2, a_rwnd=1500, os=16, is=16, tsn=1, STATE_COOKIE[len=4, val=...]] ++0.0 > sctp: COOKIE_ECHO[flgs=0, len=4, val=...] ++0.1 < sctp: COOKIE_ACK[flgs=0] + ++0.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, +spp_hbinterval=0, spp_pathmaxrxt=8, spp_pathmtu=1468, spp_flags=SPP_HB_DISABLE, spp_ipv6_flowlabel=0, spp_dscp=0}, 152) = 0 + ++1.0 sctp_send(3, ..., 1000, {sinfo_stream=3, + sinfo_ssn=3, + sinfo_flags=0, + sinfo_ppid=htonl(7), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=1, + sinfo_cumtsn=6, + sinfo_assoc_id=3}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=3, ssn=0, ppid=7] ++0.0 < sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] + ++1.0 sctp_send(3, ..., 1000, {sinfo_stream=3, + sinfo_ssn=3, + sinfo_flags=0, + sinfo_ppid=htonl(7), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=1, + sinfo_cumtsn=6, + sinfo_assoc_id=3}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=2, sid=3, ssn=1, ppid=7] ++0.0 < sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=1500, gaps=[], dups=[]] + + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/9.11_sctp_sendx/sctp_sendx_1.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/9.11_sctp_sendx/sctp_sendx_1.pkt new file mode 100644 index 00000000..20b4eb9a --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/9.11_sctp_sendx/sctp_sendx_1.pkt @@ -0,0 +1,65 @@ +--tolerance_usecs=100000 + + 0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 ++0.0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) ++0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 ++0.0 bind(3, ..., ...) = 0 +// Check the handshake with an empty(!) cookie ++0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress) ++0.0 > sctp: INIT[flgs=0, tag=1, a_rwnd=..., os=..., is=..., tsn=1, ...] ++0.1 < sctp: INIT_ACK[flgs=0, tag=2, a_rwnd=1500, os=16, is=16, tsn=1, STATE_COOKIE[len=4, val=...]] ++0.0 > sctp: COOKIE_ECHO[flgs=0, len=4, val=...] ++0.1 < sctp: COOKIE_ACK[flgs=0] ++0.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 +//sendmsg(sd, msghdr, flags) + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, +spp_hbinterval=0, spp_pathmaxrxt=8, spp_pathmtu=1468, spp_flags=SPP_HB_DISABLE, spp_ipv6_flowlabel=0, spp_dscp=0}, 152) = 0 + ++1.0 sctp_sendx(3, ..., 1000, ..., 1, {sinfo_stream=3, + sinfo_ssn=3, + sinfo_flags=0, + sinfo_ppid=htonl(1234), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=2, + sinfo_cumtsn=2, + sinfo_assoc_id=3}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=3, ssn=0, ppid=1234] ++0.0 < sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] + + ++1.0 sctp_sendx(3, ..., 1000, {sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, 1, + {sinfo_stream=3, + sinfo_ssn=3, + sinfo_flags=0, + sinfo_ppid=htonl(7), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=1, + sinfo_cumtsn=6, + sinfo_assoc_id=3}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=2, sid=3, ssn=1, ppid=7] ++0.0 < sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=1500, gaps=[], dups=[]] + ++1.0 sctp_sendx(3, ..., 1000, [{sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}], 1, + {sinfo_stream=3, + sinfo_ssn=3, + sinfo_flags=0, + sinfo_ppid=htonl(7), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=1, + sinfo_cumtsn=6, + sinfo_assoc_id=3}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=3, sid=3, ssn=2, ppid=7] ++0.0 < sctp: SACK[flgs=0, cum_tsn=3, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/run-all-tests b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/run-all-tests new file mode 100755 index 00000000..a5669632 --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/run-all-tests @@ -0,0 +1,89 @@ +#!/usr/bin/env tcsh + +# +# Copyright (c) 2015 Michael Tuexen +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# + +set packetdrill = ./../../../../packetdrill +set delay = 1 +set testcases = (8.1_rw_socketoptions/8.1.1_sctp_rtoinfo_1 \ + 8.1_rw_socketoptions/8.1.1_sctp_rtoinfo_2 \ + 8.1_rw_socketoptions/8.1.1_sctp_rtoinfo_3 \ + 9.10_sctp_send/sctp_send_1 \ + 9.11_sctp_sendx/sctp_sendx_1 ) + +set rootdir = `/usr/bin/dirname $0` +set os = `uname -s | tr '[A-Z]' '[a-z]'` +set passed = 0 +set failed = 0 +set run = 0 +set skipped = 0 +set first = 1 + +printf "Name Verdict\n" +printf "===================================================\n" +foreach testcase ($testcases) + printf "%-40.40s " `/usr/bin/basename $testcase` + if ($first == 0) then + if ($delay != 0) then + printf "\033[33m%10s\033[0m" "WAITING" + sleep $delay + printf "\b\b\b\b\b\b\b\b\b\b" + endif + else + set first = 0 + endif + printf "\033[33m%10s\033[0m" "RUNNING" + if (-f ${rootdir}/${testcase}-$os.pkt) then + $packetdrill ${rootdir}/${testcase}-$os.pkt >& /dev/null + set result = $status + set found = 1 + else if (-f ${rootdir}/${testcase}.pkt) then + $packetdrill ${rootdir}/${testcase}.pkt >& /dev/null + set result = $status + set found = 1 + else + set found = 0 + endif + printf "\b\b\b\b\b\b\b\b\b\b" + if ($found == 1) then + if ($result == 0) then + @ passed++ + printf "\033[32m%10s\033[0m\n" "PASSED" + else + @ failed++ + printf "\033[31m%10s\033[0m\n" "FAILED" + endif + @ run++ + else + printf "\033[34m%10s\033[0m\n" "SKIPPED" + @ skipped++ + endif +end +printf "===================================================\n" +printf "Summary: Number of tests run: %3u\n" $run +printf " Number of tests passed: %3u\n" $passed +printf " Number of tests failed: %3u\n" $failed +printf " Number of tests skipped: %3u\n" $skipped -- GitLab