test-kitchen 1.0 概略 後編 #opschef_ja
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
Cookbookテストフレームワークtest-kitchen 1.0は、テストにBusserという仕組みを用いています。本稿では、デフォルトで用いられているBusser::RunnerPlugin::Batsを用いてCookbookのテストを行ってみます。
Busser::RunnerPlugin::Bats
Busser::RunnerPlugin::Bats(以下busser-bats)とは、BusserのBats: the Bash Automated Testing Systemプラグインです。test-kitchen 1.0ではデフォルトでこれを用いることが想定されているようで、2013年6月4日現在、Opscode Community Cookbooksでもbusser-bats対応が進められているようです。
chef-rvm、chef-ruby_build、chef-rbenvがbusser-batsのテストケースの例として挙げられています。
busser-batsテストケースの作成
test-kitchen 1.0のテストケースは次のディレクトリ構造で配置されます。
[COOKBOOK_NAME]/test/integration/[SUITE]/[BUSSER]/[TEST]
[SUITE]とは.kitchen.ymlで指定したsuitesの名前です。通常であればdefaultとなるでしょう。
[BUSSER]とはBusserで呼び出すプラグインの名前です。今回はbatsとなります。
[TEST]とはテストケースのファイル名です。
apache2-take Cookbookにtest.batsというファイル名のbusser-batsテストケースを配置するなら次のようになるでしょう。
apache2-take/test/integration/default/bats/test.bats
では、test.batsを作成してみます。
なお、2013年6月4日現在、特にCookbookのテスト向けに便利な関数などが用意されているわけではないので非常に泥臭いテストケースを書く必要があります。ここは是非改善してもらいたい箇所です。
#!/usr/bin/env bats
run_install_package_test() {
run apt-cache policy $1
[ $status -eq 0 ]
[ "$(echo $output | grep Installed: | awk '{print $2}')" != "(none)" ]
}
@test "apache2 must be installed" {
run_install_package_test "apache2"
}
@test "git-core must be installed" {
run_install_package_test "git-core"
}
@test "curl must be installed" {
run_install_package_test "curl"
}
@test "unzip must be installed" {
run_install_package_test "unzip"
}
@test "/etc/apache2/ports.conf must exist" {
[ -f /etc/apache2/ports.conf ]
}
@test "/etc/apache2/sites-available/default must exist" {
[ -f /etc/apache2/sites-available/default ]
}
# pending
# apache2 must be enabled
@test "/var/www/index.html must exist" {
[ -f /var/www/index.html ]
}
@test "/var/www/img must exist" {
[ -d /var/www/img ]
}
@test "apache2 must be running" {
ps ax | grep '[ a]pache2'
}
これで再度test-kitchenを実行してみます。
Chef Client finished, 15 resources updated Finished converging (0m45.80s). -----> Setting up Fetching: thor-0.18.1.gem (100%) Fetching: busser-0.4.1.gem (100%) Successfully installed thor-0.18.1 Successfully installed busser-0.4.1 2 gems installed -----> Setting up Busser Creating BUSSER_ROOT in /opt/busser Creating busser binstub Plugin bats installed (version 0.1.0) -----> Running postinstall for bats plugin create /tmp/bats20130604-5465-1vy390o/bats create /tmp/bats20130604-5465-1vy390o/bats.tar.gz Installed Bats to /opt/busser/vendor/bats/bin/bats remove /tmp/bats20130604-5465-1vy390o Finished setting up (0m14.41s).
Chef Clientの実行が終わった後、busserとbusser-batsのインストールと設定が行われます。
-----> Verifying Suite path directory /opt/busser/suites does not exist, skipping. Uploading /opt/busser/suites/bats/test.bats (mode=0644) -----> Running bats test suite 1..9 ok 1 apache2 must be installed ok 2 git-core must be installed ok 3 curl must be installed ok 4 unzip must be installed ok 5 /etc/apache2/ports.conf must exist ok 6 /etc/apache2/sites-available/default must exist ok 7 /var/www/index.html must exist ok 8 /var/www/img must exist ok 9 apache2 must be running Finished verifying (0m2.23s).
テストケースがインスタンスにコピーされ、batsによるテストが実行されます。
問題なくすべてのテストをパスしました。
以上のように、test-kitchen 1.0とbatsはまだまだ発展途上の段階ですが、一定のレベルで使える状態です。今後どのように進んでいくかわかりませんが、いち早くtest-kitchen 1.0に触れてみたい方は参考にしてみてください。
参考
