fbpx

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)とは、BusserBats: the Bash Automated Testing Systemプラグインです。test-kitchen 1.0ではデフォルトでこれを用いることが想定されているようで、2013年6月4日現在、Opscode Community Cookbooksでもbusser-bats対応が進められているようです。

chef-rvmchef-ruby_buildchef-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に触れてみたい方は参考にしてみてください。

参考

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA