From 768a6755def081a05f8b129cf820016b819761a3 Mon Sep 17 00:00:00 2001 From: Thibault Jouan Date: Thu, 26 Sep 2013 19:22:07 +0000 Subject: [PATCH] Implement Remote#config: Load SSH configuration for targeted host name. --- lib/producer/core/remote.rb | 4 ++++ spec/producer/core/remote_spec.rb | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/lib/producer/core/remote.rb b/lib/producer/core/remote.rb index 1f4d2bc..f7073b9 100644 --- a/lib/producer/core/remote.rb +++ b/lib/producer/core/remote.rb @@ -14,6 +14,10 @@ module Producer @session ||= Net::SSH.start(@hostname, user_name) end + def config + @config ||= Net::SSH::Config.for(@hostname) + end + def user_name Etc.getlogin end diff --git a/spec/producer/core/remote_spec.rb b/spec/producer/core/remote_spec.rb index 1000e65..b41bf25 100644 --- a/spec/producer/core/remote_spec.rb +++ b/spec/producer/core/remote_spec.rb @@ -29,6 +29,24 @@ module Producer::Core end end + describe '#config' do + it 'builds a config for current host name' do + expect(Net::SSH::Config).to receive(:for).with(hostname) + remote.config + end + + it 'returns the config' do + ssh_config = double('ssh config') + allow(Net::SSH::Config).to receive(:for) { ssh_config } + expect(remote.config).to be ssh_config + end + + it 'memoizes the config' do + allow(Net::SSH::Config).to receive(:for) { Object.new } + expect(remote.config).to be remote.config + end + end + describe '#user_name' do it 'returns the name of the user currently logged in' do expect(remote.user_name).to eq Etc.getlogin