Можно ли создать два экземпляра "звездочки" с помощью "Звездочки Java"?

Я работаю с Asterisk Test Suite, а также создаю пользовательский тест. но я пытаюсь заменить скрипт Python на Java.

проблема в том, что я не знаю, как создать два экземпляра звездочки с настраиваемой абонентской группой для каждого, используя "звездочку Java".

1 ответ

Решение

Что ж, хорошая новость в том, что за исключением самого верхнего сценария run-tests.py, Asterisk Test Suite не зависит от языка. Вы найдете тесты, написанные на python, lua и даже bash. Ява будет новым дополнением. Я бы не рекомендовал пытаться переписать runtests.py - вы не получите много денег, хотя я полагаю, что вы можете это сделать.

Что касается "песочницы" экземпляра Asterisk, так что он не сталкивается с другими экземплярами Asterisk и вы можете запускать любое число одновременно, есть ряд шагов, которые вы должны предпринять, чтобы эта работа работала должным образом. К счастью, если вы посмотрите на модуль asterisk.py (в lib/python/asterisk) - или astlib.lua в asttest/lib/lua - у вас будет несколько рабочих примеров всего, что нужно сделать, чтобы это сделать бывает.

Как минимум, вам нужно сделать следующее:

  • Создайте структуру каталогов, в которой будет размещен ваш тест. По соглашению каждый выполняемый тест выполняется в /tmp/asterisk-testsuite/[test_directory], где [test_directory] может содержать несколько подкаталогов и отражать местоположение этого теста в наборе тестов. Обратите внимание, что в самом верхнем сценарии есть ряд вещей, которые ожидают, что они будут находиться в этом относительном месте в случае неудачи теста, поэтому я бы не стал его перемещать.
  • Создайте в своей тестовой директории подпапки, соответствующие экземплярам Asterisk, которые вы собираетесь запустить. Обычно они называются astn, где n - следующий доступный номер в этом каталоге. Например, у вас есть два экземпляра Asterisk, которые вы запускаете во время теста. При первом запуске теста у вас будут подкаталоги ast1 и ast2. В следующий раз; ast3 и ast4.
  • Для каждого экземпляра Asterisk, который вы собираетесь порождать, создайте файл конфигурации asterisk.conf, который указывает относительно местоположения, упомянутого в предыдущих двух шагах, местоположение всех каталогов конфигурации Asterisk. Затем вы должны "установить" созданный asterisk.conf в /tmp/asterisk-testsuite/[test_directory]/ast[n]/etc/asterisk/asterisk.conf.
  • Установите оставшуюся часть необходимых файлов конфигурации. Библиотеки python/lua делают жесткую ссылку на файлы конфигурации, обнаруженные в хост-системе, если тесты не предоставляют файл конфигурации; в противном случае они копируют файлы конфигурации в эти каталоги.
  • Жесткая ссылка на модули, которые установлены в системе. Если у вас есть пользовательские модули для каждого теста, вы можете поместить их в каталог тестового прогона.
  • Когда вы создаете Asterisk, вы указываете другое расположение конфигурации, чем по умолчанию, с опцией -C.

В качестве примера, давайте возьмем тест python для confbridge. Это порождает три экземпляра Asterisk. При первом запуске он выходит и видит, существует ли / tmp / asterisk-testsuite. Допустим, это не так. Таким образом, мы делаем этот каталог.

/tmp/asterisk-testsuite/

Затем мы видим, что выполняемый тест живет в tests/apps/confbridge - поэтому мы создаем наш тестовый каталог, так как мы еще не запускали.

/tmp/asterisk-testsuite/apps/confbridge

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

/tmp/asterisk-testsuite/apps/confbridge
                                       /ast1
                                       /ast2
                                       /ast3

Взяв в качестве примера только ast1, мы создадим файл asterisk.conf, содержащий местоположения для наших путей:

[directories](!)
astetcdir => /tmp/asterisk-testsuite/apps/confbridge/ast1/etc/asterisk
astmoddir => /tmp/asterisk-testsuite/apps/confbridge/ast1/usr/lib/asterisk/modules
astvarlibdir => /tmp/asterisk-testsuite/apps/confbridge/ast1/var/lib/asterisk
astdbdir => /tmp/asterisk-testsuite/apps/confbridge/ast1/var/lib/asterisk
astkeydir => /tmp/asterisk-testsuite/apps/confbridge/ast1/var/lib/asterisk
astdatadir => /tmp/asterisk-testsuite/apps/confbridge/ast1/var/lib/asterisk
astagidir => /tmp/asterisk-testsuite/apps/confbridge/ast1/var/lib/asterisk/agi-bin
astspooldir => /tmp/asterisk-testsuite/apps/confbridge/ast1/var/spool/asterisk
astrundir => /tmp/asterisk-testsuite/apps/confbridge/ast1/var/run/asterisk
astlogdir => /tmp/asterisk-testsuite/apps/confbridge/ast1/var/log/asterisk

[options]
verbose = 5
debug = 5
defaultlanguage = en           ; Default language
documentation_language = en_US  ; Set the language you want documentation
                ; displayed in. Value is in the same format as
                ; locale names.   
[compat]
pbx_realtime=1.6
res_agi=1.6
app_set=1.6

Теперь мы скопируем наш asterisk.conf в наш тестовый каталог.

/tmp/asterisk-testsuite/apps/confbridge/ast1/etc/asterisk/asterisk.conf

Затем мы жестко свяжем необходимые общие объекты установленного модуля с подкаталогом /var/lib/asterisk/modules и жестко свяжем установленные файлы конфигурации с подкаталогом / etc / asterisk. В качестве альтернативы, для /var/lib/asterisk/modules мы могли бы просто позволить этому использовать стандартные установленные модули, а не делать жесткую ссылку, если вы того пожелаете.

Наконец, когда мы создаем Asterisk, мы используем следующий синтаксис:

asterisk -f -g -q -m -n -C /tmp/asterisk-testsuite/apps/confbridge/ast1/etc/asterisk/asterisk.conf

Приложение к тому, что я написал выше

В Java нет ничего плохого, но есть еще много изобретений колеса, которые вам придётся сделать, если вы решите перейти с новым языком в Test Suite, а не только с появлением Asterisk. Мы написали много других вещей в библиотеки lua/python, которые делают вашу жизнь проще в дополнение ко всему, что я здесь описал. Такие вещи, как общие тестовые классы для анализа и манипулирования CDR, манипуляции с голосовой почтой, сложные взаимодействия конечных автоматов с SIPp, тесты, которые используют несколько экземпляров SIPp и организуют их в сочетании с Test Suite, - и мы уделяем особое внимание библиотекам python с поздно. Вы можете подумать о том, чтобы просто пойти с Python, но, если вы действительно любите Java, вы можете свободно использовать это.

Другие вопросы по тегам