138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin#!/bin/gawk 238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# 338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# Copyright (c) 2014 Masatake YAMATO <yamato@redhat.com> 438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org> 538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# All rights reserved. 638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# 738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# Redistribution and use in source and binary forms, with or without 838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# modification, are permitted provided that the following conditions 938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# are met: 1038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# 1. Redistributions of source code must retain the above copyright 1138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# notice, this list of conditions and the following disclaimer. 1238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# 2. Redistributions in binary form must reproduce the above copyright 1338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# notice, this list of conditions and the following disclaimer in the 1438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# documentation and/or other materials provided with the distribution. 1538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# 3. The name of the author may not be used to endorse or promote products 1638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# derived from this software without specific prior written permission. 1738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# 1838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin 29fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. LevinBEGIN { 30fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin lines = 9 31fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin fail = 0 32fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin 33fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin r_i = "[1-9][0-9]*" 34fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin r_port = "[1-9][0-9][0-9][0-9]+" 35fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin r_localhost = "127\\.0\\.0\\.1" 363d463be47e84896366a86d156cbf1466f69a9811Dmitry V. Levin r_socket = "^socket\\(PF_INET, SOCK_STREAM, IPPROTO_IP\\) += 0<TCP:\\[(" r_i ")\\]>$" 37ed7ada24ac4647e56ce1bf3befbaec29a250cd38Dmitry V. Levin r_getsockname = "^getsockname\\(0<TCP:\\[" r_localhost ":(" r_port ")\\]>, \\{sa_family=AF_INET, sin_port=htons\\((" r_port ")\\), sin_addr=inet_addr\\(\"" r_localhost "\"\\)\\}, \\[" r_i "\\]\\) += 0$" 38fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin} 39fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin 403d463be47e84896366a86d156cbf1466f69a9811Dmitry V. LevinNR == 1 { 413d463be47e84896366a86d156cbf1466f69a9811Dmitry V. Levin if (match($0, r_socket, a)) { 42959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. Levin inode = a[1] 433d463be47e84896366a86d156cbf1466f69a9811Dmitry V. Levin r_bind = "^bind\\(0<TCP:\\[" inode "\\]>, \\{sa_family=AF_INET, sin_port=htons\\(0\\), sin_addr=inet_addr\\(\"" r_localhost "\"\\)\\}, " r_i "\\) += 0$" 44959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. Levin r_listen = "^listen\\(0<TCP:\\[" inode "\\]>, 5\\) += 0$" 45fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin next 46fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin } 47fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin} 48fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin 493d463be47e84896366a86d156cbf1466f69a9811Dmitry V. LevinNR == 2 {if (r_bind != "" && match($0, r_bind)) next} 503d463be47e84896366a86d156cbf1466f69a9811Dmitry V. Levin 51959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. LevinNR == 3 {if (r_listen != "" && match($0, r_listen)) next} 52fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin 53fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. LevinNR == 4 { 54fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin if (match($0, r_getsockname, a) && a[1] == a[2]) { 55fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin port_l = a[1] 56ed7ada24ac4647e56ce1bf3befbaec29a250cd38Dmitry V. Levin r_accept = "^accept\\(0<TCP:\\[" r_localhost ":" port_l "\\]>, \\{sa_family=AF_INET, sin_port=htons\\((" r_port ")\\), sin_addr=inet_addr\\(\"" r_localhost "\"\\)\\}, \\[" r_i "\\]\\) += 1<TCP:\\[" r_localhost ":" port_l "->" r_localhost ":(" r_port ")\\]>$" 57959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. Levin r_close0 = "^close\\(0<TCP:\\[" r_localhost ":" port_l "\\]>) += 0$" 58fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin next 59fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin } 60fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin} 61fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin 62fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. LevinNR == 5 { 63959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. Levin if (r_accept != "" && match($0, r_accept, a) && a[1] == a[2]) { 64fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin port_r = a[1] 65959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. Levin r_recv = "^recv\\(1<TCP:\\[" r_localhost ":" port_l "->" r_localhost ":" port_r "\\]>, \"data\", 5, MSG_WAITALL\\) += 4$" 66959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. Levin r_recvfrom = "^recvfrom\\(1<TCP:\\[" r_localhost ":" port_l "->" r_localhost ":" port_r "\\]>, \"data\", 5, MSG_WAITALL, NULL, NULL\\) += 4$" 67959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. Levin r_close1 = "^close\\(1<TCP:\\[" r_localhost ":" port_l "->" r_localhost ":" port_r "\\]>) += 0$" 68fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin next 69fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin } 70fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin} 71fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin 72959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. LevinNR == 6 {if (r_close0 != "" && match($0, r_close0)) next} 73fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin 74959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. LevinNR == 7 {if (r_recv != "" && (match($0, r_recv) || match($0, r_recvfrom))) next} 75fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin 76959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. LevinNR == 8 {if (r_close1 != "" && match($0, r_close1)) next} 77fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin 78959205c2a8a7c559b40204a1d33336d6800d1f1eDmitry V. LevinNR == lines && $0 == "+++ exited with 0 +++" {next} 79fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin 80fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin{ 81fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin print "Line " NR " does not match: " $0 82fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin fail=1 83fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin} 84fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin 85fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. LevinEND { 86fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin if (NR != lines) { 87fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin print "Expected " lines " lines, found " NR " line(s)." 88fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin print "" 89fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin exit 1 90fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin } 91fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin if (fail) { 92fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin print "" 93fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin exit 1 94fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin } 95fdfa72276a16d0bd42b795aef3ac6c8969210469Dmitry V. Levin} 96