Serverspecテストコード実例の紹介とコード記述の際のポイント
2014年8月22日(金)
第1回では、Serverspecの概要とテストコードを書くまでの事前準備についてご紹介しました。第2回では、より具体的な環境を例として、実際に即したServerspecのテストコードの書き方をご紹介します。テストコードを記述する際のポイント等をまとめ、テストコードの記述をスムーズに実施できるようになることを目的として解説します。
LAMP構成のシステムのテスト
具体的なシステムとして、LAMP(Linux、Apache HTTP server、MySQL、PHP)構成の環境を想定し、この環境に対するテストコードの一例を紹介します。
LAMPの構成を採るシステムの例として、今回は統合監視ソフトウェアのZabbixを稼働させるための環境を取り上げます。LAMP環境のベースとなるLinuxは、CentOS 6.5を想定しています。
稼働状況のテストとして、大まかに以下の4つの部分に分けて各部分の稼働状況に対するテストコードを見ていきます。
- OS(Linux)部分
- Webサーバ(Apache HTTP server)部分
- DB(MySQL)部分
- アプリケーション(PHP)部分
今回の例で紹介するServerspecのテストコードでは、次の表に掲載したResourceTypeを利用します。
ResourceType種別 | 概要 | 利用可能なMatcherの例 |
---|---|---|
package | パッケージがインストールされているかのテストを実施。 rpmやdeb、rubyのgemパッケージに対応。バージョン確認も可能。 | be_installed等 |
service | サービスの稼働状況のテストを実施。 稼働状態や初期起動の設定状態の確認が可能。 | be_running、be_enabled等 |
file | 指定したファイルの存在確認や権限、所有者の確認、ファイルの中身の確認が可能。 | be_file、be_directory、be_owned_by、be_writable等 |
command | 任意のコマンドの実行結果の確認が可能。 | return_stdout、return_stderr、return_exit_status等 |
selinux | SELinuxの状態の確認が可能。 | be_disabled、be_enforcing、be_permissive |
iptables | iptablesの設定状態の確認が可能。 | have_rule |
host | ホストの名前解決が可能かどうかの確認やホストに到達可能かどうかの確認が可能。 | be_resolvable、be_reachable等 |
port | TCP、UDPのポートの稼働状態の確認が可能。 | be_listening |
php_config | PHPの設定状態の確認が可能。 | - |
【ポイント】
IPアドレス等、実行対象の環境毎に変わる値については変数として外に出し、テストコードの実行処理部分で変数展開するように書くことで、テストコードの使い回しが行いやすくなります。上記の例では、テストコード内で直接変数を定義してテストコード部分で展開していますが、設定情報だけを別ファイルとして管理することも可能です。その方法については第3回で紹介するTipsの中で解説します。
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。