是否有可能用“asterisk java”创建两个“星号”实例?

时间:2012-04-11 19:42:25

标签: java testing asterisk suite

我正在使用星号测试套件并创建自定义测试。但我正在尝试用java替换一些python脚本。

问题是我不知道如何使用“asterisk java”为每个星号实例创建两个星号实例。

1 个答案:

答案 0 :(得分:2)

好消息是,除了最高的run-tests.py脚本之外,Asterisk Test Suite与语言无关。你会发现用python,lua甚至bash编写的测试。 Java将是一个新的补充。我不建议尝试重写runtests.py - 你不会得到很多好处,虽然我想你很乐意这样做。

就“沙盒”Asterisk的一个实例而言,它不会与其他Asterisk实例发生碰撞,并且您可以同时运行任何数字,您必须采取许多步骤才能使其正常工作。幸运的是,如果你看看asterisk.py模块(在lib / python / asterisk中) - 或asttest / lib / lua中的astlib.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选项指定默认配置位置。

举个例子,让我们进行confbridge python测试。它产生了三个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没有任何问题,但是如果您决定在测试套件中使用新语言,那么还有很多重新发明的轮子你不得不做 - 而不仅仅是让Asterisk产生。我们已经在lua / python库中编写了很多其他内容,除了我在这里描述的所有东西之外,它还让你的生活更轻松。像CDR解析和操作的常见测试类,语音邮件操作,与SIPp的复杂状态机交互,利用多个SIPp实例的测试以及与Test Suite一起编排它们 - 我们一直特别关注python库晚了。您可能想要考虑使用Python - 但是,如果您真的喜欢Java,请务必随意使用它。