Forward standard error stream from remote execution

This commit is contained in:
Thibault Jouan
2014-07-21 12:45:57 +00:00
parent a033e19583
commit db91eb06cd
14 changed files with 93 additions and 17 deletions

View File

@@ -19,6 +19,15 @@ module Producer::Core
sh.apply
expect(output).to eq "#{command_args}\n"
end
context 'when content is written to standard error' do
let(:command) { "echo #{command_args} >&2" }
it 'writes errors to given error stream' do
sh.apply
expect(error_output).to eq "#{command_args}\n"
end
end
end
end
end

View File

@@ -12,7 +12,9 @@ module Producer::Core
let(:stdout) { StringIO.new }
let(:stderr) { StringIO.new }
subject(:cli) { CLI.new(arguments, stdin: stdin, stdout: stdout) }
subject(:cli) { described_class.new(
arguments,
stdin: stdin, stdout: stdout, stderr: stderr) }
describe '.run!' do
let(:cli) { double('cli').as_null_object }
@@ -118,6 +120,10 @@ module Producer::Core
it 'assigns CLI stdout as the env output' do
expect(cli.env.output).to be stdout
end
it 'assigns CLI stderr as the env error output' do
expect(cli.env.error_output).to be stderr
end
end
describe '#parse_arguments!' do

View File

@@ -10,6 +10,10 @@ module Producer::Core
expect(env.input).to be $stdin
end
it 'assigns $stderr as the default error output' do
expect(env.error_output).to be $stderr
end
it 'assigns no default target' do
expect(env.target).not_to be
end
@@ -51,6 +55,15 @@ module Producer::Core
end
end
context 'when error output is given as argument' do
let(:error_output) { StringIO.new }
subject(:env) { described_class.new(error_output: error_output) }
it 'assigns the given error output' do
expect(env.error_output).to be error_output
end
end
context 'when remote is given as argument' do
let(:remote) { double 'remote' }
subject(:env) { described_class.new(remote: remote) }

View File

@@ -106,6 +106,16 @@ module Producer::Core
expect(output.string).to eq arguments
end
it 'writes command error output to provided error output' do
error_output = StringIO.new
story_with_new_channel do |ch|
ch.sends_exec command
ch.gets_extended_data arguments
end
remote.execute command, output, error_output
expect(error_output.string).to eq arguments
end
context 'when command execution fails' do
before do
story_with_new_channel do |ch|