Как мне создать оболочку для ожидания прослушивания через порт? - PullRequest
0 голосов
/ 10 июня 2010

Я ищу способ программного тестирования сценария, написанного с помощью модуля asyncore Python.Мой тест состоит из запуска соответствующего скрипта - если открыт TCP-сокет прослушивания, тест проходит успешно.В противном случае, если сценарий умирает до достижения этой точки, тест не пройден.

Цель этого - узнать, работает ли ночная сборка (по крайней мере, до определенного уровня) или нет.

Я думал, что лучший способ проверить это запустить скрипт в какой-нибудь оболочке из песочницы, которая ожидает запроса сокета.Меня не волнует фактическое прослушивание чего-либо на этом порту, просто перехват запроса и использование его в качестве индикатора того, что мой тест пройден.

Я думаю, что было бы предпочтительнее перехватить запрос открытого сокета, чемопрос через определенные промежутки времени (я ненавижу опрос!).Но я немного не знаю, как именно это сделать.

Могу ли я сделать это с помощью сценария оболочки?Или, возможно, мне нужно переопределить модуль asyncore на уровне Python?

Заранее спасибо,
- B

Ответы [ 2 ]

0 голосов
/ 11 июня 2010

Другой вариант - смоделировать модуль socket перед импортом модуля asyncore. Конечно, тогда вы должны сначала убедиться, что макет работает правильно.

0 голосов
/ 10 июня 2010

Это было похоже на код-гольф:

#!/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

Я бы с осторожностью проверил асинхронные программы с помощью асинхронных подпрограмм, но я так суеверен.

...