2015-11-06 72 views
1

我相信這個問題可能是serverspec service test returns incorrect failure的重複,但是我包含了更多關於執行環境的信息。rspec/serverspec服務測試總是失敗

我有一堆成功的針對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一起玩,但看起來並不那麼簡單,所以我現在就放棄了這一點。

我運行紅寶石2.0,serverspec 2.24,RSpec的3.3

誰能幫我指出了正確的方向?

回答

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 
+0

此解決方案對我無效。任何替代品? – fiunchinho

0

如果用級解決方案沒有幫助,我也發現,你需要設置在spec_helper.rb文件中的PATH變量包括/ sbin目錄和/ usr/sbin目錄。這對我個人來說是個竅門。