Использование fakesmsc для тетсирования SMS-приложений

В этой заметке я хочу рассказать о возможностях, которые предоставляет встроенный в Kannel эмулятор SMSC fakesmsc.

fakesmsc - это консольное приложение, с помощью которого можно:

  • получать MT-сообщения, предназначенные для SMSC с соответствующим smsc-id
  • эмулировать MO-сообщения от абонентов, приходящие через данный smsc-id
  • генерировать массовый SMS-трафик с указанными характеристиками

Внимание! С помошью fakesmsc не получится проверить корректность работы через SMPP или другой реальный протокол для связи с SMSC. Данный инструмент предназначен больше для проверки приложений бизнес-логики или настроек маршрутизации в Kannel.

Настраиваем эмулятор SMSC

Для начала нам нужно в файле конфигурации Kannel создать группу настроек SMSC примерно такого вида.

group = smsc 
smsc = fake
smsc-id = fake-smsc
port = 10000
connect-allow-ip = 127.0.0.1

Соответственно, нужно прописать MO и MT маршрутизацию для данного smsc-id так же, как это делается для реальных подключений.

После перезапуска Kannel в списке SMSC, выдаваемом в HTTP API, появится соответствующая запись.

# lynx -dump http://127.0.0.1:13000/status.txt | grep fake-smsc

fake-smsc[fake-smsc]    FAKE:10000 (connecting, rcvd: sms 0 (0.00,0.00,0.00) / dlr 0 (0.00,0.00,0.00), sent: sms 0 (0.00,0.00,0.00) / dlr 0 (0.00,0.00,0.00), failed 0, queued 0 msgs)

Теперь запустим приложение:

# fakesmsc
2012-01-27 17:00:54 [30347] [0] INFO: Debug_lvl = -1, log_file = <none>, log_lvl = 0
2012-01-27 17:00:54 [30347] [0] INFO: Entering interactive mode. Type your message on the command line
2012-01-27 17:00:54 [30347] [0] INFO: fakesmsc starting
2012-01-27 17:00:54 [30347] [0] DEBUG: Connecting to <127.0.0.1>

Отправляем MT SM на Fake SMSC

Для это просто делаем HTTP запрос на sendsms API:

GET -e 'http://127.0.0.1:13013/cgi-bin/sendsms?user=local&password=local&from=123&to=380672206770&text=hello+there&smsc=fake-smsc'

При этом, в консоли fakesmsc мы увидим такую запись:

2012-01-27 17:10:53 [30454] [0] DEBUG: Got message 1: <123 380672206770 text hello there>

Получаем MO SM через Fake SMSC

Чтобы эмулировать отправку текстового SMS сообщения, в консоли fakesmsc введем такой текст:

380672206770 123 text who is there?

В ответ нам должны подтвердить сообщение:

2012-01-27 17:14:04 [30454] [0] DEBUG: fakesmsc: sent message 1 

Теперь, если мы посмотрим в CDR-файл Kannel, то увидим такую запись:

2012-01-27 17:14:04 Receive SMS [SMSC:fake-smsc] [SVC:] [ACT:] [BINF:] [FID:] [META:] [from:380672206770] [to:123] [flags:-1:-1:-1:-1:-1] [msg:13:who is there?] [udh:0:]

Так что сообщение успешно было полученно Kannel.

Эмулируем случайную нагрузку

Иногда нам нужно проверить, как будет система работать при получении сообщений от разных абонентов и на разные сервисные номера.

Для этих целей мы запустим fakesmsc с параметрами:

  • -i  - интервал автоматической отправки (в секундах)
  • -z - какие параметры рандомизировать (7 - адреса отправителя и получателя, окончание текста)

fakesmsc -i 1 -z 7 "38063 3456 text test here"

В результате в консоли мы увидим такие записи:

2012-01-27 17:23:16 [30608] [0] DEBUG: fakesmsc: sent message 1
2012-01-27 17:23:16 [30608] [0] DEBUG: Got message 1: <34561348568990 38063243509451 text Welcome to the Kannel system! Send HELP to get help message.>
2012-01-27 17:23:17 [30608] [0] DEBUG: fakesmsc: sent message 2
2012-01-27 17:23:17 [30608] [0] DEBUG: Got message 2: <34561692994552 38063869260298 text Welcome to the Kannel system! Send HELP to get help message.>
.....................................

.....................................
2012-01-27 17:23:26 [30608] [0] DEBUG: fakesmsc: sent message 11
2012-01-27 17:23:26 [30608] [0] DEBUG: Got message 11: <3456740359792 380631961114638 text Welcome to the Kannel system! Send HELP to get help message.>
^C2012-01-27 17:23:27 [30608] [0] INFO: fakesmsc: 11 messages sent and 11 received
2012-01-27 17:23:27 [30608] [0] INFO: fakesmsc: total running time 10.8 seconds
2012-01-27 17:23:27 [30608] [0] INFO: fakesmsc: from first to last sent message 10.0 s, 1.0 msgs/s
2012-01-27 17:23:27 [30608] [0] INFO: fakesmsc: from first to last received message 10.0 s, 1.0 msgs/s
2012-01-27 17:23:27 [30608] [0] INFO: fakesmsc: terminating