newalias や postmap の実行漏れで、
/etc/aliases が更新されているのに /etc/aliases.db が更新されていないというようなことを確認するため、
2 つのファイルの修正時刻の比較用として、
File に be_newer_than と be_older_than を追加してみた。
とりあえず、spec/spec_helper.rb に以下を追記。
class Specinfra::Command::Base::File < Specinfra::Command::Base
class << self
def check_is_older_than(file, other)
"[ #{escape(file)} -ot #{escape(other)} ]"
end
def check_is_newer_than(file, other)
"[ #{escape(file)} -nt #{escape(other)} ]"
end
end
end
module Serverspec::Type
class File < Base
def newer_than?(other)
@runner.check_file_is_newer_than(@name, other)
end
def older_than?(other)
@runner.check_file_is_older_than(@name, other)
end
end
end
これで、以下のように be_older_than と be_newer_than が使える。
describe file('/etc/aliases') do
it { should be_file }
it { should be_older_than '/etc/aliases.db' }
end
describe file('/etc/aliases.db') do
it { should be_file }
it { should be_newer_than '/etc/aliases' }
end
自分としてはあると便利だと思うんだけど、
こういうことやるなら be_newer_than という名前しかないだろうと
『serverspec be_newer_than』でググっても 1 件もひっかからず、
こういう需要はないんだろうか?と気になっている。