inifileを使ってServerspecのテストを書いてみる part2
今回は、inifile
のインストール&テストの記述をしていきます。
GitHub - TwP/inifile: Native Ruby package for reading and writing INI files
インストール
インストールはいたって簡単で、gemパッケージを追加するだけです。
なので、Gemfile
にinifile
を記述してインストールしましょう。
$ cat Gemfile # frozen_string_literal: true source "https://rubygems.org" gem "rake" gem "serverspec" gem "highline" gem "inifile" $ bundle install ... $ bundle exec gem list | grep inifile inifile (3.0.0)
テストの記述
ではテストを記述していきます。
今回は、php.ini
に記述されたパラメータshort_open_tag = Off
とmysql.connect_timeout = 60
を例に書いていきます。
早速、実際のコードを示します。
1 require 'spec_helper' 2 require 'inifile' 3 4 # パッケージがインストールされているか 5 describe package('php') do 6 it { should be_installed } 7 end 8 9 # php.iniの設定は正しいか 10 describe 'php.ini' do 11 describe file('/etc/php.ini') do 12 # ファイルは存在するか 13 it { should be_file } 14 15 # 各パラメータの設定は正しいか 16 it 'configures check' do 17 conf = IniFile.new.parse(subject.content) 18 expect(conf['PHP']['short_open_tag']).to eq 'Off' 19 expect(conf['MySQL']['mysql.connect_timeout']).to eq 60 20 end 21 end 22 end
ポイントを解説します。
point1:requireでinifile
を呼び出す
2行目のrequire 'inifile'
で、inifileモジュールを使えるようにします。
point2:expect
を使ってセクション・キーのペアで設定値をテスト
15〜20行目が、テスト部分に該当します。
17行目で、php.ini
を構文解析した結果を変数conf
に格納しています。
18行目と19行目で各パラメータの値をテストしています。
例えば、expect(conf['PHP']['short_open_tag']).to eq 'Off'
は、セクション[PHP]
のキーshort_open_tag
の値がOff
であることを確認します。
実際のphp.ini
ファイルと照らし合わせてみると良いでしょう。
以下、抜粋。
$ cat modules/php/templates/etc/php.ini.erb ... [PHP] ... short_open_tag = Off ... [MySQL] ... mysql.connect_timeout = 60 ...
今回示した部分以外のテストしたい場合も、同様に記述すればOKです。
テストしてみる
実際にテストするとこのような結果になります。
configures check
の部分がinifile
を使ってテストした部分に該当します。
ちなみに、configures check
という表示は、テストコードの16行目でit 'configures check' do
と記述した部分が該当します。
$ TARGET_HOST=WEB01 ASK_SUDO_PASSWORD=1 bundle exec rspec spec/WEB01/php_spec.rb Enter sudo password: Package "php" should be installed php.ini File "/etc/php.ini" should be file configures check Finished in 2 seconds (files took 2.99 seconds to load) 3 examples, 0 failures
こんな感じで、テストすることが可能です。
次回は、should match
を使ってテストを記述した場合との比較をしてみたいと思います。