如何构建一个等待侦听端口的包装器?

时间:2010-06-10 13:19:07

标签: python testing sockets wrapper

我正在寻找一种以编程方式测试用asyncore Python模块编写的脚本的方法。我的测试包括启动有问题的脚本 - 如果打开TCP侦听套接字,则测试通过。否则,如果脚本在到达该点之前死亡,则测试失败。

这样做的目的是了解每晚构建是否有效(至少达到某一点)。

我认为最好的测试方法是在某种沙箱包装器中启动脚本,等待套接字请求。我不关心实际上在该端口上侦听任何内容,只是拦截请求并使用它作为我的测试通过的指示。

我认为最好拦截打开的套接字请求,而不是以设定的间隔轮询(我讨厌轮询!)。但就我如何做到这一点而言,我有点超出了我的深度。

我可以使用shell脚本吗?或者我可能需要在Python级别覆盖asyncore模块?

提前致谢,
- B

2 个答案:

答案 0 :(得分:0)

这就像代码高尔夫:

#!/bin/sh
# iamwaiting: run a command for a specified time then kill it
# returns the status of cmd on normal termination


opath=$PATH
PATH=/bin:/usr:/bin

SIGNAL=
case $1 in
    -*) SIGNAL=$1; shift;;
esac

case $# in
    0|1) echo 'usage iamwaiting [-signal] wait cmd [args]' 1>&2; exit 2;;
esac

wait=$1 ; shift

PATH=$opath "$@" &
child=$!

# unfortunately, this script takes at least wait seconds to run
sleep $wait

if kill ${SIGNAL:--2} $child 2> /dev/null ; then
    echo "iamwaiting timeout after $wait seconds: $@" 1>&2
    exit 1
else
    wait $child
    exit $?
fi

如此运作:

$ iamwaiting  5 dd if=/dev/zero of=/dev/null count=5
5+0 records in
5+0 records out
2560 bytes (2.6 kB) copied, 2.0973e-05 s, 122 MB/s
$ echo $?
0
$ iamwaiting -9 5 dd if=/dev/zero of=/dev/null 
iamwaiting timeout after 5 seconds: dd if=/dev/zero of=/dev/null
$ echo $?
1
$ iamwaiting 1 cat /dev/does-not-exist
cat: /dev/does-not-exist: No such file or directory
$ echo $?
1

我对使用asynchore例程测试asyncore程序持谨慎态度,但我很迷信。

答案 1 :(得分:0)

另一种选择是在导入socket模块之前模拟asyncore模块。当然,那么你必须首先确保模拟正常工作。