fbpx

CL LAB

HOME > CL LAB > busser-rspec による Serverspec テスト #opschef_ja

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

 ★ 24

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

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

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 <default-ubuntu-1204> (1m36.63s).
-----> Setting up <default-ubuntu-1204>
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 <default-ubuntu-1204> (1m0.30s).

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

-----> Verifying <default-ubuntu-1204>
       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 <default-ubuntu-1204> (0m8.91s).

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

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

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

CL LAB Mail Magazine

CL LABの情報を逃さずチェックしよう!

メールアドレスを登録すると記事が投稿されるとメールで通知します。

メールアドレス: 登録

※登録後メールに記載しているリンクをクリックして認証してください。

Related post