hatenob

プログラムって分からないことだらけ

一人Web開発~第3夜(2) サーバ共通設定のテスト

サーバ共通設定としてcookbooks/commonで導入した内容のテストを書きます。
テスト対象はタイムゾーンの設定とNTPの設定の2つです。

テストを書く

タイムゾーンのテストはこんな感じ。

# spec/localhost/timezone_spec.rb
require 'spec_helper'

describe file('/etc/localtime') do
  it { should be_linked_to '/usr/share/zoneinfo/Asia/Tokyo' }
end

ちゃんとリンクされていることをテストします。

NTPのテストはこちら。

# spec/localhost/ntp_spec.rb
require 'spec_helper'

describe package('ntp') do
  it { should be_installed }
end

describe service('ntpd') do
  it { should be_enabled }
  it { should be_running }
end

describe port(123) do
  it { should be_listening }
end

describe file('/etc/ntp.conf') do
  it { should be_file }
  it { should contain "tinker panic 0" }
  it { should contain "server ntp.nict.jp" }
end

インストールや起動設定、設定ファイルのテストをしています。

テストを実行する

rspecを使ってテストを実行します。

# /opt/chef/embedded/bin/rspec spec
........

Finished in 0.57207 seconds
8 examples, 0 failures

無事に通りました。
あとはサーバの設定を追加するたびにテストを書いていくことになります。

serverspecでテストできること

基本的に、設定関連のテストをするのがメイン。
「設定が正しくなされているか?」をテストするのだけれど、実際1台のサーバを1回だけテストするのであれば目検でも十分と言える。

serverspecの設定ファイル関連のテストで気を付けいないといけないのは、「ファイルに指定文言が含まれているか?」が主なテストになる。たとえ全ての項目を書いたとしても「それ以外が含まれていないこと」のテストはできないので、それをやりたければ工夫する必要がありそう。
個人的には、全部ではなく重要な項目(これも主観になるけれど)についてのみ、設定ファイル項目をテストするのがよいのではなかろうか。
とは言え今回初めてなので、もう少し使って「いい具合」を見つけたいと思います。