Add custom matcher of serverspec v2
userリソースにbe_locked
マッチャーを追加するコードをserverspec version2用に書き直す作業をした覚書き (既存のリソースタイプにマッチャーを追加する覚書き)
version1
module Serverspec
module Type
class User
def locked?
backend.check_user_locked(@name)
end
end
end
end
module SpecInfra
module Command
class Base
def check_user_locked(user)
"passwd -S #{escape(user)} | grep -- ' LK '"
end
end
end
end
version2
module Serverspec::Type
class User < Base
def locked?
@runner.check_user_locked(@name)
end
end
end
class Specinfra::Command::Base::User < Specinfra::Command::Base
class << self
def check_locked(user)
"passwd -S #{escape(user)} | grep -- ' LK '"
end
end
end
動作確認用コード
require 'serverspec'
set :backend, :exec
describe user('licorice') do
it { should_not be_locked }
end
describe user('licorice') do
it { should be_locked }
end
module Serverspec::Type
class User < Base
def locked?
@runner.check_user_locked(@name)
end
end
end
class Specinfra::Command::Base::User < Specinfra::Command::Base
class << self
def check_locked(user)
"passwd -S #{escape(user)} | grep -- ' LK '"
end
end
end
実行
$ bundle exec rspec test.rb
User "licorice"
should not be locked
User "licorice"
should be locked (FAILED - 1)
Failures:
1) User "licorice" should be locked
Failure/Error: it { should be_locked }
expected `User "licorice".locked?` to return true, got false
/bin/sh -c passwd\ -S\ licorice\ \|\ grep\ --\ \'\ LK\ \'
# ./test.rb:10:in `block (2 levels) in <top (required)>'
Finished in 0.07063 seconds (files took 0.30355 seconds to load)
2 examples, 1 failure
Failed examples:
参考書籍