ohaiをserverspecから使う

久々のエントリです。


serverspecを使って、テストを書く事が増えてきたのですが、
serverspecからohaiを呼び出して使いたいなーと思って調べていました。


…と、そのものずばりのやり方があったため、参考にさせていただいて試してみました。


spec_helper.rbに以下のように記述し、ohaiを呼び出せるようにしました。
※serverspecのversion1に対応した書き方になっています。

require 'serverspec'

$LOAD_PATH.concat Dir.glob('/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/*/lib')
require 'ohai'
ohai = Ohai::System.new
ohai.all_plugins
$ohaidata = ohai.data

include SpecInfra::Helper::Exec
include SpecInfra::Helper::DetectOS

RSpec.configure do |c|
  if ENV['ASK_SUDO_PASSWORD']
    require 'highline/import'
    c.sudo_password = ask("Enter sudo password: ") { |q| q.echo = false }
  else
    c.sudo_password = ENV['SUDO_PASSWORD']
  end
end


次にテストケースです。ローカルにインストールしたperlモジュールの存在チェックをしていたのですが、32bit/64bitでパスが変わるため、ohaiの情報を使ってみたところです。

require 'spec_helper'

arch = $ohaidata['kernel']['machine']

describe file("/usr/local/perl/lib/#{arch}-linux/List/MoreUtils.pm") do
  it { should be_file }
  it { should be_mode 444 }
  it { should be_owned_by 'user' }
  it { should be_grouped_into 'user' }
end


ohaiとserverspecを組み合わせると、より柔軟なテストケースがかけそうなので、
色々と試してみようと思います。


今日はこんなところで。