]> granicus.if.org Git - strace/commitdiff
tests: fix race condition in net-accept-connect based tests
authorDmitry V. Levin <ldv@altlinux.org>
Wed, 7 Jan 2015 20:14:19 +0000 (20:14 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 7 Jan 2015 22:05:38 +0000 (22:05 +0000)
Change all net-accept-connect based tests to use different unix domain
socket addresses, so that these tests could be safely run in parallel.

* tests/net-accept-connect.c: Parametrize unix domain socket address.
* tests/net-fd.test: Pass socket address to net-accept-connect.
* tests/net.test: Likewise.
* tests/unix-yy.test: Likewise.
* tests/unix-yy-accept.awk: Update regexps.
* tests/unix-yy-connect.awk: Likewise.

tests/net-accept-connect.c
tests/net-fd.test
tests/net.test
tests/unix-yy-accept.awk
tests/unix-yy-connect.awk
tests/unix-yy.test

index 5af7d81b7342109ed2321f82a99af9ca6a8c78ce..f33d48f3235c65d079ae5b9dd70fbdbe0c909da8 100644 (file)
@@ -6,16 +6,21 @@
 #include <sys/socket.h>
 #include <sys/un.h>
 
-#define SUN_PATH "local-stream"
-int main(void)
+int main(int ac, const char **av)
 {
        struct sockaddr_un addr = {
                .sun_family = AF_UNIX,
-               .sun_path = SUN_PATH
        };
-       socklen_t len = offsetof(struct sockaddr_un, sun_path) + sizeof SUN_PATH;
+       socklen_t len;
 
-       unlink(SUN_PATH);
+       assert(ac == 2);
+       assert(strlen(av[1]) > 0);
+       assert(strlen(av[1]) < sizeof(addr.sun_path));
+
+       strcpy(addr.sun_path, av[1]);
+       len = offsetof(struct sockaddr_un, sun_path) + strlen(av[1]) + 1;
+
+       unlink(av[1]);
        close(0);
        close(1);
 
@@ -44,6 +49,6 @@ int main(void)
                return 0;
        }
 
-       unlink(SUN_PATH);
+       unlink(av[1]);
        return 0;
 }
index 0f0eb5ccf43eb0b3b15a990f4ab1d24c51168327..8bbf7e73d918a213ffb975bdae69b3330b4eef0c 100755 (executable)
@@ -12,13 +12,14 @@ check_prog grep
 
 rm -f $LOG.*
 
-./net-accept-connect ||
+addr=net-fd-local-stream
+./net-accept-connect $addr ||
        fail_ 'net-accept-connect failed'
 
 # using -y to test socket descriptors 'paths' decoding
-args="-tt -ff -y -o $LOG -enetwork ./net-accept-connect"
-$STRACE $args ||
-       fail_ "strace $args failed"
+args="-tt -ff -y -enetwork ./net-accept-connect $addr"
+$STRACE -o "$LOG" $args ||
+       fail_ "$STRACE $args failed"
 
 "$srcdir"/../strace-log-merge $LOG > $LOG || {
        cat $LOG
@@ -37,10 +38,10 @@ grep_log()
                fail_ "strace -enetwork failed to trace \"$syscall\" properly"
        }
 }
-grep_log bind '\(0<socket:\[[0-9]+\]>, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="local-stream"\}, 15\) += 0'
+grep_log bind '\(0<socket:\[[0-9]+\]>, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="'$addr'"\}, 22\) += 0'
 grep_log listen '\(0<socket:\[[0-9]+\]>, 5\) += 0'
-grep_log getsockname '\(0<socket:\[[0-9]+\]>, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="local-stream"\}, \[15\]\) += 0'
+grep_log getsockname '\(0<socket:\[[0-9]+\]>, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="'$addr'"\}, \[22\]\) += 0'
 grep_log accept '\(0<socket:\[[0-9]+\]>, \{sa_family=AF_(LOCAL|UNIX|FILE), NULL\}, \[2\]\) += 1<socket:\[[0-9]+\]>'
-grep_log connect '\(1<socket:\[[0-9]+\]>, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="local-stream"\}, 15\) += 0'
+grep_log connect '\(1<socket:\[[0-9]+\]>, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="'$addr'"\}, 22\) += 0'
 
 exit 0
index f0eff0c1af2047478f8c7479b9c642f05fe35209..a794466379d54a7f7921743c6a81a7f0672ee7c1 100755 (executable)
@@ -8,12 +8,13 @@ check_prog grep
 
 rm -f $LOG.*
 
-./net-accept-connect ||
+addr=net-local-stream
+./net-accept-connect $addr ||
        fail_ 'net-accept-connect failed'
 
-args="-tt -ff -o $LOG -enetwork ./net-accept-connect"
-$STRACE $args ||
-       fail_ "strace $args failed"
+args="-tt -ff -enetwork ./net-accept-connect $addr"
+$STRACE -o "$LOG" $args ||
+       fail_ "$STRACE $args failed"
 
 "$srcdir"/../strace-log-merge $LOG > $LOG || {
        cat $LOG
@@ -35,10 +36,10 @@ grep_log()
 
 grep_log socket '\(PF_(LOCAL|UNIX|FILE), SOCK_STREAM, 0\) += 0'
 grep_log socket '\(PF_(LOCAL|UNIX|FILE), SOCK_STREAM, 0\) += 1'
-grep_log bind '\(0, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="local-stream"\}, 15\) += 0'
+grep_log bind '\(0, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="'$addr'"\}, 19\) += 0'
 grep_log listen '\(0, 5\) += 0'
-grep_log getsockname '\(0, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="local-stream"\}, \[15\]\) += 0'
+grep_log getsockname '\(0, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="'$addr'"\}, \[19\]\) += 0'
 grep_log accept '\(0, \{sa_family=AF_(LOCAL|UNIX|FILE), NULL\}, \[2\]\) += 1'
-grep_log connect '\(1, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="local-stream"\}, 15\) += 0'
+grep_log connect '\(1, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="'$addr'"\}, 19\) += 0'
 
 exit 0
index bafee898e73e44701a0895171472f0f0a43b54eb..7f0a9cb82b848a3740cb6c70fb588f8131ec0730 100644 (file)
@@ -2,8 +2,9 @@ BEGIN {
   lines = 8
   fail = 0
 
+  addrlen = length(addr) + 3
   r_i = "[1-9][0-9]*"
-  r_bind = "^bind\\(0<UNIX:\\[(" r_i ")\\]>, {sa_family=AF_(LOCAL|UNIX|FILE), sun_path=\"local-stream\"}, 15\\) += 0$"
+  r_bind = "^bind\\(0<UNIX:\\[(" r_i ")\\]>, {sa_family=AF_(LOCAL|UNIX|FILE), sun_path=\"" addr "\"}, " addrlen "\\) += 0$"
 }
 
 NR == 1 && /^socket\(PF_(LOCAL|UNIX|FILE), SOCK_STREAM, 0\) += 0$/ {next}
@@ -11,9 +12,9 @@ NR == 1 && /^socket\(PF_(LOCAL|UNIX|FILE), SOCK_STREAM, 0\) += 0$/ {next}
 NR == 2 {
   if (match($0, r_bind, a)) {
     inode_listen = a[1]
-    r_listen = "^listen\\(0<UNIX:\\[" inode_listen ",\"local-stream\"\\]>, 5\\) += 0$"
-    r_getsockname = "^getsockname\\(0<UNIX:\\[" inode_listen ",\"local-stream\"\\]>, {sa_family=AF_(LOCAL|UNIX|FILE), sun_path=\"local-stream\"}, \\[15\\]\\) += 0$"
-    r_accept = "^accept\\(0<UNIX:\\[" inode_listen ",\"local-stream\"\\]>, {sa_family=AF_(LOCAL|UNIX|FILE), NULL}, \\[2\\]\\) += 1<UNIX:\\[(" r_i ")->(" r_i "),\"local-stream\"\\]>"
+    r_listen = "^listen\\(0<UNIX:\\[" inode_listen ",\"" addr "\"\\]>, 5\\) += 0$"
+    r_getsockname = "^getsockname\\(0<UNIX:\\[" inode_listen ",\"" addr "\"\\]>, {sa_family=AF_(LOCAL|UNIX|FILE), sun_path=\"" addr "\"}, \\[" addrlen "\\]\\) += 0$"
+    r_accept = "^accept\\(0<UNIX:\\[" inode_listen ",\"" addr "\"\\]>, {sa_family=AF_(LOCAL|UNIX|FILE), NULL}, \\[2\\]\\) += 1<UNIX:\\[(" r_i ")->(" r_i "),\"" addr "\"\\]>"
     next
   }
 }
@@ -26,8 +27,8 @@ NR == 5 {
   if (r_accept != "" && match($0, r_accept, a)) {
     inode_accepted = a[2]
     inode_peer = a[3]
-    r_close_listen = "^close\\(0<UNIX:\\[" inode_listen ",\"local-stream\"\\]>\\) += 0$"
-    r_close_accepted = "^close\\(1<UNIX:\\[" inode_accepted ",\"local-stream\"\\]>\\) += 0$"
+    r_close_listen = "^close\\(0<UNIX:\\[" inode_listen ",\"" addr "\"\\]>\\) += 0$"
+    r_close_accepted = "^close\\(1<UNIX:\\[" inode_accepted ",\"" addr "\"\\]>\\) += 0$"
     next
   }
 }
index 173d721192e5be799b995703e7aa6378ccf35bb2..5610192cffd1308e9feb23d87d77fd38e09e3c5e 100644 (file)
@@ -1,10 +1,11 @@
 BEGIN {
   lines = 5
   fail = 0
+  addrlen = length(addr) + 3
 
   r_i = "[1-9][0-9]*"
-  r_close_listen = "^close\\(0<UNIX:[" r_i ",\"local-stream\"]>\\) += 0$"
-  r_connect = "^connect\\(1<UNIX:\\[(" r_i ")\\]>, {sa_family=AF_(LOCAL|UNIX|FILE), sun_path=\"local-stream\"}, 15\\) += 0$"
+  r_close_listen = "^close\\(0<UNIX:[" r_i ",\"" addr "\"]>\\) += 0$"
+  r_connect = "^connect\\(1<UNIX:\\[(" r_i ")\\]>, {sa_family=AF_(LOCAL|UNIX|FILE), sun_path=\"" addr "\"}, " addrlen "\\) += 0$"
 }
 
 NR == 1 && /^socket\(PF_(LOCAL|UNIX|FILE), SOCK_STREAM, 0\) += 1$/ {next}
index 1114e17d0ab30813e14843efc1afdb4a8a681ec9..4a9b889dc5e5489583eac4a711ebec7838cc56b2 100755 (executable)
@@ -14,7 +14,8 @@ check_prog sed
 
 rm -f $LOG.* $LOG-*
 
-./net-accept-connect ||
+addr=unix-yy-local-stream
+./net-accept-connect $addr ||
        fail_ 'net-accept-connect failed'
 
 ./netlink_unix_diag || {
@@ -25,9 +26,9 @@ rm -f $LOG.* $LOG-*
        fi
 }
 
-args="-tt -ff -yy -o $LOG -eclose,network ./net-accept-connect"
-$STRACE $args ||
-       fail_ "strace $args failed"
+args="-tt -ff -yy -eclose,network ./net-accept-connect $addr"
+$STRACE -o "$LOG" $args ||
+       fail_ "$STRACE $args failed"
 
 "$srcdir"/../strace-log-merge $LOG > $LOG || {
        cat $LOG
@@ -47,12 +48,12 @@ sed -rn "/^$child"' /d; /SIGCHLD/d; / socket\(/,$ s/^[0-9]+ +[^ ]+ (.+)/\1/p' $L
        fail_ 'failed to separate logs'
 }
 
-awk -f "$srcdir"/unix-yy-connect.awk $LOG-connect || {
+awk -f "$srcdir"/unix-yy-connect.awk -v addr=$addr $LOG-connect || {
        cat $LOG-connect
        fail_ "strace $args failed to decode socket descriptors properly"
 }
 
-awk -f "$srcdir"/unix-yy-accept.awk $LOG-accept || {
+awk -f "$srcdir"/unix-yy-accept.awk -v addr=$addr $LOG-accept || {
        cat $LOG-accept
        fail_ "strace $args failed to decode socket descriptors properly"
 }