我一直在尝试使用Perl实用程序/模块"证明"作为一些单元测试的测试工具.单元测试比"单元"更加"系统",因为我需要将一些后台进程分解为测试的一部分,使用以下...
sub SpinupMonitor{
my $base_dir = shift;
my $config = shift;
my $pid = fork();
if($pid){
return $pid;
}else{
my $cmd = "$base_dir\/..\/bin\/monitor_real.pl -config $config -test";
close STDOUT;
exec ($cmd) or die "cannot exec test code [$cmd]\n";
}
}
sub KillMonitor{
my $pid = shift;
print "Killing monitor [$pid]\n";
kill(1,$pid);
}
Run Code Online (Sandbox Code Playgroud)
但是出于某种原因,当我让我的.t文件启动一些额外的进程时,它会导致测试工具在所有测试完成后挂在第一个.t文件的末尾,而不是转到下一个文件,或者退出如果只有一个.
起初我想知道是否可能是因为我正在杀死我的子流程并让它们不复存在.所以我补充说..
$SIG{CHLD} = \&REAPER;
sub REAPER {
my $pid = wait;
$SIG{CHLD} = \&REAPER;
}
Run Code Online (Sandbox Code Playgroud)
到代码.但这没有用.事实上,在封闭式检查中,我发现我的perl测试文件已经退出并且现在已经不存在了,并且它是证明包装器脚本没有收到它的孩子.事实上,当我在测试脚本的末尾添加了一个die()调用时,我得到了......
# Looks like your test died just after 7.
Run Code Online (Sandbox Code Playgroud)
所以我的脚本退出了,但由于某种原因,线束没有解开.
我确实确认我的子流程肯定是令我感到不安的,因为我在禁用它们的同时测试失败,线束正确退出.
我在启动可能以某种方式扰乱线束的过程的方式有什么问题吗? …
有没有人建议找到可能在定制开发项目中出现的所有CPAN依赖关系的好方法.往往是这样的情况,您的本地开发环境很少与您的实时开发环境匹配,并且当您构建越来越多的项目时,您倾向于构建已安装模块的本地库.这些导致您不一定注意到您的最新项目对非核心模块有要求.由于通常需要将整个项目打包以部署到另一个组(在我们的案例中是我们的运营团队),因此了解应该包含哪些模块非常重要.
有没有人对这个问题有任何见解.
谢谢
彼得
在c中,如果我想搜索特定字符的字符串,我可以执行以下操作
char *p;
p = (char *)strchr(buffer,'(');
if(p){
....
Run Code Online (Sandbox Code Playgroud)
但是,如果我想搜索多个字符(或字符范围),例如"任何数字",该怎么办?我知道我可以做点什么
char *p=0;
char *i;
for(i=buffer;*i!='\0';i++){
if(*i >= '0' && *i <=9){
p=i;
}
}
if(p){
...
Run Code Online (Sandbox Code Playgroud)
假设一个正确终止的字符串等.但是有一个标准的库函数已经提供了这个功能(希望更安全)
任何人都可以为如何使用Kerberos获取Apache身份验证用户推荐一些非常好的资源.
在Kerberos上阅读背景也很有用
谢谢
彼得
我即将对现有的Apache C模块进行一些更改,以修复一些可能的安全漏洞和一般的不良做法.但是,代码的功能必须保持不变(除非修复错误).标准回归测试的东西似乎是有序的.我想知道是否有人知道在代码中运行一些回归单元测试的好方法.我正在考虑使用C-Unit,但是对于Apache APR和状态结构的所有关系,我想知道是否有一种很好的方法来测试它.是否有任何预先构建的框架可以与C-unit一起使用?
谢谢
彼得
我有一个Perl模块,我已经声明了一些常量:
use constant BASE_PATH => "/data/monitor/";
Run Code Online (Sandbox Code Playgroud)
在实时操作中,常量永远不会改变,但我希望能够在单元测试中修改它,例如将其设置为〜/ project/testdata /.有没有办法做到这一点,而不必使用"非常数"?
我可以在constant.pm上使用Test :: MockObject吗?
我正在解析一些大的日志文件,并且有一些非常简单的字符串匹配
if(m/Some String Pattern/o){
#Do something
}
Run Code Online (Sandbox Code Playgroud)
这看起来很简单,但事实上我所拥有的大部分比赛都可以对阵线的起点,但比赛将会"更长",例如
if(m/^Initial static string that matches Some String Pattern/o){
#Do something
}
Run Code Online (Sandbox Code Playgroud)
显然这是一个更长的正则表达式,因此需要更多工作来匹配.但是我可以使用行锚的开头,这将允许表达式作为失败的匹配更快地被丢弃.
我的预感是后者会更有效率.任何人都可以支持我/击落我:-)
我目前正在为一些遗留代码添加一些单元测试,我发现自己需要覆盖一个open函数.实时代码看起来像这样.
if ( !open( F, $filetoopen) ){
# do stuff with <F>
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是确保"F"包含我从测试中提供的文件句柄,而不是它认为它的开头.
我的.t文件中有以下代码...
BEGIN {
*CORE::GLOBAL::open = sub { open(F,$testfiletoopen); };
};
Run Code Online (Sandbox Code Playgroud)
...它确实有效,测试中的代码完成了从我的测试文件读取.但是,只要我使用与测试中的代码相同的文件句柄名称"F",它就会继续工作.
如果有办法使这个测试代码不那么脆弱,那么如果在实时代码中更改了文件句柄名称,那么测试不会失败?
谢谢
我一直在尝试遵循这篇 Microsoft 文章中的指南,使用 Kerberos 和 AD 对 Apache 进行身份验证。我已经用kinit成功测试了apache服务器和AD服务器之间的通信。但是,当我尝试使用 IE 访问服务器上的受限页面时,出现内部服务器错误,并且 apache 错误日志中出现以下内容。
[Wed Sep 24 14:18:15 2008] [debug] src/mod_auth_kerb.c(1483): [client 172.31.37.38] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Wed Sep 24 14:18:15 2008] [debug] src/mod_auth_kerb.c(1174): [client 172.31.37.38] Acquiring creds for HTTP/srvnfssol1.dev.local@DEV.LOCAL
[Wed Sep 24 14:18:15 2008] [error] [client 172.31.37.38] gss_acquire_cred() failed: Miscellaneous failure (see text) (Key table entry not found)
Run Code Online (Sandbox Code Playgroud)
我已经在 apache 进程上运行了 truss 并确认它实际上加载了 keytab 文件。我想知道 keytab 文件的格式是否有问题......
HTTP/srvnfssol1.dev.local@DEV.LOCAL
Run Code Online (Sandbox Code Playgroud)
但我不确定我错过了什么。或者还有什么要检查的。
有什么建议么?
谢谢
彼得
perl ×5
apache ×3
unit-testing ×3
c ×2
kerberos ×2
testing ×2
constants ×1
cpan ×1
cunit ×1
dependencies ×1
deployment ×1
die ×1
fork ×1
mocking ×1
parsing ×1
performance ×1
perl-prove ×1
regex ×1
string ×1