はじめに
- test-kitchen を走らせた後で serverspec を使ってテストを試している記事を見つけたので試す
- 海外でも serverspec が広く受け入れられていて本当に素晴らしいと思う
- test-kitchen のドライバとして kitchen-docker を使う
参考
準備
test-kitchen
や kitchen-docker
等は既にインストールされているという状態から...
serverspec のインストール
sudo gem install serverspec --no-ri --no-rdoc -V
cookbook の test ディレクトリに spec ファイルを置く
今回はこちらの cookbook を使ってテストする。
mkdir elasticsearch_cookbook/test/integration/default/serverspec
上記の spec
ファイルを設置する serverspec
ディレクトリを作成して *_spec.rb
を作成する。
vim elasticsearch_cookbook/test/integration/default/serverspec/check_spec.rb
check_spec.rb
の中身は以下の通り。
require 'serverspec' include Serverspec::Helper::Exec include Serverspec::Helper::DetectOS RSpec.configure do |c| c.before :all do c.path = '/sbin:/usr/sbin' end end describe package('elasticsearch') do it { should be_installed } end describe process('java') do it { should be_running } its(:args) { should match /elasticsearch/ } end
テストしてみる
とにかく流れを見る
test-kitchen の使い方はこちらを参考にしつつ kitchen verify
を実行する。
kitchen verify
そして暫くすると...
上記のように cookbook
をテスト用の docker
コンテナに適用後、serverspec
を利用する準備として busser
の設定と busser
プラグインの busser-serverspec がインストールされて serverspec
によるテストが開始される。
以下はおまけ。kitchen verify
した後で kitchen list
してさらに kitchen verify
している動画。serverspec
が動作していることがわかるかな。
ついでに recipe
を修正して kitchen converge
してからの kitchen verify
の流れ。
字がちっちゃいけど雰囲気は伝わるかな...
busser とは
今更で大変恐縮だが busser とは...
Busser is a test setup and execution framework designed to work on remote nodes whose system dependencies cannot be relied upon, except for an Omnibus installation of Chef. It uses a plugin architecture to add support for different testing strategies such minitest, cucumber, bash, etc.
上記の通り、プラグインアーキテクチャを採用したリモートホストで動作するように設計されたテストフレームワーク。今回、そのプラグインの一つとして busser-serverspec を利用して cookbook
を適用したコンテナに対してテストを行うことになる。
最後に
kitchen-test
とserverspec
を連携させることでkitchen
コマンドでserverspec
でのテストが行えるようになってテストがより身近に感じられた- 今後は
cookbook
を書く場合にはtest-kitchen
+serverspec
でテストをすることにしたい - 「はじめに」にも記載したが、海外でも serverspec が広く受け入れられていて本当に素晴らしいと思う