2016年2月21日日曜日

[CentOS6][Serverspec] 配列に定義した値で繰り返しテストする




たとえば、ユーザのテストをする場合、ユーザ数だけテストコードを書くのは面倒なので、ユーザを配列で定義して、同じテストコードをループ処理化します。

以下の例は、Ruby の書式でテストコードにユーザを定義しています。
テストコードはループで処理するようにします。

users = [{:nm => 'user01', :id => 501 },
         {:nm => 'user02', :id => 502 }]

users.each do |u|
  describe user( "#{u[:nm]}" ) do
    it { should exist }
    it { should have_uid "#{u[:id]}" }
  end
end


以下の例では、YAMLでユーザを定義しています。Serverspec でYAML を使用する方法は、以前の記事を参照にしてください。

YAML は以下のように定義します。
:users:
  - { :nm: "user01", :id: 501 }
  - { :nm: "user02", :id: 502 }

YAMLで定義した変数を使用するテストコードは以下のとおり
users = property[:users]
users.each do |u|
  describe user( "#{u[:nm]}" ) do
    it { should exist }
    it { should have_uid "#{u[:id]}" }
  end
end


上記とは異なり、単純な配列を使いたい場合は、以下のような書き方になります。
cmds={
  'cmd1' => "ret1",
  'cmd2' => "ret2",
  'cmd3' => "ret3"
}

cmds.each do |cmd, value|
  describe command("#{cmd}") do
    its(:stdout) { should match /#{value}/ }
  end
end