Add specs for Mutant.isolate

This commit is contained in:
Markus Schirp 2014-05-11 16:01:53 +00:00
parent 2e5a13e704
commit 61b06e86d1
2 changed files with 52 additions and 1 deletions

View file

@ -62,7 +62,7 @@ module Mutant
begin
data = Marshal.load(reader.read)
rescue ArgumentError
raise IsolationError, 'Childprocess wrote unmarshallable data'
raise IsolationError, 'Childprocess wrote un-unmarshallable data'
end
status = Process.waitpid2(pid).last

View file

@ -38,4 +38,55 @@ describe Mutant do
expect(inspect).to be_frozen
end
end
describe '.isolate' do
let(:object) { described_class }
let(:expected_return) { :foo }
subject { object.isolate(&block) }
def redirect_stderr
$stderr = File.open('/dev/null')
end
context 'when block returns mashallable data, and process exists zero' do
let(:block) do
lambda do
:data_from_child_process
end
end
it { should eql(:data_from_child_process) }
end
context 'when block does return marshallable data' do
let(:block) do
lambda do
redirect_stderr
$stderr # not mashallable, nothing written to pipe and raised exceptions in child
end
end
it 'raises an exception' do
expect { subject }.to raise_error(Mutant::IsolationError, 'Childprocess wrote un-unmarshallable data')
end
end
context 'when block does return marshallable data, but process exits with nonzero exitstatus' do
let(:block) do
lambda do
redirect_stderr
at_exit do
raise
end
:foo
end
end
it 'raises an exception' do
expect { subject }.to raise_error(Mutant::IsolationError, 'Childprocess exited with nonzero exit status: 1')
end
end
end
end