Можно ли создать два экземпляра "звездочки" с помощью "Звездочки 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, вы можете свободно использовать это.