Implement basic `sh' task action feature:

* Executes a command on the remote host;
* Forwards remote standard output.
This commit is contained in:
Thibault Jouan
2013-08-05 01:58:26 +00:00
parent 8123cf5052
commit f10914c7d7
6 changed files with 73 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
require 'spec_helper'
module Producer::Core
describe Actions::ShellCommand do
let(:env) { Env.new }
let(:command_args) { 'hello from remote host'}
let(:command) { "echo #{command_args}" }
subject(:sh) { Actions::ShellCommand.new(env, command) }
describe '#apply' do
before do
env.output = StringIO.new
end
it 'delegates the call to env.remote.execute method' do
expect(env.remote).to receive(:execute).with(command)
sh.apply
end
it 'forwards the returned output to env.output' do
allow(env.remote).to receive(:execute) { command_args }
expect(env).to receive(:output).with(command_args)
sh.apply
end
end
end
end

View File

@@ -6,6 +6,12 @@ module Producer::Core
let(:env) { double('env') }
subject(:dsl) { Task::DSL.new &block }
%w[sh].each do |action|
it "has `#{action}' action defined" do
expect(dsl).to respond_to action.to_sym
end
end
describe '.define_action' do
it 'defines a new action keyword' do
Task::DSL.define_action(:some_action, Object)