LINUX.ORG.RU
ФорумAdmin

regexp в скрипте expect

 


0

1

Всем привет!

Пишу тестовый скрипт для парсинга ответов от smtp server'a

Инструмент: expect, telnet.

алгоритм: в скрипте expect посылаю запрос на сервер с помощью telnet'a. Получаю ответ. В зависимости от возвращаемого кода ошибки в telnet выхожу из скрипта с тем или иным кодом.

Expect script (пример функции для тестирования посылки сообщения MAIL FROM: <+1234567890>):

proc mail_from {} {
        send "MAIL FROM_%? <+180938592437>\r" #ошибка специально тут
        expect {
                "500*"
                {
                        send_user "test passed \n"
                        exit 0 
                }
                -re "(?!(^500*))" #все ошибки кроме 500 - как правильно составить regexp?
                {
                        send_user "test was not passed \n"
                        exit 1
                }
        }
}

Как видно из скрипта мне надо получить код ошибки «500 + какой-то текст» тогда тест пройден (возвращается 0). Иначе - тест не пройден (возвращается 1).

не получается сделать регулярное выражение для всех возвращаемых кодов ошибок кроме 500. То есть все, когда, кроме 500 - означают, что тест не пройден.

Помогите, пожалуйста, может не учёл какие-то особенности expect.

Спасибо.

Попробуйте так:

$ cat example
spawn echo [lindex $argv 0]
expect { 
	"500*" { puts "got 500" }
	-re "(?!(^500.*)).+" { puts "got other error" }
}
$ expect example "500 some error"
spawn echo 500 some error
500 some error
got 500
$ expect example "200 some error"
spawn echo 200 some error
200 some error
got other error
gv
()
Ответ на: комментарий от gv

gv,

спасибо большое. Применю. Чуть ранее решил ситуацию так:

proc data {} {
        send "DATA\r"
        expect {
                -re "354 *" {
                        exit 0
                } default {
                        exit 1
                } timeout {
                        exit 1
                }
        }
}

вот только почему-то секция default не срабатывает, хотя в документации написано, что должно.

ru_core
() автор топика
Ответ на: комментарий от ru_core

вот только почему-то секция default не срабатывает, хотя в документации написано, что должно.

Вот так срабатывает:

$ cat example
spawn echo "500 error"
expect {
    -re "354 *" {
        puts "GOT 354"
        exit
    } default {
        puts "GOT DEFAULT"
        exit 1
    } timeout {
        puts "GOT TIMEOUT"
        exit 1
    }
}
$ expect example
spawn echo 500 error
500 error
GOT DEFAULT

Отладиться можно с помощью:

exp_internal 1

gv
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.