From: Masatake YAMATO Date: Sat, 24 Sep 2022 09:21:30 +0000 (+0900) Subject: tests: (lsfd) extend unix-stream test case to test SEQPACKET socket X-Git-Tag: v2.39-rc1~505^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=223063b13fe0b577a699221a357028703c3a4eb9;p=thirdparty%2Futil-linux.git tests: (lsfd) extend unix-stream test case to test SEQPACKET socket Signed-off-by: Masatake YAMATO --- diff --git a/tests/expected/lsfd/mkfds-unix-stream b/tests/expected/lsfd/mkfds-unix-stream index 5628e78e11..45eee020e0 100644 --- a/tests/expected/lsfd/mkfds-unix-stream +++ b/tests/expected/lsfd/mkfds-unix-stream @@ -9,4 +9,16 @@ ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0 3 SOCK state=listen path=test_mkfds-unix-stream-shutdown listen stream test_mkfds-unix-stream-shutdown 4 SOCK state=connected connected stream 5 SOCK state=connected path=test_mkfds-unix-stream-shutdown connected stream test_mkfds-unix-stream-shutdown +(shutdown) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0 + 3 SOCK state=listen path=test_mkfds-unix-seqpacket type=seqpacket listen seqpacket test_mkfds-unix-seqpacket + 4 SOCK state=connected type=seqpacket connected seqpacket + 5 SOCK state=connected path=test_mkfds-unix-seqpacket type=seqpacket connected seqpacket test_mkfds-unix-seqpacket +ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0 + 3 SOCK state=listen path=@test_mkfds-unix-seqpacket-abs listen stream @test_mkfds-unix-seqpacket-abs + 4 SOCK state=connected connected stream + 5 SOCK state=connected path=@test_mkfds-unix-seqpacket-abs connected stream @test_mkfds-unix-seqpacket-abs +(abs) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0 + 3 SOCK state=listen path=test_mkfds-unix-seqpacket-shutdown type=seqpacket listen seqpacket test_mkfds-unix-seqpacket-shutdown + 4 SOCK state=connected type=seqpacket connected seqpacket + 5 SOCK state=connected path=test_mkfds-unix-seqpacket-shutdown type=seqpacket connected seqpacket test_mkfds-unix-seqpacket-shutdown (shutdown) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH: 0 diff --git a/tests/helpers/test_mkfds.c b/tests/helpers/test_mkfds.c index fdd3cff1e8..86e2d2ba46 100644 --- a/tests/helpers/test_mkfds.c +++ b/tests/helpers/test_mkfds.c @@ -788,8 +788,8 @@ static void close_unix_socket(int fd, void *data) } } -static void *make_unix_stream(const struct factory *factory, struct fdesc fdescs[], - int argc, char ** argv) +static void *make_unix_stream_core(const struct factory *factory, struct fdesc fdescs[], + int argc, char ** argv, int type, const char *typestr) { struct arg path = decode_arg("path", factory->params, argc, argv); const char *spath = ARG_STRING(path); @@ -830,10 +830,10 @@ static void *make_unix_stream(const struct factory *factory, struct fdesc fdescs if (iclient_shutdown < 0 || iclient_shutdown > 3) errx(EXIT_FAILURE, "the client shudown specification in unexpected range"); - ssd = socket(AF_UNIX, SOCK_STREAM, 0); + ssd = socket(AF_UNIX, type, 0); if (ssd < 0) err(EXIT_FAILURE, - "failed to make a socket with AF_UNIX + SOCK_STREAM (server side)"); + "failed to make a socket with AF_UNIX + SOCK_%s (server side)", typestr); if (ssd != fdescs[0].fd) { if (dup2(ssd, fdescs[0].fd) < 0) { int e = errno; @@ -869,10 +869,10 @@ static void *make_unix_stream(const struct factory *factory, struct fdesc fdescs err(EXIT_FAILURE, "failed to listen a socket"); } - csd = socket(AF_UNIX, SOCK_STREAM, 0); + csd = socket(AF_UNIX, type, 0); if (csd < 0) err(EXIT_FAILURE, - "failed to make a socket with AF_UNIX + SOCK_STREAM (client side)"); + "failed to make a socket with AF_UNIX + SOCK_%s (client side)", typestr); if (csd != fdescs[1].fd) { if (dup2(csd, fdescs[1].fd) < 0) { int e = errno; @@ -935,6 +935,29 @@ static void *make_unix_stream(const struct factory *factory, struct fdesc fdescs return NULL; } +static void *make_unix_stream(const struct factory *factory, struct fdesc fdescs[], + int argc, char ** argv) +{ + struct arg type = decode_arg("type", factory->params, argc, argv); + const char *stype = ARG_STRING(type); + + int typesym; + const char *typestr; + + if (strcmp(stype, "stream") == 0) { + typesym = SOCK_STREAM; + typestr = "STREAM"; + } else if (strcmp(stype, "seqpacket") == 0) { + typesym = SOCK_SEQPACKET; + typestr = "SEQPACKET"; + } else + errx(EXIT_FAILURE, _("unknown unix socket type: %s"), stype); + + free_arg(&type); + + return make_unix_stream_core(factory, fdescs, argc, argv, typesym, typestr); +} + static void *make_unix_dgram(const struct factory *factory, struct fdesc fdescs[], int argc, char ** argv) { @@ -1264,6 +1287,12 @@ static const struct factory factories[] = { .desc = "shutdown the client socket; 1: R, 2: W, 3: RW", .defv.integer = 0, }, + { + .name = "type", + .type = PTYPE_STRING, + .desc = "stream or seqpacket", + .defv.string = "stream", + }, PARAM_END }, }, diff --git a/tests/ts/lsfd/mkfds-unix-stream b/tests/ts/lsfd/mkfds-unix-stream index 2f2bfd76a5..767dc89349 100755 --- a/tests/ts/lsfd/mkfds-unix-stream +++ b/tests/ts/lsfd/mkfds-unix-stream @@ -32,47 +32,51 @@ FDA=5 EXPR='(((TYPE == "UNIX-STREAM") or (TYPE == "UNIX")) and (FD >= 3) and (FD <= 5))' { - # TYPE is not tested here; AF_UNIX+SOCK_STREAM socket type was changed from "UNIX" - # to "UNIX-STREAM" at a time in Linux kernel development history. - coproc MKFDS { "$TS_HELPER_MKFDS" unix-stream $FDS $FDC $FDA \ - path=test_mkfds-unix-stream ; } - if read -r -u "${MKFDS[0]}" PID; then - ${TS_CMD_LSFD} -n \ - -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \ - -p "${PID}" -Q "${EXPR}" - echo 'ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $? + for t in stream seqpacket; do + # TYPE is not tested here; AF_UNIX+SOCK_STREAM socket type was changed from "UNIX" + # to "UNIX-STREAM" at a time in Linux kernel development history. + coproc MKFDS { "$TS_HELPER_MKFDS" unix-stream $FDS $FDC $FDA \ + path=test_mkfds-unix-${t} \ + type=$t ; } + if read -r -u "${MKFDS[0]}" PID; then + ${TS_CMD_LSFD} -n \ + -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \ + -p "${PID}" -Q "${EXPR}" + echo 'ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $? - kill -CONT "${PID}" - wait "${MKFDS_PID}" - fi + kill -CONT "${PID}" + wait "${MKFDS_PID}" + fi - coproc MKFDS { "$TS_HELPER_MKFDS" unix-stream $FDS $FDC $FDA \ - path=test_mkfds-unix-stream-abs \ - abstract=true ; } - if read -r -u "${MKFDS[0]}" PID; then - ${TS_CMD_LSFD} -n \ - -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \ - -p "${PID}" -Q "${EXPR}" - echo '(abs) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $? + coproc MKFDS { "$TS_HELPER_MKFDS" unix-stream $FDS $FDC $FDA \ + path=test_mkfds-unix-${t}-abs \ + abstract=true ; } + if read -r -u "${MKFDS[0]}" PID; then + ${TS_CMD_LSFD} -n \ + -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \ + -p "${PID}" -Q "${EXPR}" + echo '(abs) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $? - kill -CONT "${PID}" - wait "${MKFDS_PID}" - fi + kill -CONT "${PID}" + wait "${MKFDS_PID}" + fi - coproc MKFDS { "$TS_HELPER_MKFDS" unix-stream $FDS $FDC $FDA \ - path=test_mkfds-unix-stream-shutdown \ - server-shutdown=3 \ - client-shutdown=3 ; } - if read -r -u "${MKFDS[0]}" PID; then - ${TS_CMD_LSFD} -n \ - -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \ - -p "${PID}" -Q "${EXPR}" - echo '(shutdown) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $? - # Surprisingly, the socket status doesn't change at all. + coproc MKFDS { "$TS_HELPER_MKFDS" unix-stream $FDS $FDC $FDA \ + path=test_mkfds-unix-${t}-shutdown \ + server-shutdown=3 \ + client-shutdown=3 \ + type=$t ; } + if read -r -u "${MKFDS[0]}" PID; then + ${TS_CMD_LSFD} -n \ + -o ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH \ + -p "${PID}" -Q "${EXPR}" + echo '(shutdown) ASSOC,STTYPE,NAME,SOCKSTATE,SOCKTYPE,UNIX.PATH': $? + # Surprisingly, the socket status doesn't change at all. - kill -CONT "${PID}" - wait "${MKFDS_PID}" - fi + kill -CONT "${PID}" + wait "${MKFDS_PID}" + fi + done } > "$TS_OUTPUT" 2>&1 ts_finalize