こんにちは!beardです!
今回は、ServerspecでWindowsServer2008R2のテストをしてみます。
ServerspecでWindowsをテストするときはwinrmという機能を使います。
ざっくりと紹介しますと、Windowsをリモート制御できるプロトコルになります。
1. テストするWindows環境の準備
まずEC2でWindowsServer2008R2 BaseのAMIを選び起動させます。2008R2のEC2ではwinrmはデフォルトで起動しています。Serverspecでテストするためには二つ、winrmの設定を変更します。コマンドプロンプトで以下の二つを実行します。
1 2 |
$ winrm set winrm/config/service @{AllowUnencrypted="true"} ←winrmの暗号化を解除 $ winrm set winrm/config/service/auth @{Basic="true"} ←Basic認証を有効にします |
実行したところ
2. Serverspec側の準備
Windowsなので新規にディレクトリを作ってserverspec-initをするのがお勧めです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ serverspec-init Select OS type: 1) UN*X 2) Windows Select number: 2 ←Windows Select a backend type: 1) WinRM 2) Cmd (local) Select number: 1 ←WinRM + spec/ + spec/localhost/ + spec/localhost/httpd_spec.rb + spec/spec_helper.rb + Rakefile |
spec/spec_helper.rbの内容をテスト対象のサーバに対応させます。
spec/spec_helper.rbの内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
require 'serverspec' require 'winrm' include SpecInfra::Helper::WinRM include SpecInfra::Helper::Windows RSpec.configure do |c| user = "Administrator" ←AdministratorかAdministrator権限を持ったユーザ pass = "******" ←パスワード endpoint = http://8.8.8.8:5985/wsman ←テスト対象のIPアドレスとwinrmのポート(デフォルトは5985です) c.winrm = ::WinRM::WinRMWebService.new(endpoint, :ssl, :user => user, :pass => pass, :basic_auth_only => true) c.winrm.set_timeout 300 # 5 minutes max timeout for any operation end |
spec/localhost/httpd_spec.rbがデフォルトで生成されますが、こちらはLinux用のものができてしまうので以下のように書き換えます。
今回は、基本操作をするだけなのでテスト内容はc:/windowsのフォルダがあることだけをテストします。
spec/localhost/httpd_spec.rbの内容
1 2 3 4 |
require 'spec_helper' describe file('c:/windows') do it { should be_directory } end |
3. 実行します
1 2 3 4 5 6 |
$ rake spec /usr/bin/ruby2.0 -S rspec spec/localhost/httpd_spec.rb . Finished in 7.24 seconds 1 example, 0 failures |
1 example, 0 failuresと表示されれば成功です。
いかがでしたか。
数値だけを変数として扱うことで、コードを変更せずにスペックの違いをテストすることができます。
いかがでしたでしたか。
次回もお楽しみに!!