rspec / serverspec服务测试总是失败

时间:2015-11-06 12:54:52

标签: ruby testing service rspec serverspec

我认为这个问题可能与serverspec service test returns incorrect failure重复,但我提供了更多关于执行环境的信息。

我在AWS上针对RHEL6 VM执行了一系列成功的serverspec测试。

然而,任何“服务”测试似乎都失败了,匹配器be_enabled和be_running。

我的spec_helper.rb中有以下内容:

set :os, :family => 'redhat', :release => '6', :arch => 'x86_64'

我为测试尝试了serverspec和rspec语法,并且两者都运行相同的命令时失败:

describe service('ntpd') do
    it { should be_enabled }
    it { should be_running }
end

it "is running ntpd" do
    expect(service("ntpd")).to be_enabled
    expect(service("ntpd")).to be_running
end


Failure/Error: it { should be_enabled }
    expected Service "ntpd" to be enabled
    sudo -p 'Password: ' /bin/sh -c chkconfig\ --list\ ntpd\ \|\ grep\ 3:on

Failure/Error: it { should be_running }
    expected Service "ntpd" to be running
    sudo -p 'Password: ' /bin/sh -c service\ ntpd\ status

但是,在服务器上本地运行它们会成功:

$ sudo -p 'Password: ' /bin/sh -c chkconfig\ --list\ ntpd\ \|\ grep\ 3:on
ntpd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
$ echo $?
0

$ sudo -p 'Password: ' /bin/sh -c service\ ntpd\ status
ntpd (pid  1101) is running...
$ echo $?
0

我尝试用pry-byebug设置一些调试,但看起来并不那么简单,所以我现在就放弃了。

我正在运行ruby 2.0,serverspec 2.24,rspec 3.3

任何人都可以帮我指出正确的方向吗?

2 个答案:

答案 0 :(得分:1)

我需要指定要检查的运行级别,然后才能运行。我认为这是RHEL6 / 7和systemV / systemD之间的一些向后兼容性问题,因为文档表明上述测试应该有效。

describe service('ntpd') do
    it { should be_enabled.with_level(2) }
    it { should be_enabled.with_level(3) }
    it { should be_enabled.with_level(4) }
    it { should be_enabled.with_level(5) }
    it { should be_running }
 end

答案 1 :(得分:0)

如果带有级别的解决方案没有帮助,我还发现您需要在spec_helper.rb文件中设置PATH变量以包含/ sbin和/ usr / sbin。这对我个人起了作用。