fbpx

busser-rspec による Serverspec テスト #opschef_ja

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

Busser::RunnerPlugin::Rspec(以下 busser-rspec)とは、テストフレームワークBusserRSpecプラグインです。

Cookbookテストフレームワークtest-kitchen 1.0にて、RSpecを用いたテストを行えます。
また、ServerspecはRSpecテストなので、Busser::RunnerPlugin::Serverspec(以下 busser-serverspec)を用いずにbusser-rspecで実行することも可能です。

Serverspecの適用

まず、作業マシンにてRubyGemsでServerspecをインストールしてください。


% gem install serverspec --no-rdoc --no-ri
Fetching: serverspec-0.5.0.gem (100%)
Successfully installed serverspec-0.5.0
1 gem installed
%

適用したいCookbookの test/integration/default/ ディレクトリに移動し、rspecディレクトリを作成、移動してください。


% cd apache2-take/test/integration/default
% mkdir rspec
%

busser-rspecには、内部でbundlerを用いてテストに必要なgemをインストールする仕組みがあります(lib/busser/runner_plugin/rspec.rb#L42)。

今回の場合、Serverspecでテストするため、インストール用のGemfileをapache2-take/test/integration/default/rspec/ ディレクトリに作成します。


% vi Gemfile
source 'https://rubygems.org'
gem 'serverspec'
%

serverspec-initコマンドを実行し、テストケース雛形を生成します。


% serverspec-init
Select a backend type:

1) SSH
2) Exec (local)

Select number: 2


+ spec/
+ spec/localhost/
+ spec/localhost/httpd_spec.rb
+ spec/spec_helper.rb
+ Rakefile
%

backend typeは2を選択してください。

busser-serverspecではRakefileの削除とspecディレクトリのリネームを行っていましたが、必要ありません。


% ls -RF rspec
rspec:
Gemfile Rakefile spec/

rspec/spec:
localhost/ spec_helper.rb


rspec/spec/localhost:
httpd_spec.rb

test/integration/default/serverspec/localhost/httpd_spec.rbがテストケース雛形です。これをリネームし、修正を加えていきます。
なお、*_spec.rbというファイル名でなければいけないことに注意してください。


% cd rspec/spec/localhost
% mv httpd_spec.rb apache2-take_spec.rb
% vi apache2-take_spec.rb

次のようにテストケースができました。


require 'spec_helper'

%w{ apache2 git-core curl unzip }.each do |i|
describe package( i ) do
it { should be_installed }
end
end

%w{ /etc/apache2/ports.conf /etc/apache2/sites-available/default }.each do |i|
describe file( i ) do
it { should be_file }
end
end

describe file( '/var/www/index.html' ) do
it { should be_file }
end

describe file( '/var/www/img' ) do
it { should be_directory }
end


describe service( 'apache2' ) do
it { should be_enabled }
it { should be_running }
end

これでtest-kitchenを実行してみます。


Chef Client finished, 14 resources updated
Finished converging (1m36.63s).
-----> 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
Plugin rspec installed (version 0.7.0)
-----> Running postinstall for rspec plugin
Finished setting up (1m0.30s).

Chef Clientの実行によりCookbookの適用が終わった後、busserとbusser-rspecのインストールが行われます。


-----> Verifying
Suite path directory /opt/busser/suites does not exist, skipping.
Uploading /opt/busser/suites/rspec/Gemfile (mode=0644)
Uploading /opt/busser/suites/rspec/Rakefile (mode=0644)
Uploading /opt/busser/suites/rspec/spec/spec_helper.rb (mode=0644)
Uploading /opt/busser/suites/rspec/spec/localhost/apache2-take_spec.rb (mode=0644)

テストケースがインスタンスにコピーされます。


-----> Running rspec test suite
[2013-06-07T07:27:17+00:00] INFO: Run List is []
[2013-06-07T07:27:17+00:00] INFO: Run List expands to []
Recipe: (chef-apply cookbook)::(chef-apply recipe)
* execute[bundle install --local || bundle install] action run[2013-06-11T04:29:56+00:00] INFO: Processing execute[bundle install --local || bundle install] action run ((chef-apply cookbook)::(chef-apply recipe) line 42)
Resolving dependencies...
Using diff-lcs (1.2.4)
Using highline (1.6.18)
Using net-ssh (2.6.7)
Using rspec-core (2.13.1)
Using rspec-expectations (2.13.0)
Using rspec-mocks (2.13.1)
Using rspec (2.13.0)
Using serverspec (0.5.6)
Using bundler (1.3.5)
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
[2013-06-07T07:27:17+00:00] INFO: execute[bundle install --local || bundle install] ran successfully


- execute bundle install --local || bundle install

bundlerでServerspecがインストールされます。


..........


Finished in 0.21711 seconds
10 examples, 0 failures
Finished verifying (0m8.91s).

RSpecからServerspecによるテストが実行されます。

問題なくすべてのテストをパスしました。

以上のようにbusser-rspecを用いることでもServerspecによるテストが行えました。
RSpecを利用した他のテストを行うことも可能と思われます。是非参考にしてみてください。

Author

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

Daisuke Higuchiの記事一覧

新規CTA