sshkit-backends-netssh_global 0.1.1 → 0.2.0.pre.circleci20.20180622145523

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 972d30c885784d1f74638dd6277c2f8007faf3da
4
- data.tar.gz: 4fdc097a1e5ecaa5689edfd1e4e7a8bf8b1fbb74
2
+ SHA256:
3
+ metadata.gz: c8e7804135495c932638591aaa07bac15b3b14ca2dc304037e305b505cc7578d
4
+ data.tar.gz: 30d99dfa5c8490f6afb0711e29c6b4e79900b9c7b2d4bdc6bded24290b54147c
5
5
  SHA512:
6
- metadata.gz: 5c5a1bb0508b25b9a020630e0b60681e3099bbcc9413c31d30cbcf9f2f42e5b3cf3425a860ac58a3a77aa9f6c4d244232b1de206b73b27e04735e8ce2fb4f1f2
7
- data.tar.gz: 7b20f2aab92f484953ead04c4b7056433699580c09d28ff405e77a4a1b08cc95d30338a23a97891e222d76811794323911a0b406a3491613e89d2952a1fc9d39
6
+ metadata.gz: 2981248f2e792e4a41daac1c2b18b0be6075d998c3704b09f6ab7f15f6e31283eb152e690bdca1453b9bdf34ae7dcc10ee0d81ad63895212d699cda8d9f8caba
7
+ data.tar.gz: 0534a7474e214c748ac5642cafbb8f5719c37b912fb3ef731c6e29659eef8b957dc3dc4029944bc10fc830909fe6d22eddb9ff269f0492737d18d34e79b2de9b
@@ -0,0 +1,117 @@
1
+ version: 2
2
+
3
+ rubygems-login: &rubygems-login
4
+ run:
5
+ name: Login to RubyGems
6
+ command: |
7
+ mkdir ~/.gem
8
+ echo ":rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials
9
+ chmod 0600 ~/.gem/credentials
10
+
11
+ install-git: &install-git
12
+ run: apk add --no-cache --no-progress git
13
+
14
+ defaults: &defaults
15
+ steps:
16
+ - *install-git
17
+ - checkout
18
+ - run: bundle check --path=vendor/bundle || bundle install --path=vendor/bundle
19
+ - run: bundle exec rake test
20
+ working_directory: ~/sshkit-backends-netssh_global
21
+
22
+ default-deploys: &default-deploys
23
+ docker:
24
+ - image: ruby:alpine
25
+ working_directory: ~/sshkit-backends-netssh_global
26
+
27
+ jobs:
28
+ deploy-gem:
29
+ <<: *default-deploys
30
+ steps:
31
+ - *install-git
32
+ - checkout
33
+ - *rubygems-login
34
+ - run:
35
+ name: Build gem
36
+ command: gem build "$CIRCLE_PROJECT_REPONAME".gemspec
37
+ - run:
38
+ name: Publish gem to RubyGems
39
+ command: |
40
+ package=$(ls -t1 "$CIRCLE_PROJECT_REPONAME"*.gem | head -1)
41
+ gem push "$CIRCLE_PROJECT_REPONAME"-"$(echo $CIRCLE_TAG | sed -e 's/v//')".gem
42
+ deploy-pre-release-gem:
43
+ <<: *default-deploys
44
+ steps:
45
+ - *install-git
46
+ - checkout
47
+ - *rubygems-login
48
+ - run:
49
+ name: Install gem-versioner
50
+ command: gem install gem-versioner
51
+ - run:
52
+ name: Build gem
53
+ command: PRE_RELEASE="$CIRCLE_BRANCH" gem build "$CIRCLE_PROJECT_REPONAME".gemspec
54
+ - run:
55
+ name: Push pre-release gem to RubyGems
56
+ command: |
57
+ package=$(ls -t1 "$CIRCLE_PROJECT_REPONAME"*.gem | head -1)
58
+ gem push "$package"
59
+ test-ruby-2.2:
60
+ <<: *defaults
61
+ docker:
62
+ - image: ruby:2.2-alpine
63
+ test-ruby-2.3:
64
+ <<: *defaults
65
+ docker:
66
+ - image: ruby:2.3-alpine
67
+ test-ruby-2.4:
68
+ <<: *defaults
69
+ docker:
70
+ - image: ruby:2.4-alpine
71
+ test-ruby-2.5:
72
+ <<: *defaults
73
+ docker:
74
+ - image: ruby:2.5-alpine
75
+
76
+ workflows:
77
+ version: 2
78
+ test-then-release-gem:
79
+ jobs:
80
+ - test-ruby-2.2:
81
+ filters:
82
+ tags:
83
+ only: /^v\d+\.\d+\.\d\+/
84
+ - test-ruby-2.3:
85
+ filters:
86
+ tags:
87
+ only: /^v\d+\.\d+\.\d\+/
88
+ - test-ruby-2.4:
89
+ filters:
90
+ tags:
91
+ only: /^v\d+\.\d+\.\d\+/
92
+ - test-ruby-2.5:
93
+ filters:
94
+ tags:
95
+ only: /^v\d+\.\d+\.\d\+/
96
+ - deploy-gem:
97
+ context: org-global
98
+ filters:
99
+ branches:
100
+ ignore: /.*/
101
+ tags:
102
+ only: /^v\d+\.\d+\.\d\+/
103
+ requires:
104
+ - test-ruby-2.2
105
+ - test-ruby-2.3
106
+ - test-ruby-2.4
107
+ - test-ruby-2.5
108
+ - deploy-pre-release-gem:
109
+ context: org-global
110
+ filters:
111
+ branches:
112
+ ignore: master
113
+ requires:
114
+ - test-ruby-2.2
115
+ - test-ruby-2.3
116
+ - test-ruby-2.4
117
+ - test-ruby-2.5
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  /Gemfile.lock
2
2
  /.vagrant
3
+ /.idea
data/Brewfile CHANGED
@@ -1,5 +1,2 @@
1
- tap 'caskroom/cask'
2
- brew 'brew-cask'
3
-
4
1
  cask 'vagrant'
5
2
  cask 'virtualbox'
data/README.md CHANGED
@@ -37,6 +37,8 @@ rake
37
37
  ```ruby
38
38
  require 'sshkit/backends/netssh_global'
39
39
 
40
+ set :sshkit_backend, SSHKit::Backend::NetsshGlobal
41
+
40
42
  SSHKit::Backend::NetsshGlobal.configure do |config|
41
43
  config.owner = 'bob' # Which user to sudo as for every command
42
44
  config.directory = '/home/bob' # Can be specified if it is important to default commands to run in a
@@ -8,7 +8,7 @@ module SSHKit
8
8
  attr_writer :ssh_commands
9
9
 
10
10
  def ssh_commands
11
- @ssh_commands || [:ssh, :git, :'ssh-add', :bundle]
11
+ @ssh_commands ||= [:ssh, :git, :'ssh-add', :bundle]
12
12
  end
13
13
  end
14
14
 
@@ -50,16 +50,13 @@ module SSHKit
50
50
 
51
51
  def with_ssh
52
52
  configure_host
53
- conn = self.class.pool.checkout(
54
- String(host.hostname),
55
- host.username,
56
- host.netssh_options,
57
- &Net::SSH.method(:start)
58
- )
59
- begin
60
- yield conn.connection
61
- ensure
62
- self.class.pool.checkin conn
53
+ self.class.pool.with(
54
+ Net::SSH.method(:start),
55
+ String(host.hostname),
56
+ host.username,
57
+ host.netssh_options
58
+ ) do |connection|
59
+ yield connection
63
60
  end
64
61
  end
65
62
 
@@ -69,8 +66,7 @@ module SSHKit
69
66
  end
70
67
  end
71
68
 
72
- def command(*args)
73
- options = args.extract_options!
69
+ def command(args, options)
74
70
  options.merge!(
75
71
  in: pwd,
76
72
  env: @env,
@@ -80,7 +76,7 @@ module SSHKit
80
76
  ssh_commands: property(:ssh_commands),
81
77
  shell: property(:shell)
82
78
  )
83
- SSHKit::CommandSudoSshForward.new(*[*args, options])
79
+ SSHKit::CommandSudoSshForward.new(*args.concat([options]))
84
80
  end
85
81
  end
86
82
  end
@@ -1,7 +1,7 @@
1
1
  module SSHKit
2
2
  module Backends
3
3
  class NetsshGlobal
4
- VERSION = '0.1.1'
4
+ VERSION = '0.2.0'
5
5
  end
6
6
  end
7
7
  end
@@ -1,3 +1,5 @@
1
+ require 'sshkit'
2
+
1
3
  module SSHKit
2
4
  class CommandSudoSshForward < SSHKit::Command
3
5
  def to_command
@@ -20,16 +22,6 @@ module SSHKit
20
22
  end
21
23
  end
22
24
 
23
- def environment_string
24
- environment_hash.collect do |key,value|
25
- if key.is_a? Symbol
26
- "#{key.to_s.upcase}=#{value}"
27
- else
28
- "#{key.to_s}=#{value}"
29
- end
30
- end.join(' ')
31
- end
32
-
33
25
  def environment_hash
34
26
  default_env.merge(options_env)
35
27
  end
@@ -21,7 +21,7 @@ then need to sudo to a different identity for each command.}
21
21
 
22
22
  gem.add_runtime_dependency('sshkit', '~> 1.11')
23
23
 
24
- gem.add_development_dependency('minitest', ['>= 2.11.3', '< 2.12.0'])
24
+ gem.add_development_dependency('minitest', '>= 2.11.3', '< 5.11.0')
25
25
  gem.add_development_dependency('rake')
26
26
  gem.add_development_dependency('turn')
27
27
  gem.add_development_dependency('mocha')
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require_relative '../../helper'
2
2
  require 'securerandom'
3
3
 
4
4
  require 'sshkit/backends/netssh_global'
@@ -8,6 +8,10 @@ module SSHKit
8
8
  class TestNetsshGlobalFunctional < FunctionalTest
9
9
  def setup
10
10
  super
11
+ @output = String.new
12
+ SSHKit.config.output_verbosity = :debug
13
+ SSHKit.config.output = SSHKit::Formatter::SimpleText.new(@output)
14
+
11
15
  NetsshGlobal.configure do |config|
12
16
  config.owner = a_user
13
17
  config.directory = nil
@@ -32,18 +36,36 @@ module SSHKit
32
36
  VagrantWrapper.hosts['one']
33
37
  end
34
38
 
35
- def test_capture
36
- File.open('/dev/null', 'w') do |dnull|
37
- SSHKit.capture_output(dnull) do
38
- captured_command_result = nil
39
- NetsshGlobal.new(a_host) do
40
- captured_command_result = capture(:uname)
41
- end.run
42
-
43
- assert captured_command_result
44
- assert_match captured_command_result, /Linux|Darwin/
39
+ def test_simple_netssh
40
+ NetsshGlobal.new(a_host) do
41
+ execute 'date'
42
+ execute :ls, '-l'
43
+ with rails_env: :production do
44
+ within '/tmp' do
45
+ as :root do
46
+ execute :touch, 'restart.txt'
47
+ end
48
+ end
45
49
  end
46
- end
50
+ end.run
51
+
52
+ command_lines = @output.lines.select { |line| line.start_with?('Command:') }
53
+ assert_equal [
54
+ "Command: sudo -u owner -- sh -c '/usr/bin/env date'\n",
55
+ "Command: sudo -u owner -- sh -c '/usr/bin/env ls -l'\n",
56
+ "Command: if test ! -d /tmp; then echo \"Directory does not exist '/tmp'\" 1>&2; false; fi\n",
57
+ "Command: if ! sudo -u root whoami > /dev/null; then echo \"You cannot switch to user 'root' using sudo, please check the sudoers file\" 1>&2; false; fi\n",
58
+ "Command: cd /tmp && sudo -u root RAILS_ENV=\"production\" -- sh -c '/usr/bin/env touch restart.txt'\n"
59
+ ], command_lines
60
+ end
61
+
62
+ def test_capture
63
+ captured_command_result = nil
64
+ NetsshGlobal.new(a_host) do |_host|
65
+ captured_command_result = capture(:uname)
66
+ end.run
67
+
68
+ assert_includes %W(Linux Darwin), captured_command_result
47
69
  end
48
70
 
49
71
  def test_ssh_option_merge
@@ -54,7 +76,20 @@ module SSHKit
54
76
  capture(:uname)
55
77
  host_ssh_options = host.ssh_options
56
78
  end.run
57
- assert_equal({ forward_agent: false, paranoid: true }, host_ssh_options)
79
+ assert_equal [:forward_agent, :paranoid, :known_hosts, :logger, :password_prompt].sort, host_ssh_options.keys.sort
80
+ assert_equal false, host_ssh_options[:forward_agent]
81
+ assert_equal true, host_ssh_options[:paranoid]
82
+ assert_instance_of SSHKit::Backend::Netssh::KnownHosts, host_ssh_options[:known_hosts]
83
+ end
84
+
85
+ def test_env_vars_substituion_in_subshell
86
+ captured_command_result = nil
87
+ NetsshGlobal.new(a_host) do |_host|
88
+ with some_env_var: :some_value do
89
+ captured_command_result = capture(:echo, '$SOME_ENV_VAR')
90
+ end
91
+ end.run
92
+ assert_equal "some_value", captured_command_result
58
93
  end
59
94
 
60
95
  def test_configure_owner_via_global_config
@@ -152,14 +187,6 @@ module SSHKit
152
187
  assert(result, 'Expected test to execute as "owner", but it did not')
153
188
  end
154
189
 
155
- def test_test_executes_as_ssh_user_when_command_contains_spaces
156
- result = NetsshGlobal.new(a_host) do
157
- test 'test "$USER" = "vagrant"'
158
- end.run
159
-
160
- assert(result, 'Expected test to execute as "vagrant", but it did not')
161
- end
162
-
163
190
  def test_upload_file
164
191
  file_contents = ""
165
192
  file_owner = nil
@@ -225,6 +252,42 @@ module SSHKit
225
252
  assert_equal a_user, file_owner
226
253
  end
227
254
 
255
+ def test_upload_and_then_capture_file_contents
256
+ actual_file_contents = ""
257
+ actual_file_owner = nil
258
+ file_name = File.join("/tmp", SecureRandom.uuid)
259
+ File.open file_name, 'w+' do |f|
260
+ f.write "Some Content\nWith a newline and trailing spaces \n "
261
+ end
262
+ NetsshGlobal.new(a_host) do
263
+ upload!(file_name, file_name)
264
+ actual_file_contents = capture(:cat, file_name, strip: false)
265
+ actual_file_owner = capture(:stat, '-c', '%U', file_name)
266
+ end.run
267
+ assert_equal "Some Content\nWith a newline and trailing spaces \n ", actual_file_contents
268
+ assert_equal a_user, actual_file_owner
269
+ end
270
+
271
+ def test_upload_within
272
+ file_name = SecureRandom.uuid
273
+ file_contents = "Some Content"
274
+ dir_name = SecureRandom.uuid
275
+ actual_file_contents = ""
276
+ actual_file_owner = nil
277
+ NetsshGlobal.new(a_host) do |_host|
278
+ within("/tmp") do
279
+ execute :mkdir, "-p", dir_name
280
+ within(dir_name) do
281
+ upload!(StringIO.new(file_contents), file_name)
282
+ end
283
+ end
284
+ actual_file_contents = capture(:cat, "/tmp/#{dir_name}/#{file_name}", strip: false)
285
+ actual_file_owner = capture(:stat, '-c', '%U', "/tmp/#{dir_name}/#{file_name}")
286
+ end.run
287
+ assert_equal file_contents, actual_file_contents
288
+ assert_equal a_user, actual_file_owner
289
+ end
290
+
228
291
  def test_upload_string_io
229
292
  file_contents = ""
230
293
  file_owner = nil
@@ -255,6 +318,31 @@ module SSHKit
255
318
  assert_equal File.open(file_name).read, file_contents
256
319
  end
257
320
 
321
+ def test_upload_via_pathname
322
+ file_contents = ""
323
+ file_owner = nil
324
+ NetsshGlobal.new(a_host) do |_host|
325
+ file_name = Pathname.new(File.join("/tmp", SecureRandom.uuid))
326
+ upload!(StringIO.new('example_io'), file_name)
327
+ file_owner = capture(:stat, '-c', '%U', file_name)
328
+ file_contents = download!(file_name)
329
+ end.run
330
+ assert_equal "example_io", file_contents
331
+ assert_equal a_user, file_owner
332
+ end
333
+
334
+ def test_interaction_handler
335
+ captured_command_result = nil
336
+ NetsshGlobal.new(a_host) do
337
+ command = 'echo Enter Data; read the_data; echo Captured $the_data;'
338
+ captured_command_result = capture(command, interaction_handler: {
339
+ "Enter Data\n" => "SOME DATA\n",
340
+ "Captured SOME DATA\n" => nil
341
+ })
342
+ end.run
343
+ assert_equal("Enter Data\nCaptured SOME DATA", captured_command_result)
344
+ end
345
+
258
346
  def test_ssh_forwarded_when_command_is_ssh_command
259
347
  remote_ssh_output = ''
260
348
  local_ssh_output = `ssh-add -l 2>&1`.strip
data/test/helper.rb CHANGED
@@ -19,7 +19,7 @@ end
19
19
  class FunctionalTest < MiniTest::Unit::TestCase
20
20
  def setup
21
21
  unless VagrantWrapper.running?
22
- warn "Vagrant VMs are not running. Please, start it manually with `vagrant up`"
22
+ skip "Vagrant VMs are not running. Please, start it manually with `vagrant up`"
23
23
  end
24
24
  end
25
25
  end
@@ -31,10 +31,11 @@ class VagrantWrapper
31
31
  end
32
32
 
33
33
  def running?
34
- @running ||= begin
35
- status = `#{vagrant_binary} status`
36
- status.include?('running')
37
- end
34
+ return @running unless @running.nil?
35
+
36
+ status = `#{vagrant_binary} status || true`
37
+
38
+ @running = status.include?('running')
38
39
  end
39
40
 
40
41
  def boxes_list
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require_relative '../../helper'
2
2
  require 'sshkit/backends/netssh_global'
3
3
 
4
4
  module SSHKit
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require_relative '../helper'
2
2
  require 'sshkit/command_sudo_ssh_forward'
3
3
 
4
4
  module SSHKit
@@ -19,7 +19,7 @@ module SSHKit
19
19
  end
20
20
  end
21
21
 
22
- def test_using_a_heredoc
22
+ def test_multiple_lines_are_stripped_of_extra_space_and_joined_by_semicolons
23
23
  c = CommandSudoSshForward.new <<-EOHEREDOC
24
24
  if test ! -d /var/log; then
25
25
  echo "Example"
@@ -28,51 +28,68 @@ module SSHKit
28
28
  assert_equal "if test ! -d /var/log; then; echo \"Example\"; fi", c.to_command
29
29
  end
30
30
 
31
+ def test_leading_and_trailing_space_is_stripped
32
+ c = CommandSudoSshForward.new(" echo hi ")
33
+ assert_equal "echo hi", c.to_command
34
+ end
35
+
31
36
  def test_including_the_env
32
37
  SSHKit.config = nil
33
38
  c = CommandSudoSshForward.new(:rails, 'server', env: {rails_env: :production})
34
- assert_equal "( RAILS_ENV=production /usr/bin/env rails server )", c.to_command
39
+ assert_equal '( RAILS_ENV="production" /usr/bin/env rails server )', c.to_command
35
40
  end
36
41
 
37
42
  def test_including_the_env_with_multiple_keys
38
43
  SSHKit.config = nil
39
44
  c = CommandSudoSshForward.new(:rails, 'server', env: {rails_env: :production, foo: 'bar'})
40
- assert_equal "( RAILS_ENV=production FOO=bar /usr/bin/env rails server )", c.to_command
45
+ assert_equal '( RAILS_ENV="production" FOO="bar" /usr/bin/env rails server )', c.to_command
41
46
  end
42
47
 
43
48
  def test_including_the_env_with_string_keys
44
49
  SSHKit.config = nil
45
50
  c = CommandSudoSshForward.new(:rails, 'server', env: {'FACTER_env' => :production, foo: 'bar'})
46
- assert_equal "( FACTER_env=production FOO=bar /usr/bin/env rails server )", c.to_command
51
+ assert_equal '( FACTER_env="production" FOO="bar" /usr/bin/env rails server )', c.to_command
52
+ end
53
+
54
+ def test_double_quotes_are_escaped_in_env
55
+ SSHKit.config = nil
56
+ c = CommandSudoSshForward.new(:rails, 'server', env: {foo: 'asdf"hjkl'})
57
+ assert_equal %{( FOO="asdf\\\"hjkl" /usr/bin/env rails server )}, c.to_command
58
+ end
59
+
60
+ def test_percentage_symbol_handled_in_env
61
+ SSHKit.config = nil
62
+ c = Command.new(:rails, 'server', env: {foo: 'asdf%hjkl'}, user: "anotheruser")
63
+ assert_equal %{( export FOO="asdf%hjkl" ; sudo -u anotheruser FOO=\"asdf%hjkl\" -- sh -c '/usr/bin/env rails server' )}, c.to_command
47
64
  end
48
65
 
49
66
  def test_including_the_env_doesnt_addressively_escape
50
67
  SSHKit.config = nil
51
68
  c = CommandSudoSshForward.new(:rails, 'server', env: {path: '/example:$PATH'})
52
- assert_equal "( PATH=/example:$PATH /usr/bin/env rails server )", c.to_command
69
+ assert_equal '( PATH="/example:$PATH" /usr/bin/env rails server )', c.to_command
53
70
  end
54
71
 
55
72
  def test_global_env
56
73
  SSHKit.config = nil
57
74
  SSHKit.config.default_env = { default: 'env' }
58
75
  c = CommandSudoSshForward.new(:rails, 'server', env: {})
59
- assert_equal "( DEFAULT=env /usr/bin/env rails server )", c.to_command
76
+ assert_equal '( DEFAULT="env" /usr/bin/env rails server )', c.to_command
60
77
  end
61
78
 
62
79
  def test_default_env_is_overwritten_with_locally_defined
63
80
  SSHKit.config.default_env = { foo: 'bar', over: 'under' }
64
81
  c = CommandSudoSshForward.new(:rails, 'server', env: { over: 'write'})
65
- assert_equal "( FOO=bar OVER=write /usr/bin/env rails server )", c.to_command
82
+ assert_equal '( FOO="bar" OVER="write" /usr/bin/env rails server )', c.to_command
66
83
  end
67
84
 
68
85
  def test_working_in_a_given_directory
69
86
  c = CommandSudoSshForward.new(:ls, '-l', in: "/opt/sites")
70
- assert_equal "cd /opt/sites && /usr/bin/env ls -l", c.to_command
87
+ assert_equal 'cd /opt/sites && /usr/bin/env ls -l', c.to_command
71
88
  end
72
89
 
73
90
  def test_working_in_a_given_directory_with_env
74
91
  c = CommandSudoSshForward.new(:ls, '-l', in: "/opt/sites", env: {a: :b})
75
- assert_equal "cd /opt/sites && ( A=b /usr/bin/env ls -l )", c.to_command
92
+ assert_equal 'cd /opt/sites && ( A="b" /usr/bin/env ls -l )', c.to_command
76
93
  end
77
94
 
78
95
  def test_having_a_host_passed
@@ -93,12 +110,12 @@ module SSHKit
93
110
 
94
111
  def test_working_as_a_given_group
95
112
  c = CommandSudoSshForward.new(:whoami, group: :devvers)
96
- assert_equal "sg devvers -c \\\"/usr/bin/env whoami\\\"", c.to_command
113
+ assert_equal %q[sg devvers -c "/usr/bin/env whoami"], c.to_command
97
114
  end
98
115
 
99
116
  def test_working_as_a_given_user_and_group
100
117
  c = CommandSudoSshForward.new(:whoami, user: :anotheruser, group: :devvers)
101
- assert_equal "sudo -u anotheruser -- sh -c 'sg devvers -c \\\"/usr/bin/env whoami\\\"'", c.to_command
118
+ assert_equal %q[sudo -u anotheruser -- sh -c 'sg devvers -c "/usr/bin/env whoami"'], c.to_command
102
119
  end
103
120
 
104
121
  def test_umask
@@ -122,7 +139,7 @@ module SSHKit
122
139
  def test_umask_with_env_and_working_directory_and_user
123
140
  SSHKit.config.umask = '007'
124
141
  c = CommandSudoSshForward.new(:touch, 'somefile', user: 'bob', env: {a: 'b'}, in: '/var')
125
- assert_equal "cd /var && umask 007 && sudo -u bob A=b -- sh -c '/usr/bin/env touch somefile'", c.to_command
142
+ assert_equal 'cd /var && umask 007 && sudo -u bob A="b" -- sh -c \'/usr/bin/env touch somefile\'', c.to_command
126
143
  end
127
144
 
128
145
  def test_verbosity_defaults_to_logger_info
@@ -167,16 +184,49 @@ module SSHKit
167
184
  assert c.failed?
168
185
  end
169
186
 
170
- def test_appending_stdout
187
+ def test_on_stdout
188
+ c = CommandSudoSshForward.new(:whoami)
189
+ c.on_stdout(nil, "test\n")
190
+ c.on_stdout(nil, 'test2')
191
+ c.on_stdout(nil, 'test3')
192
+ assert_equal "test\ntest2test3", c.full_stdout
193
+ end
194
+
195
+ def test_on_stderr
171
196
  c = CommandSudoSshForward.new(:whoami)
172
- assert c.stdout += "test\n"
173
- assert_equal "test\n", c.stdout
197
+ c.on_stderr(nil, 'test')
198
+ assert_equal 'test', c.full_stderr
174
199
  end
175
200
 
176
- def test_appending_stderr
201
+ def test_deprecated_stdtream_accessors
202
+ deprecation_out = ''
203
+ SSHKit.config.deprecation_output = deprecation_out
204
+
177
205
  c = CommandSudoSshForward.new(:whoami)
178
- assert c.stderr += "test\n"
179
- assert_equal "test\n", c.stderr
206
+ c.stdout='a test'
207
+ assert_equal('a test', c.stdout)
208
+ c.stderr='another test'
209
+ assert_equal('another test', c.stderr)
210
+ deprecation_lines = deprecation_out.lines.to_a
211
+
212
+ assert_equal 8, deprecation_lines.size
213
+ assert_equal(
214
+ '[Deprecated] The stdout= method on Command is deprecated. ' +
215
+ "The @stdout attribute will be removed in a future release.\n",
216
+ deprecation_lines[0])
217
+ assert_equal(
218
+ '[Deprecated] The stdout method on Command is deprecated. ' +
219
+ "The @stdout attribute will be removed in a future release. Use full_stdout() instead.\n",
220
+ deprecation_lines[2])
221
+
222
+ assert_equal(
223
+ '[Deprecated] The stderr= method on Command is deprecated. ' +
224
+ "The @stderr attribute will be removed in a future release.\n",
225
+ deprecation_lines[4])
226
+ assert_equal(
227
+ '[Deprecated] The stderr method on Command is deprecated. ' +
228
+ "The @stderr attribute will be removed in a future release. Use full_stderr() instead.\n",
229
+ deprecation_lines[6])
180
230
  end
181
231
 
182
232
  def test_setting_exit_status
@@ -224,7 +274,7 @@ module SSHKit
224
274
  assert_equal(
225
275
  'setfacl -m fred:x $(dirname $SSH_AUTH_SOCK) && '\
226
276
  'setfacl -m fred:rw $SSH_AUTH_SOCK && '\
227
- "sudo -u fred SSH_AUTH_SOCK=$SSH_AUTH_SOCK -- sh -c '/usr/bin/env whoami'", c.to_command
277
+ 'sudo -u fred SSH_AUTH_SOCK="$SSH_AUTH_SOCK" -- sh -c \'/usr/bin/env whoami\'', c.to_command
228
278
  )
229
279
  end
230
280
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sshkit-backends-netssh_global
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0.pre.circleci20.20180622145523
5
5
  platform: ruby
6
6
  authors:
7
7
  - Theo Cushion
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-09-20 00:00:00.000000000 Z
12
+ date: 2018-06-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sshkit
@@ -34,7 +34,7 @@ dependencies:
34
34
  version: 2.11.3
35
35
  - - "<"
36
36
  - !ruby/object:Gem::Version
37
- version: 2.12.0
37
+ version: 5.11.0
38
38
  type: :development
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -44,7 +44,7 @@ dependencies:
44
44
  version: 2.11.3
45
45
  - - "<"
46
46
  - !ruby/object:Gem::Version
47
- version: 2.12.0
47
+ version: 5.11.0
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rake
50
50
  requirement: !ruby/object:Gem::Requirement
@@ -97,6 +97,7 @@ executables: []
97
97
  extensions: []
98
98
  extra_rdoc_files: []
99
99
  files:
100
+ - ".circleci/config.yml"
100
101
  - ".gitignore"
101
102
  - Brewfile
102
103
  - Gemfile
@@ -129,12 +130,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
129
130
  version: '0'
130
131
  required_rubygems_version: !ruby/object:Gem::Requirement
131
132
  requirements:
132
- - - ">="
133
+ - - ">"
133
134
  - !ruby/object:Gem::Version
134
- version: '0'
135
+ version: 1.3.1
135
136
  requirements: []
136
137
  rubyforge_project:
137
- rubygems_version: 2.6.13
138
+ rubygems_version: 2.7.7
138
139
  signing_key:
139
140
  specification_version: 4
140
141
  summary: SSHKit backend for globally sudoing commands
@@ -145,4 +146,3 @@ test_files:
145
146
  - test/support/vagrant_wrapper.rb
146
147
  - test/unit/backends/test_netssh_global.rb
147
148
  - test/unit/test_command_sudo_ssh_forward.rb
148
- has_rdoc: