我有如下的木偶食谱rspec样本测试
it {
is_expected.to contain_file('/etc/resolv.conf')
.with(
'ensure' => 'file',
'owner' => 'root',
'group' => 'root',
'mode' => '0444',
'validate_cmd' => '/var/tmp/checkdns_nameservers.sh',
)
.with_content(resolvconf_contents)
.that_notifies('Service[sshd]')
.that_notifies('Service[nscd]')
}
问题在于,这仅检查清单中是否有validate_cmd。
我必须模拟validate_cmd函数并返回true / false,然后我必须检查新创建文件的内容。 如何使用rspec模块模拟validate_cmd命令? 任何帮助将不胜感激!
答案 0 :(得分:4)
最简单的答案是,这是不可能的,您需要使用Beaker,Test Kitchen等工具。
要获得更长的答案,我将带您到Rspec木偶tutorial:
许多人对这些测试的目的感到困惑,因为他们无法在实时系统上测试清单的结果。那不是rspec-puppet的重点。 Rspec-puppet测试可以测试Puppet将清单编译为Puppet资源目录时的行为。
关键是Rspec-puppet永远不会应用它编译的目录;它仅检查编译的目录,并允许您声明其中的内容。但是,要观察行为以响应您的validate_cmd
所做的不同,您确实需要在真实系统上应用目录。
当然,在Beaker或Test Kitchen中设置系统并不是一件容易的事,这样您的脚本也将返回两个不同的值。此外,您真正要测试什么。您不是在测试Puppet本身是否按承诺做吗?如果是这样,您真的不应该尝试进行测试。
或者,这是您自己编写的脚本吗?如果是这样,请考虑使用shunit2或BATS之类的Bash单元测试框架。相反,请证明您的Shell脚本的行为符合您期望的操作系统响应方式。