test-kitchen 1.9.1 → 1.9.2

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
2
  SHA1:
3
- metadata.gz: 25811e79e5d135e683b432c2b949b6e33ee76468
4
- data.tar.gz: 13989d7ee63d36e9d6fccd56b38b2e86b857f601
3
+ metadata.gz: 81027eb8109e1f18afe8ab86a7868a6904a85143
4
+ data.tar.gz: 0d3f2807d8ed919ab730c5ca015751b465cdf97c
5
5
  SHA512:
6
- metadata.gz: 5aec60ff68922a79b5c09b7fdaf39dd54b4a91e6c487eeff72477b924113ff5292c48a9bf48885e60ea3e9e88ce244f0b48ecf5ea91d47fe01b734126abc6705
7
- data.tar.gz: 969e6244b72135b1fbae2ba62c89818237c5dc8eb5b3c9e2a0a0d1906bedc3142b2ed775ab1c202a63e87561315b36e4942c84d355790680eba328e754e82b2c
6
+ metadata.gz: d3814e745b4d08b7cb20b28fa1dad5d1503ee7a49c17cea73c6f96300bb559c37eceba74b415fd7855a13b4514b198587f45bfab9ae9bc5a4e362b4202db91f2
7
+ data.tar.gz: d904f5626be65776e138aaa4ed7d38365a6d30339e608dd003f2582a9ae2e35c0178103e3bb43b33ed2b971d4ac7ad70d57f54d00ac7141044e21efa9f102c00
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Change Log
2
2
 
3
+ ## [v1.9.2](https://github.com/test-kitchen/test-kitchen/tree/v1.9.2) (2016-06-09)
4
+ [Full Changelog](https://github.com/test-kitchen/test-kitchen/compare/v1.9.1...v1.9.2)
5
+
6
+ **Implemented enhancements:**
7
+
8
+ - add max scp session handling [\#1047](https://github.com/test-kitchen/test-kitchen/pull/1047) ([lamont-granquist](https://github.com/lamont-granquist))
9
+
10
+ **Fixed bugs:**
11
+
12
+ - Message: SCP upload failed \(open failed \(1\)\) [\#1035](https://github.com/test-kitchen/test-kitchen/issues/1035)
13
+
3
14
  ## [v1.9.1](https://github.com/test-kitchen/test-kitchen/tree/v1.9.1) (2016-06-02)
4
15
  [Full Changelog](https://github.com/test-kitchen/test-kitchen/compare/v1.9.0...v1.9.1)
5
16
 
@@ -53,6 +53,8 @@ module Kitchen
53
53
 
54
54
  default_config :sudo, true
55
55
  default_config :port, 22
56
+ # needs to be one less than the configured sshd_config MaxSessions
57
+ default_config :max_ssh_sessions, 9
56
58
 
57
59
  # Creates a new Driver object using the provided configuration data
58
60
  # which will be merged with any default configuration.
@@ -294,8 +296,7 @@ module Kitchen
294
296
  info("Transferring files to #{instance.to_str}")
295
297
  debug("TIMING: scp asynch upload (Kitchen::Driver::SSHBase)")
296
298
  elapsed = Benchmark.measure do
297
- waits = locals.map { |local| connection.upload_path(local, remote) }
298
- waits.each(&:wait)
299
+ transfer_path_async(locals, remote, connection)
299
300
  end
300
301
  delta = Util.duration(elapsed.real)
301
302
  debug("TIMING: scp async upload (Kitchen::Driver::SSHBase) took #{delta}")
@@ -304,6 +305,15 @@ module Kitchen
304
305
  raise ActionFailed, ex.message
305
306
  end
306
307
 
308
+ def transfer_path_async(locals, remote, connection)
309
+ waits = []
310
+ locals.map do |local|
311
+ waits.push connection.upload_path(local, remote)
312
+ waits.shift.wait while waits.length >= config[:max_ssh_sessions]
313
+ end
314
+ waits.each(&:wait)
315
+ end
316
+
307
317
  # Blocks until a TCP socket is available where a remote SSH server
308
318
  # should be listening.
309
319
  #
@@ -46,6 +46,8 @@ module Kitchen
46
46
  default_config :username, "root"
47
47
  default_config :keepalive, true
48
48
  default_config :keepalive_interval, 60
49
+ # needs to be one less than the configured sshd_config MaxSessions
50
+ default_config :max_ssh_sessions, 9
49
51
  default_config :connection_timeout, 15
50
52
  default_config :connection_retries, 5
51
53
  default_config :connection_retry_sleep, 1
@@ -149,12 +151,14 @@ module Kitchen
149
151
  def upload(locals, remote)
150
152
  logger.debug("TIMING: scp async upload (Kitchen::Transport::Ssh)")
151
153
  elapsed = Benchmark.measure do
152
- waits = Array(locals).map do |local|
154
+ waits = []
155
+ Array(locals).map do |local|
153
156
  opts = File.directory?(local) ? { :recursive => true } : {}
154
157
 
155
- session.scp.upload(local, remote, opts) do |_ch, name, sent, total|
158
+ waits.push session.scp.upload(local, remote, opts) do |_ch, name, sent, total|
156
159
  logger.debug("Async Uploaded #{name} (#{total} bytes)") if sent == total
157
160
  end
161
+ waits.shift.wait while waits.length >= max_ssh_sessions
158
162
  end
159
163
  waits.each(&:wait)
160
164
  end
@@ -187,6 +191,10 @@ module Kitchen
187
191
  Timeout::Error
188
192
  ].freeze
189
193
 
194
+ # @return [Integer] cap on number of parallel ssh sessions we can use
195
+ # @api private
196
+ attr_reader :max_ssh_sessions
197
+
190
198
  # @return [Integer] how many times to retry when failing to execute
191
199
  # a command or transfer files
192
200
  # @api private
@@ -286,6 +294,7 @@ module Kitchen
286
294
  @port = @options[:port] # don't delete from options
287
295
  @connection_retries = @options.delete(:connection_retries)
288
296
  @connection_retry_sleep = @options.delete(:connection_retry_sleep)
297
+ @max_ssh_sessions = @options.delete(:max_ssh_sessions)
289
298
  @max_wait_until_ready = @options.delete(:max_wait_until_ready)
290
299
  end
291
300
 
@@ -335,6 +344,7 @@ module Kitchen
335
344
  :timeout => data[:connection_timeout],
336
345
  :connection_retries => data[:connection_retries],
337
346
  :connection_retry_sleep => data[:connection_retry_sleep],
347
+ :max_ssh_sessions => data[:max_ssh_sessions],
338
348
  :max_wait_until_ready => data[:max_wait_until_ready]
339
349
  }
340
350
 
@@ -17,5 +17,5 @@
17
17
  # limitations under the License.
18
18
 
19
19
  module Kitchen
20
- VERSION = "1.9.1"
20
+ VERSION = "1.9.2"
21
21
  end
@@ -207,6 +207,10 @@ describe Kitchen::Transport::Ssh do
207
207
 
208
208
  transport[:ssh_key].must_equal os_safe_root_path("/rooty/my_key")
209
209
  end
210
+
211
+ it "sets :max_ssh_sessions to 9 by default" do
212
+ transport[:max_ssh_sessions].must_equal 9
213
+ end
210
214
  end
211
215
 
212
216
  describe "#connection" do
@@ -648,7 +652,13 @@ describe Kitchen::Transport::Ssh::Connection do
648
652
  let(:conn) { net_ssh_connection }
649
653
 
650
654
  let(:options) do
651
- { :logger => logger, :username => "me", :hostname => "foo", :port => 22 }
655
+ {
656
+ :logger => logger,
657
+ :username => "me",
658
+ :hostname => "foo",
659
+ :port => 22,
660
+ :max_ssh_sessions => 9
661
+ }
652
662
  end
653
663
 
654
664
  let(:connection) do
@@ -1039,21 +1049,6 @@ describe Kitchen::Transport::Ssh::Connection do
1039
1049
  connection.upload(src.path, "/tmp/remote")
1040
1050
  end
1041
1051
  end
1042
-
1043
- it "logs upload progress to debug" do
1044
- assert_scripted do
1045
- connection.upload(src.path, "/tmp/remote")
1046
- end
1047
-
1048
- logged_output.string.must_match debug_line(
1049
- "[SSH] opening connection to me@foo<{:port=>22}>"
1050
- )
1051
- logged_output.string.lines.count { |l|
1052
- l =~ debug_line(
1053
- "Async Uploaded #{src.path} (1234 bytes)"
1054
- )
1055
- }.must_equal 1
1056
- end
1057
1052
  end
1058
1053
 
1059
1054
  describe "for a path" do
@@ -1112,31 +1107,6 @@ describe Kitchen::Transport::Ssh::Connection do
1112
1107
  assert_scripted { connection.upload(@dir, "/tmp/remote") }
1113
1108
  end
1114
1109
  end
1115
-
1116
- it "logs upload progress to debug" do
1117
- with_sorted_dir_entries do
1118
- assert_scripted { connection.upload(@dir, "/tmp/remote") }
1119
- end
1120
-
1121
- logged_output.string.must_match debug_line(
1122
- "[SSH] opening connection to me@foo<{:port=>22}>"
1123
- )
1124
- logged_output.string.lines.count { |l|
1125
- l =~ debug_line(
1126
- "Async Uploaded #{@dir}/alpha (15 bytes)"
1127
- )
1128
- }.must_equal 1
1129
- logged_output.string.lines.count { |l|
1130
- l =~ debug_line(
1131
- "Async Uploaded #{@dir}/subdir/beta (14 bytes)"
1132
- )
1133
- }.must_equal 1
1134
- logged_output.string.lines.count { |l|
1135
- l =~ debug_line(
1136
- "Async Uploaded #{@dir}/zulu (14 bytes)"
1137
- )
1138
- }.must_equal 1
1139
- end
1140
1110
  end
1141
1111
 
1142
1112
  describe "for a failed upload" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test-kitchen
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.1
4
+ version: 1.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fletcher Nichol
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-02 00:00:00.000000000 Z
11
+ date: 2016-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-shellout