rspec/serverspec 服务测试总是失败
rspec/serverspec service test always fails
我认为这个问题可能与 serverspec service test returns incorrect failure 重复,但我提供了更多关于我的执行环境的信息。
我对 AWS 上的 RHEL6 虚拟机执行了一系列成功的服务rspec 测试。
然而,任何 "service" 测试似乎都无法通过匹配器 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 进行一些调试,但看起来不太简单,所以我暂时放弃了。
我是运行宁ruby2.0,服务rspec2.24,rspec3.3
谁能帮我指明正确的方向?
我需要指定要检查的运行级别,然后一切正常。我认为这是 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
如果带级别的解决方案没有帮助,我还发现您需要在 spec_helper.rb 文件中设置 PATH 变量以包含 /sbin 和 /usr/sbin。这对我个人有用。
我认为这个问题可能与 serverspec service test returns incorrect failure 重复,但我提供了更多关于我的执行环境的信息。
我对 AWS 上的 RHEL6 虚拟机执行了一系列成功的服务rspec 测试。
然而,任何 "service" 测试似乎都无法通过匹配器 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 进行一些调试,但看起来不太简单,所以我暂时放弃了。
我是运行宁ruby2.0,服务rspec2.24,rspec3.3
谁能帮我指明正确的方向?
我需要指定要检查的运行级别,然后一切正常。我认为这是 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
如果带级别的解决方案没有帮助,我还发现您需要在 spec_helper.rb 文件中设置 PATH 变量以包含 /sbin 和 /usr/sbin。这对我个人有用。