Skip to content

Commit

Permalink
Extracted shared examples for StdinProcessAdapter
Browse files Browse the repository at this point in the history
  • Loading branch information
Nu-hin committed Aug 30, 2018
1 parent 97bb21d commit 4950278
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 50 deletions.
@@ -1,4 +1,7 @@
require 'support/shared_examples/stdin_process_adapter'

describe ::RemoteRuby::LocalStdinAdapter do
include_context 'STDIN adapter'
subject(:adapter) { described_class.new(working_dir: working_dir) }

let(:working_dir) do
Expand Down
54 changes: 4 additions & 50 deletions spec/remote_ruby/connection_adapter/ssh_stdin_adapter_spec.rb
@@ -1,4 +1,8 @@
require 'support/shared_examples/stdin_process_adapter'

describe ::RemoteRuby::SSHStdinAdapter do
include_context 'STDIN adapter'

subject(:adapter) { described_class.new(params) }

let(:working_dir) { '/var/ruby_project' }
Expand All @@ -22,54 +26,4 @@
)
end
end

describe '#open' do
let(:code) { '1 + 1' }
let(:output_content) { 'output' }
let(:error_content) { 'error' }
let(:fake_stdin) { StringIO.new }
let(:wait_thr) { double(:wait_thr, value: value) }
let(:value) { double(:value, success?: success?, to_s: exit_code.to_s) }
let(:success?) { true }
let(:exit_code) { 0 }

before(:example) do
allow(adapter).to receive(:popen3).and_yield(
fake_stdin,
StringIO.new(output_content),
StringIO.new(error_content),
wait_thr
)
end

it 'writes code to stdin' do
adapter.open(code) {}
expect(fake_stdin.string).to eq(code)
end

it 'yields streams' do
adapter.open(code) do |stdout, stderr|
expect(stdout.read).to eq(output_content)
expect(stderr.read).to eq(error_content)
end
end

it 'calls ssh command' do
expect(adapter).to receive(:popen3).with(
"ssh -i #{key_file} #{username}@#{server} \"cd #{working_dir} && ruby\""
)
adapter.open(code) {}
end

context 'when process fails' do
let(:success?) { false }
let(:exit_code) { 127 }

it 'raises error' do
expect do
adapter.open(code) {}
end.to raise_error(RuntimeError, Regexp.new(value.to_s))
end
end
end
end
50 changes: 50 additions & 0 deletions spec/support/shared_examples/stdin_process_adapter.rb
@@ -0,0 +1,50 @@
shared_context 'STDIN adapter' do
describe '#open' do
let(:code) { '1 + 1' }
let(:output_content) { 'output' }
let(:error_content) { 'error' }
let(:fake_stdin) { StringIO.new }
let(:wait_thr) { double(:wait_thr, value: value) }
let(:value) { double(:value, success?: success?, to_s: exit_code.to_s) }
let(:success?) { true }
let(:exit_code) { 0 }

before(:example) do
allow(adapter).to receive(:popen3).and_yield(
fake_stdin,
StringIO.new(output_content),
StringIO.new(error_content),
wait_thr
)
end

it 'writes code to stdin' do
adapter.open(code) {}
expect(fake_stdin.string).to eq(code)
end

it 'yields streams' do
adapter.open(code) do |stdout, stderr|
expect(stdout.read).to eq(output_content)
expect(stderr.read).to eq(error_content)
end
end

it 'calls external command' do
allow(adapter).to receive(:command).and_return('echo')
expect(adapter).to receive(:popen3).with('echo')
adapter.open(code) {}
end

context 'when process fails' do
let(:success?) { false }
let(:exit_code) { 127 }

it 'raises error' do
expect do
adapter.open(code) {}
end.to raise_error(RuntimeError, Regexp.new(value.to_s))
end
end
end
end

0 comments on commit 4950278

Please sign in to comment.