Add basic Remote#execute implementation
This commit is contained in:
parent
6e1ba269eb
commit
ace5bfb3fa
@ -13,6 +13,15 @@ module Producer
|
|||||||
def session
|
def session
|
||||||
@session ||= Net::SSH.start(@hostname, Etc.getlogin)
|
@session ||= Net::SSH.start(@hostname, Etc.getlogin)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def execute(command)
|
||||||
|
output = ''
|
||||||
|
session.exec command do |ch, stream, data|
|
||||||
|
output << data
|
||||||
|
end
|
||||||
|
session.loop
|
||||||
|
output
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -2,6 +2,9 @@ require 'spec_helper'
|
|||||||
|
|
||||||
module Producer::Core
|
module Producer::Core
|
||||||
describe Remote do
|
describe Remote do
|
||||||
|
require 'net/ssh/test'
|
||||||
|
include Net::SSH::Test
|
||||||
|
|
||||||
let(:hostname) { 'some_host.example' }
|
let(:hostname) { 'some_host.example' }
|
||||||
subject(:remote) { Remote.new(hostname) }
|
subject(:remote) { Remote.new(hostname) }
|
||||||
|
|
||||||
@ -28,5 +31,45 @@ module Producer::Core
|
|||||||
expect(remote.session).to be remote.session
|
expect(remote.session).to be remote.session
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#execute' do
|
||||||
|
let(:args) { 'some remote command'}
|
||||||
|
let(:command) { "echo #{args}" }
|
||||||
|
|
||||||
|
# FIXME: refactor this with helpers, expectations and/or matchers.
|
||||||
|
def with_new_channel_story
|
||||||
|
story do |session|
|
||||||
|
ch = session.opens_channel
|
||||||
|
yield ch
|
||||||
|
ch.gets_close
|
||||||
|
ch.sends_close
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def story_completed?
|
||||||
|
socket.script.events.empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(remote).to receive(:session) { connection }
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'executes the given command in a new channel' do
|
||||||
|
with_new_channel_story do |ch|
|
||||||
|
ch.sends_exec command
|
||||||
|
ch.gets_data args
|
||||||
|
end
|
||||||
|
remote.execute command
|
||||||
|
expect(story_completed?).to be
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns the output' do
|
||||||
|
with_new_channel_story do |ch|
|
||||||
|
ch.sends_exec command
|
||||||
|
ch.gets_data args
|
||||||
|
end
|
||||||
|
expect(remote.execute(command)).to eq args
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user