如何使用RSPEC在木偶中模拟Puppet validate_cmd



我有一个木偶食谱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命令?任何帮助将不胜感激!

简短的答案是,这是不可能的,您需要使用烧杯,测试厨房等工具等。

要获得更长的答案,我将您引导到RSPEC-PUPPET教程:

有很多人对这些测试的目的感到困惑,因为他们无法测试现场系统上清单的结果。那不是RSPEC-PUPPET的重点。RSPEC-PUPPET测试在木偶将您的表现汇编成木偶资源的目录时,将在那里测试它的行为。

关键点是rspec-puppet从不使用它编译的目录;它仅检查编译后的目录,并允许您对那里的内容做出断言。但是,要响应validate_cmd的差异来观察行为,您确实需要将目录应用于真实系统。

当然,在烧杯或测试厨房中设置系统并不是很微不足道的,这样您的脚本也会返回两个不同的值。此外,您真正要测试什么。您不是在测试木偶本身是否会做什么?如果是这样,您真的不应该尝试测试。

或者,这是您写过自己的脚本吗?如果是这样,请考虑使用BASH单元测试框架,例如Shunit2或BATS。相反,证明您的Shell脚本以您对OS的响应方式行事。

相关内容

  • 没有找到相关文章

最新更新