Vagrant上の仮想マシンにserverspecでテスト環境を整えようと思った時に詰まったメモ。
前提
VagrantfileのあるChefリポジトリのトップディレクトリで$serverspec-init
により初期ファイルを出力。結果は以下のとおり。
$ tree spec/
spec/
├── default
│ └── sample_spec.rb
└── spec_helper.rb
そしてrake spec
が実行可能な状態。
詰まったところ
require 'spec_helper'
describe package('vim') do
it { should be_installed }
end
仮想マシン上でyum install vim
して、ホストマシン上でrake spec
。これでテストが通るはず、と思ったら・・・
Failures:
1) Package "vim" should be installed
On host `default'
Failure/Error: it { should be_installed }
expected Package "vim" to be installed
sudo -p 'Password: ' /bin/sh -c rpm\ -q\ vim
package vim is not installed
# ./spec/default/sample_spec.rb:4:in `block (2 levels) in <top (required)>'
あれ、通らない・・・。
ご丁寧にも情報が情報が充実していて、テストに使用したコマンドが出力される。
sudo -p 'Password: ' /bin/sh -c rpm\ -q\ vim
と表示されているように、テストにrpmコマンドを利用している。どうやらyumでインストールしたpackageはこのままではテストされないようだ。
解決策
しょうがないので、yum install vim
で呼び出されてrpmからインストールされるものを確認して、直接testすることにする。
$ rpm -qa | grep vim
vim-common-7.2.411-1.8.el6.x86_64
vim-enhanced-7.2.411-1.8.el6.x86_64
vim-minimal-7.2.411-1.8.el6.x86_64
grepでしか調べてないけど、vim-common
とvim-enhanced
とvim-minimal
の3つが入っていればいいということにする。個々のpackageの違いや役割は詳しく知らないがとりあえず放っておく。
以下のようにテストスクリプトを書き直す。
require 'spec_helper'
%w{vim-common vim-enhanced vim-minimal}.each do |vim|
describe package(vim) do
it { should be_installed }
end
end
これできちんとテストができました。
Package "vim-common"
should be installed
Package "vim-enhanced"
should be installed
Package "vim-minimal"
should be installed
Finished in 0.69752 seconds (files took 6.01 seconds to load)
3 examples, 0 failures
このように毎回rpmを調べて複数packageのテストを行うのはちょいと面倒だけれども、今までyumの下のレイヤーのrpmに気を配ったことがなかったので、よい勉強の機会ということにしてこれからテストを書くことにする。