named_spec.rb を書いてみたら、直後にbe_resolvable.byが実装されてた。

serverspecDNSサーバの設定をチェックするnamed_spec.rbを書いてみた。
ら、直後にbe_resolvable.byが実装されてたので書き換えた。
テスト項目はこんな感じ。

  • bindパッケージのインストール
  • named自動起動設定
  • named起動してるか
  • 53, 953ポートをlistenしてるか
  • 設定ファイルの文法チェック
  • 自身にdigで問い合わせて期待した結果が返ってくるか
  • be_resolvable.byを使う
    • localhostにnslookupで問い合わせて結果で判定する

コードはこちら。

require 'spec_helper'

describe 'bind' do
  it { should be_installed }
end

describe 'named' do
  it { should be_enabled   }
  it { should be_running   }
end

describe 'port 53' do
  it { should be_listening }
end

describe 'port 953' do
  it { should be_listening }
end

describe 'named-checkconf /etc/named.conf' do
  it { should return_exit_status 0 }
end

describe 'resolv' do
  context 'topecongiro.com' do
    it { should be_resolvable.by('dns') }
  end
  context '-type=mx topecongiro.com' do
    it { should be_resolvable.by('dns') }
  end
end

digの結果をgrepで絞ってるのが美しくない感じです。
be_resolvable.byのおかげで美しくなりました。
使う前のコードはこれ。

describe 'dig @127.0.0.1 topecongiro.com | grep -A1 "ANSWER SECTION:" | tail -n1' do
  it { should return_stdout 'topecongiro.com.	86400	IN	A	49.212.173.211' }
end

describe 'dig @127.0.0.1 topecongiro.com | grep -A1 "AUTHORITY SECTION:" | tail -n1' do
  it { should return_stdout 'topecongiro.com.	86400	IN	NS	ns1.topecongiro.com.' }
end

describe 'dig MX @127.0.0.1 topecongiro.com | grep -A1 "ANSWER SECTION:" | tail -n1' do
  it { should return_stdout 'topecongiro.com.	86400	IN	MX	10 topecongiro.com.' }
end

引いたIPまでチェックするならこっちだけど、そこまでテストする必要があるのかはアレ(判断できない)だ。