Add specs for Mutant.isolate
This commit is contained in:
parent
2e5a13e704
commit
61b06e86d1
2 changed files with 52 additions and 1 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue