【问题标题】:How to use Serverspec to test the utility installed in other user?如何使用 Serverspec 测试安装在其他用户中的实用程序?
【发布时间】:2016-06-13 16:36:21
【问题描述】:

我的要求是我需要运行安装在其他用户中的实用程序,并且我必须检查从该会话返回的输出并进行验证。 示例:

  • 我以 srijava 用户身份安装了 java
  • 现在,在 Serverspec 中,我编写了测试 Java 版本的命令(假设 java -version 仅在该用户中运行,而不是以 root 身份运行)。
  • 如果我使用su srijava,那么我不会将输出返回到根会话并且测试失败。
  • 如果我在没有su srijava 的情况下运行,那么我的实用程序将抛出错误 用户不是 SriJava

带有su 的代码:

describe command('su srijava ; cd /app/java; ./java --version') do
  its(:stdout) { should contain('1.7') }
end

没有su的代码:

describe command('cd /app/java; ./java --version') do
  its(:stdout) { should contain('1.7') }
end

【问题讨论】:

    标签: chef-infra serverspec


    【解决方案1】:
    describe command("su -c '/app/java/java --version' srijava") do
      its(:stdout) { should contain('1.7') }
    end
    

    仅供参考,您正在使用 RSpec 2,并且很快就会成为匹配器的过时 Serverspec 语法。考虑通过以下方式对其进行未来验证:

    describe command("su -c '/app/java/java --version' srijava") do
      its(:stdout) { is_expected.to match(/1\.7/) }
    end
    

    【讨论】:

    • 如果没有接收器不被弃用 AFAIK,那就是 object.should 被攻击了。
    • @coderanger 我没有说任何弃用的东西。你指的是什么?
    • 您说“Rspec 2”和“过时”,我想是因为您混淆了使用should 的两种形式。无接收器仍然存在于 Rspec 3 中并且没有过时(并且在所有 Serverspec 示例中都使用)。因此,您应该删除答案的那部分,因为它不正确:)
    • @coderanger 我仍然不知道你在说什么。我说它使用的是 RSpec 2 (should) 并且很快就会过时 Serverspec (contain) 匹配器语法。这是绝对正确的。如果这仍然不清楚,我建议阅读 RSpec 和 Serverspec 文档,因为我不想在这里的 cmets 中有一个大的侧面说明。谢谢。
    猜你喜欢
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多