ztk 3.0.4 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -27,7 +27,7 @@ describe ZTK::RescueRetry do
27
27
  describe "class" do
28
28
 
29
29
  it "should be ZTK::RescueRetry" do
30
- subject.should be ZTK::RescueRetry
30
+ expect(subject).to be ZTK::RescueRetry
31
31
  end
32
32
 
33
33
  end
@@ -35,42 +35,42 @@ describe ZTK::RescueRetry do
35
35
  describe "behaviour" do
36
36
 
37
37
  it "should throw an exception if executed without a block" do
38
- lambda {
38
+ expect do
39
39
  ZTK::RescueRetry.try(:tries => 5)
40
- }.should raise_error ZTK::RescueRetryError, "You must supply a block!"
40
+ end.to raise_error ZTK::RescueRetryError
41
41
  end
42
42
 
43
43
  it "should retry on all exceptions by default if one is not supplied" do
44
44
  $counter = 0
45
- lambda {
45
+ expect do
46
46
  ZTK::RescueRetry.try(:tries => 3) do
47
47
  $counter += 1
48
48
  raise "TestException"
49
49
  end
50
- }.should raise_error "TestException"
51
- $counter.should == 3
50
+ end.to raise_error "TestException"
51
+ expect($counter).to be == 3
52
52
  end
53
53
 
54
54
  it "should retry on supplied exception" do
55
55
  $counter = 0
56
- lambda {
56
+ expect do
57
57
  ZTK::RescueRetry.try(:tries => 3, :on => EOFError) do
58
58
  $counter += 1
59
59
  raise EOFError
60
60
  end
61
- }.should raise_error EOFError
62
- $counter.should == 3
61
+ end.to raise_error EOFError
62
+ expect($counter).to be == 3
63
63
  end
64
64
 
65
65
  it "should not retry on exception if it does not match the supplied exception" do
66
66
  $counter = 0
67
- lambda {
67
+ expect do
68
68
  ZTK::RescueRetry.try(:tries => 3, :on => EOFError) do
69
69
  $counter += 1
70
70
  raise "TestException"
71
71
  end
72
- }.should raise_error "TestException"
73
- $counter.should == 1
72
+ end.to raise_error "TestException"
73
+ expect($counter).to be == 1
74
74
  end
75
75
 
76
76
  it "should call our lambda when it catches an exception and retries" do
@@ -78,25 +78,25 @@ describe ZTK::RescueRetry do
78
78
  on_retry_m = lambda { |exception|
79
79
  $counter += 1
80
80
  }
81
- lambda {
81
+ expect do
82
82
  ZTK::RescueRetry.try(:tries => 3, :on => EOFError, :on_retry => on_retry_m) do
83
83
  raise EOFError
84
84
  end
85
- }.should raise_error EOFError
86
- $counter.should == 2
85
+ end.to raise_error EOFError
86
+ expect($counter).to be == 2
87
87
  end
88
88
 
89
89
  it "should not retry exceptions that are ignored" do
90
90
  $counter = 0
91
91
 
92
- lambda {
92
+ expect do
93
93
  ZTK::RescueRetry.try(:tries => 3, :raise => EOFError) do
94
94
  $counter += 1
95
95
  raise EOFError
96
96
  end
97
- }.should raise_error EOFError
97
+ end.to raise_error EOFError
98
98
 
99
- $counter.should == 1
99
+ expect($counter).to be == 1
100
100
  end
101
101
 
102
102
  end
@@ -27,7 +27,7 @@ describe ZTK::Spinner do
27
27
  describe "class" do
28
28
 
29
29
  it "should be ZTK::Spinner" do
30
- subject.should be ZTK::Spinner
30
+ expect(subject).to be ZTK::Spinner
31
31
  end
32
32
 
33
33
  end
@@ -35,9 +35,9 @@ describe ZTK::Spinner do
35
35
  describe "behaviour" do
36
36
 
37
37
  it "should throw an exception if executed without a block" do
38
- lambda {
38
+ expect do
39
39
  ZTK::Spinner.spin
40
- }.should raise_error ZTK::SpinnerError, "You must supply a block!"
40
+ end.to raise_error ZTK::SpinnerError
41
41
  end
42
42
 
43
43
  end
data/spec/ztk/ssh_spec.rb CHANGED
@@ -22,15 +22,9 @@ require "spec_helper"
22
22
 
23
23
  describe ZTK::SSH do
24
24
 
25
- before(:each) do
26
- @ui = ZTK::UI.new(
27
- :stdout => StringIO.new,
28
- :stderr => StringIO.new,
29
- :stdin => StringIO.new
30
- )
31
- end
25
+ let(:ui) { ZTK::UI.new(:stdout => StringIO.new, :stderr => StringIO.new, :stdin => StringIO.new) }
32
26
 
33
- subject { ZTK::SSH.new(:ui => @ui) }
27
+ subject { ZTK::SSH.new }
34
28
 
35
29
  describe "class" do
36
30
 
@@ -40,485 +34,105 @@ describe ZTK::SSH do
40
34
 
41
35
  end
42
36
 
43
- # this stuff doesn't work as is under travis-ci right now
44
- describe "direct SSH behaviour" do
45
-
46
- describe "execute" do
47
-
48
- it "should be able to connect to 127.0.0.1 as the current user and execute a command (your key must be in ssh-agent)" do
49
- subject.config do |config|
50
- config.ui = @ui
51
-
52
- config.user = ENV["USER"]
53
- config.host_name = "127.0.0.1"
54
- end
55
-
56
- data = %x(hostname).chomp
57
-
58
- status = subject.exec("hostname")
59
- status.exit_code.should == 0
60
- @ui.stdout.rewind
61
- @ui.stdout.read.chomp.should == data
62
-
63
- expect(subject.close).to be true
64
- end
65
-
66
- it "should timeout after the period specified" do
67
- subject.config do |config|
68
- config.ui = @ui
69
-
70
- config.user = ENV["USER"]
71
- config.host_name = "127.0.0.1"
72
- config.timeout = WAIT_SMALL
73
- end
74
- hostname = %x(hostname).chomp
75
- lambda { subject.exec("hostname ; sleep 10") }.should raise_error ZTK::SSHError
76
-
77
- expect(subject.close).to be true
78
- end
79
-
80
- it "should throw an exception if the exit status is not as expected" do
81
- subject.config do |config|
82
- config.ui = @ui
83
-
84
- config.user = ENV["USER"]
85
- config.host_name = "127.0.0.1"
86
- end
87
- lambda { subject.exec("/bin/bash -c 'exit 64'") }.should raise_error ZTK::SSHError
88
-
89
- expect(subject.close).to be true
90
- end
91
-
92
- it "should return a instance of an OpenStruct object" do
93
- subject.config do |config|
94
- config.ui = @ui
95
-
96
- config.user = ENV["USER"]
97
- config.host_name = "127.0.0.1"
98
- end
99
- result = subject.exec(%q{echo "Hello World"})
100
- result.should be_an_instance_of OpenStruct
101
-
102
- expect(subject.close).to be true
103
- end
104
-
105
- it "should return the exit code" do
106
- subject.config do |config|
107
- config.ui = @ui
108
-
109
- config.user = ENV["USER"]
110
- config.host_name = "127.0.0.1"
111
- end
112
- data = 64
113
-
114
- result = subject.exec(%Q{/bin/bash -c 'exit #{data}'}, :exit_code => data)
115
- result.exit_code.should == data
116
-
117
- expect(subject.close).to be true
118
- end
37
+ [ :direct, :proxy ].each do |connection_type|
119
38
 
120
- it "should return the output" do
121
- subject.config do |config|
122
- config.ui = @ui
123
-
124
- config.user = ENV["USER"]
125
- config.host_name = "127.0.0.1"
126
- end
127
- data = "Hello World @ #{Time.now.utc}"
39
+ before(:each) do
40
+ subject.config do |config|
41
+ config.ui = ui
42
+ config.user = ENV["USER"]
43
+ config.host_name = "127.0.0.1"
128
44
 
129
- result = subject.exec(%Q{echo "#{data}"})
130
- result.output.match(data).should_not be nil
131
-
132
- expect(subject.close).to be true
133
- end
134
-
135
- it "should allow us to change the expected exit code" do
136
- subject.config do |config|
137
- config.ui = @ui
138
-
139
- config.user = ENV["USER"]
140
- config.host_name = "127.0.0.1"
141
- end
142
- data = 32
143
- result = subject.exec(%Q{/bin/bash -c 'exit #{data}'}, :exit_code => data)
144
-
145
- expect(subject.close).to be true
146
- end
147
-
148
- it "should allow us to execute a bootstrap script" do
149
- subject.config do |config|
150
- config.ui = @ui
151
-
152
- config.user = ENV["USER"]
153
- config.host_name = "127.0.0.1"
154
- end
155
- data = "Hello World @ #{Time.now.utc}"
156
-
157
- result = subject.bootstrap(<<-EOBOOTSTRAP)
158
- echo "#{data}" >&1
159
- EOBOOTSTRAP
160
-
161
- expect(result.output).to match(/#{data}/)
162
-
163
- expect(subject.close).to be true
164
- end
165
-
166
- it "should allow us to write a file" do
167
- subject.config do |config|
168
- config.ui = @ui
169
-
170
- config.user = ENV["USER"]
171
- config.host_name = "127.0.0.1"
172
- end
173
- data = "Hello World @ #{Time.now.utc}"
174
- test_filename = File.join("", "tmp", "test_file.txt")
175
-
176
- subject.file(:target => test_filename) do |f|
177
- f.write(data)
178
- end
179
-
180
- result = subject.exec(%Q{cat #{test_filename}})
181
-
182
- expect(result.output).to match(/#{data}/)
183
-
184
- expect(subject.close).to be true
185
- end
186
-
187
- describe "stdout" do
188
-
189
- it "should capture STDOUT (with PTY) and send it to the STDOUT pipe" do
190
- subject.config do |config|
191
- config.ui = @ui
192
-
193
- config.user = ENV["USER"]
194
- config.host_name = "127.0.0.1"
195
- end
196
- data = "Hello World @ #{Time.now.utc}"
197
-
198
- subject.exec(%Q{echo "#{data}" >&1})
199
-
200
- @ui.stdout.rewind
201
- expect(@ui.stdout.read).to match(/#{data}/)
202
-
203
- @ui.stderr.rewind
204
- expect(@ui.stderr.read).to be_empty
205
-
206
- @ui.stdin.rewind
207
- expect(@ui.stdin.read).to be_empty
208
-
209
- expect(subject.close).to be true
210
- end
211
-
212
- it "should capture STDOUT (without PTY) and send it to the STDOUT pipe" do
213
- subject.config do |config|
214
- config.ui = @ui
215
-
216
- config.user = ENV["USER"]
217
- config.host_name = "127.0.0.1"
218
-
219
- config.request_pty = false
220
- end
221
- data = "Hello World @ #{Time.now.utc}"
222
-
223
- subject.exec(%Q{echo "#{data}" >&1})
224
-
225
- @ui.stdout.rewind
226
- expect(@ui.stdout.read).to match(/#{data}/)
227
-
228
- @ui.stderr.rewind
229
- expect(@ui.stderr.read).to be_empty
230
-
231
- @ui.stdin.rewind
232
- expect(@ui.stdin.read).to be_empty
233
-
234
- expect(subject.close).to be true
235
- end
236
-
237
- end
238
-
239
- describe "stderr" do
240
-
241
- it "should capture STDERR (with PTY) and send it to the STDOUT pipe" do
242
- subject.config do |config|
243
- config.ui = @ui
244
-
245
- config.user = ENV["USER"]
246
- config.host_name = "127.0.0.1"
247
- end
248
- data = "Hello World @ #{Time.now.utc}"
249
-
250
- subject.exec(%Q{echo "#{data}" >&2})
251
-
252
- @ui.stdout.rewind
253
- expect(@ui.stdout.read).to match(/#{data}/)
254
-
255
- @ui.stderr.rewind
256
- expect(@ui.stderr.read).to be_empty
257
-
258
- @ui.stdin.rewind
259
- expect(@ui.stdin.read).to be_empty
260
-
261
- expect(subject.close).to be true
262
- end
263
-
264
- it "should capture STDERR (without PTY) and send it to the STDERR pipe" do
265
- subject.config do |config|
266
- config.ui = @ui
267
-
268
- config.user = ENV["USER"]
269
- config.host_name = "127.0.0.1"
270
-
271
- config.request_pty = false
272
- end
273
- data = "Hello World @ #{Time.now.utc}"
274
-
275
- subject.exec(%Q{echo "#{data}" >&2})
276
-
277
- @ui.stdout.rewind
278
- expect(@ui.stdout.read).to be_empty
279
-
280
- @ui.stderr.rewind
281
- expect(@ui.stderr.read).to match(/#{data}/)
282
-
283
- @ui.stdin.rewind
284
- expect(@ui.stdin.read).to be_empty
285
-
286
- expect(subject.close).to be true
287
- end
288
-
289
- end
290
-
291
- end
292
-
293
- describe "upload" do
294
-
295
- [true, false].each do |use_scp|
296
- it "should be able to upload a file to 127.0.0.1 as the current user using #{use_scp ? 'scp' : 'sftp'} (your key must be in ssh-agent)" do
297
- subject.config do |config|
298
- config.ui = @ui
299
-
300
- config.user = ENV["USER"]
301
- config.host_name = "127.0.0.1"
302
- end
303
-
304
- data = "Hello World @ #{Time.now.utc}"
305
-
306
- remote_temp = Tempfile.new('remote')
307
- remote_file = File.join(ZTK::Locator.root, "tmp", File.basename(remote_temp.path.dup))
308
- remote_temp.close
309
- File.exists?(remote_file) && File.delete(remote_file)
310
-
311
- local_temp = Tempfile.new('local')
312
- local_file = File.join(ZTK::Locator.root, "tmp", File.basename(local_temp.path.dup))
313
- local_temp.close
314
- if RUBY_VERSION < "1.9.3"
315
- File.open(local_file, 'w') do |file|
316
- file.puts(data)
317
- end
318
- else
319
- IO.write(local_file, data)
320
- end
321
-
322
- File.exists?(remote_file).should == false
323
- subject.upload(local_file, remote_file, :use_scp => use_scp)
324
- File.exists?(remote_file).should == true
325
-
326
- File.exists?(remote_file) && File.delete(remote_file)
327
- File.exists?(local_file) && File.delete(local_file)
328
-
329
- expect(subject.close).to be true
45
+ if connection_type == :proxy
46
+ config.proxy_user = ENV["USER"]
47
+ config.proxy_host_name = "127.0.0.1"
330
48
  end
331
49
  end
332
-
333
50
  end
334
51
 
335
- describe "download" do
52
+ describe "#console (#{connection_type})" do
336
53
 
337
- [true, false].each do |use_scp|
338
- it "should be able to download a file from 127.0.0.1 as the current user using #{use_scp ? 'scp' : 'sftp'} (your key must be in ssh-agent)" do
339
- subject.config do |config|
340
- config.ui = @ui
54
+ it "should execute a console" do
55
+ expect(Kernel).to receive(:exec)
341
56
 
342
- config.user = ENV["USER"]
343
- config.host_name = "127.0.0.1"
344
- end
345
-
346
- data = "Hello World @ #{Time.now.utc}"
347
-
348
- local_temp = Tempfile.new('local')
349
- local_file = File.join(ZTK::Locator.root, "tmp", File.basename(local_temp.path.dup))
350
- local_temp.close
351
- File.exists?(local_file) && File.delete(local_file)
352
-
353
- remote_temp = Tempfile.new('remote')
354
- remote_file = File.join(ZTK::Locator.root, "tmp", File.basename(remote_temp.path.dup))
355
- remote_temp.close
356
- if RUBY_VERSION < "1.9.3"
357
- File.open(remote_file, 'w') do |file|
358
- file.puts(data)
359
- end
360
- else
361
- IO.write(remote_file, data)
362
- end
363
-
364
- File.exists?(local_file).should == false
365
- subject.download(remote_file, local_file, :use_scp => use_scp)
366
- File.exists?(local_file).should == true
367
-
368
- File.exists?(local_file) && File.delete(local_file)
369
- File.exists?(remote_file) && File.delete(remote_file)
370
-
371
- expect(subject.close).to be true
372
- end
57
+ subject.console
373
58
  end
374
59
 
375
60
  end
376
61
 
377
- end
378
-
379
- describe "proxy SSH behaviour" do
380
-
381
- describe "execute" do
382
-
383
- it "should be able to proxy through 127.0.0.1, connecting to 127.0.0.1 as the current user and execute a command (your key must be in ssh-agent)" do
384
- subject.config do |config|
385
- config.ui = @ui
386
-
387
- config.user = ENV["USER"]
388
- config.host_name = "127.0.0.1"
389
- config.proxy_user = ENV["USER"]
390
- config.proxy_host_name = "127.0.0.1"
391
- end
62
+ describe "#execute (#{connection_type})" do
392
63
 
393
- data = %x( hostname ).chomp
64
+ it "should be able to connect to 127.0.0.1 as the current user and execute a command (your key must be in ssh-agent)" do
65
+ data = %x(hostname).chomp
394
66
 
395
67
  status = subject.exec("hostname")
396
- status.exit_code.should == 0
397
- @ui.stdout.rewind
398
- @ui.stdout.read.chomp.should == data
68
+ expect(status.exit_code).to be == 0
399
69
 
400
- expect(subject.close).to be true
70
+ ui.stdout.rewind
71
+ expect(ui.stdout.read.chomp).to match(data)
72
+
73
+ expect(subject.close).to be == true
401
74
  end
402
75
 
403
76
  it "should timeout after the period specified" do
404
- subject.config do |config|
405
- config.ui = @ui
77
+ subject.config.timeout = WAIT_SMALL
406
78
 
407
- config.user = ENV["USER"]
408
- config.host_name = "127.0.0.1"
409
- config.proxy_user = ENV["USER"]
410
- config.proxy_host_name = "127.0.0.1"
411
- config.timeout = WAIT_SMALL
412
- end
413
- hostname = %x(hostname).chomp
414
- lambda { subject.exec("hostname ; sleep 10") }.should raise_error ZTK::SSHError
79
+ expect{ subject.exec("sleep 10") }.to raise_error ZTK::SSHError
415
80
 
416
- expect(subject.close).to be true
81
+ expect(subject.close).to be == true
417
82
  end
418
83
 
419
84
  it "should throw an exception if the exit status is not as expected" do
420
- subject.config do |config|
421
- config.ui = @ui
85
+ expect{ subject.exec("exit 42") }.to raise_error ZTK::SSHError
422
86
 
423
- config.user = ENV["USER"]
424
- config.host_name = "127.0.0.1"
425
- config.proxy_user = ENV["USER"]
426
- config.proxy_host_name = "127.0.0.1"
427
- end
428
- lambda { subject.exec("/bin/bash -c 'exit 64'") }.should raise_error ZTK::SSHError
429
-
430
- expect(subject.close).to be true
87
+ expect(subject.close).to be == true
431
88
  end
432
89
 
433
90
  it "should return a instance of an OpenStruct object" do
434
- subject.config do |config|
435
- config.ui = @ui
436
-
437
- config.user = ENV["USER"]
438
- config.host_name = "127.0.0.1"
439
- config.proxy_user = ENV["USER"]
440
- config.proxy_host_name = "127.0.0.1"
441
- end
442
- result = subject.exec(%q{echo "Hello World"})
443
- result.should be_an_instance_of OpenStruct
91
+ result = subject.exec(%{echo "Hello World"})
92
+ expect(result).to be_an_instance_of OpenStruct
444
93
 
445
- expect(subject.close).to be true
94
+ expect(subject.close).to be == true
446
95
  end
447
96
 
448
97
  it "should return the exit code" do
449
- subject.config do |config|
450
- config.ui = @ui
451
-
452
- config.user = ENV["USER"]
453
- config.host_name = "127.0.0.1"
454
- config.proxy_user = ENV["USER"]
455
- config.proxy_host_name = "127.0.0.1"
456
- end
457
98
  data = 64
458
99
 
459
- result = subject.exec(%Q{/bin/bash -c 'exit #{data}'}, :exit_code => data)
460
- result.exit_code.should == data
100
+ result = subject.exec(%{exit #{data}}, :exit_code => data)
101
+ expect(result.exit_code).to be == data
461
102
 
462
- expect(subject.close).to be true
103
+ expect(subject.close).to be == true
463
104
  end
464
105
 
465
106
  it "should return the output" do
466
- subject.config do |config|
467
- config.ui = @ui
468
-
469
- config.user = ENV["USER"]
470
- config.host_name = "127.0.0.1"
471
- config.proxy_user = ENV["USER"]
472
- config.proxy_host_name = "127.0.0.1"
473
- end
474
107
  data = "Hello World @ #{Time.now.utc}"
475
108
 
476
109
  result = subject.exec(%Q{echo "#{data}"})
477
- result.output.match(data).should_not be nil
110
+ expect(result.output).to match(data)
478
111
 
479
- expect(subject.close).to be true
112
+ expect(subject.close).to be == true
480
113
  end
481
114
 
482
115
  it "should allow us to change the expected exit code" do
483
- subject.config do |config|
484
- config.ui = @ui
485
-
486
- config.user = ENV["USER"]
487
- config.host_name = "127.0.0.1"
488
- config.proxy_user = ENV["USER"]
489
- config.proxy_host_name = "127.0.0.1"
490
- end
491
116
  data = 32
492
- result = subject.exec(%Q{/bin/bash -c 'exit #{data}'}, :exit_code => data)
493
117
 
494
- expect(subject.close).to be true
118
+ result = subject.exec(%{exit #{data}}, :exit_code => data)
119
+ expect(result.exit_code).to be == data
120
+
121
+ expect(subject.close).to be == true
495
122
  end
496
123
 
497
124
  it "should allow us to execute a bootstrap script" do
498
- subject.config do |config|
499
- config.ui = @ui
500
-
501
- config.user = ENV["USER"]
502
- config.host_name = "127.0.0.1"
503
- end
504
125
  data = "Hello World @ #{Time.now.utc}"
505
126
 
506
127
  result = subject.bootstrap(<<-EOBOOTSTRAP)
507
128
  echo "#{data}" >&1
508
129
  EOBOOTSTRAP
130
+ expect(result.output.chomp).to match(data)
509
131
 
510
- expect(result.output).to match(/#{data}/)
511
-
512
- expect(subject.close).to be true
132
+ expect(subject.close).to be == true
513
133
  end
514
134
 
515
135
  it "should allow us to write a file" do
516
- subject.config do |config|
517
- config.ui = @ui
518
-
519
- config.user = ENV["USER"]
520
- config.host_name = "127.0.0.1"
521
- end
522
136
  data = "Hello World @ #{Time.now.utc}"
523
137
  test_filename = File.join("", "tmp", "test_file.txt")
524
138
 
@@ -526,140 +140,74 @@ EOBOOTSTRAP
526
140
  f.write(data)
527
141
  end
528
142
 
529
- result = subject.exec(%Q{cat #{test_filename}})
143
+ result = subject.exec(%{cat #{test_filename}})
144
+ expect(result.output.chomp).to match(data)
530
145
 
531
- expect(result.output).to match(/#{data}/)
532
-
533
- expect(subject.close).to be true
146
+ expect(subject.close).to be == true
534
147
  end
535
148
 
536
- describe "stdout" do
537
-
538
- it "should capture STDOUT (with PTY) and send it to the STDOUT pipe" do
539
- subject.config do |config|
540
- config.ui = @ui
149
+ end #execute
541
150
 
542
- config.user = ENV["USER"]
543
- config.host_name = "127.0.0.1"
544
- config.proxy_user = ENV["USER"]
545
- config.proxy_host_name = "127.0.0.1"
546
- end
547
- data = "Hello World @ #{Time.now.utc}"
151
+ describe "#ui (#{connection_type})" do
548
152
 
549
- subject.exec(%Q{echo "#{data}" >&1})
153
+ describe "#stdout (#{connection_type})" do
550
154
 
551
- @ui.stdout.rewind
552
- expect(@ui.stdout.read).to match(/#{data}/)
155
+ [true, false].each do |request_pty|
553
156
 
554
- @ui.stderr.rewind
555
- expect(@ui.stderr.read).to be_empty
157
+ it "should capture STDOUT #{request_pty ? "with" : "without"} PTY and send it to the STDOUT pipe" do
158
+ subject.config.request_pty = request_pty
159
+ data = "Hello World @ #{Time.now.utc}"
556
160
 
557
- @ui.stdin.rewind
558
- expect(@ui.stdin.read).to be_empty
161
+ subject.exec(%{echo "#{data}" >&1})
559
162
 
560
- expect(subject.close).to be true
561
- end
163
+ ui.stdout.rewind
164
+ expect(ui.stdout.read).to match(data)
562
165
 
563
- it "should capture STDOUT (without PTY) and send it to the STDOUT pipe" do
564
- subject.config do |config|
565
- config.ui = @ui
166
+ ui.stderr.rewind
167
+ expect(ui.stderr.read).to be_empty
566
168
 
567
- config.user = ENV["USER"]
568
- config.host_name = "127.0.0.1"
569
- config.proxy_user = ENV["USER"]
570
- config.proxy_host_name = "127.0.0.1"
169
+ ui.stdin.rewind
170
+ expect(ui.stdin.read).to be_empty
571
171
 
572
- config.request_pty = false
172
+ expect(subject.close).to be == true
573
173
  end
574
- data = "Hello World @ #{Time.now.utc}"
575
-
576
- subject.exec(%Q{echo "#{data}" >&1})
577
-
578
- @ui.stdout.rewind
579
- expect(@ui.stdout.read).to match(/#{data}/)
580
174
 
581
- @ui.stderr.rewind
582
- expect(@ui.stderr.read).to be_empty
583
-
584
- @ui.stdin.rewind
585
- expect(@ui.stdin.read).to be_empty
586
-
587
- expect(subject.close).to be true
588
175
  end
589
176
 
590
- end
591
-
592
- describe "stderr" do
593
-
594
- it "should capture STDERR (with PTY) and send it to the STDOUT pipe" do
595
- subject.config do |config|
596
- config.ui = @ui
597
-
598
- config.user = ENV["USER"]
599
- config.host_name = "127.0.0.1"
600
- config.proxy_user = ENV["USER"]
601
- config.proxy_host_name = "127.0.0.1"
602
- end
603
- data = "Hello World @ #{Time.now.utc}"
177
+ end #stdout
604
178
 
605
- subject.exec(%Q{echo "#{data}" >&2})
179
+ describe "#stderr (#{connection_type})" do
606
180
 
607
- @ui.stdout.rewind
608
- expect(@ui.stdout.read).to match(/#{data}/)
181
+ [true, false].each do |request_pty|
609
182
 
610
- @ui.stderr.rewind
611
- expect(@ui.stderr.read).to be_empty
183
+ it "should capture STDERR #{request_pty ? "with" : "without"} PTY and send it to the #{request_pty ? "STDOUT" : "STDERR"} pipe" do
184
+ subject.config.request_pty = request_pty
185
+ data = "Hello World @ #{Time.now.utc}"
612
186
 
613
- @ui.stdin.rewind
614
- expect(@ui.stdin.read).to be_empty
187
+ subject.exec(%{echo "#{data}" >&2})
615
188
 
616
- expect(subject.close).to be true
617
- end
189
+ ui.stdout.rewind
190
+ expect(ui.stdout.read).to (request_pty ? match(data) : be_empty)
618
191
 
619
- it "should capture STDERR (without PTY) and send it to the STDERR pipe" do
620
- subject.config do |config|
621
- config.ui = @ui
192
+ ui.stderr.rewind
193
+ expect(ui.stderr.read).to (request_pty ? be_empty : match(data))
622
194
 
623
- config.user = ENV["USER"]
624
- config.host_name = "127.0.0.1"
625
- config.proxy_user = ENV["USER"]
626
- config.proxy_host_name = "127.0.0.1"
195
+ ui.stdin.rewind
196
+ expect(ui.stdin.read).to be_empty
627
197
 
628
- config.request_pty = false
198
+ expect(subject.close).to be == true
629
199
  end
630
- data = "Hello World @ #{Time.now.utc}"
631
-
632
- subject.exec(%Q{echo "#{data}" >&2})
633
-
634
- @ui.stdout.rewind
635
- expect(@ui.stdout.read).to be_empty
636
200
 
637
- @ui.stderr.rewind
638
- expect(@ui.stderr.read).to match(/#{data}/)
639
-
640
- @ui.stdin.rewind
641
- expect(@ui.stdin.read).to be_empty
642
-
643
- expect(subject.close).to be true
644
201
  end
645
202
 
646
- end
203
+ end #stderr
647
204
 
648
- end
205
+ end #ui
649
206
 
650
- describe "upload" do
207
+ describe "#upload (#{connection_type})" do
651
208
 
652
209
  [true, false].each do |use_scp|
653
- it "should be able to upload a file to 127.0.0.1 as the current user #{use_scp ? 'scp' : 'sftp'} (your key must be in ssh-agent)" do
654
- subject.config do |config|
655
- config.ui = @ui
656
-
657
- config.user = ENV["USER"]
658
- config.host_name = "127.0.0.1"
659
- config.proxy_user = ENV["USER"]
660
- config.proxy_host_name = "127.0.0.1"
661
- end
662
-
210
+ it "should be able to upload a file to 127.0.0.1 as the current user using #{use_scp ? 'scp' : 'sftp'} (your key must be in ssh-agent)" do
663
211
  data = "Hello World @ #{Time.now.utc}"
664
212
 
665
213
  remote_temp = Tempfile.new('remote')
@@ -678,32 +226,23 @@ EOBOOTSTRAP
678
226
  IO.write(local_file, data)
679
227
  end
680
228
 
681
- File.exists?(remote_file).should == false
229
+ expect(File.exists?(remote_file)).to be false
682
230
  subject.upload(local_file, remote_file, :use_scp => use_scp)
683
- File.exists?(remote_file).should == true
231
+ expect(File.exists?(remote_file)).to be == true
684
232
 
685
233
  File.exists?(remote_file) && File.delete(remote_file)
686
234
  File.exists?(local_file) && File.delete(local_file)
687
235
 
688
- expect(subject.close).to be true
236
+ expect(subject.close).to be == true
689
237
  end
690
238
  end
691
239
 
692
- end
240
+ end #upload
693
241
 
694
- describe "download" do
242
+ describe "#download (#{connection_type})" do
695
243
 
696
244
  [true, false].each do |use_scp|
697
245
  it "should be able to download a file from 127.0.0.1 as the current user using #{use_scp ? 'scp' : 'sftp'} (your key must be in ssh-agent)" do
698
- subject.config do |config|
699
- config.ui = @ui
700
-
701
- config.user = ENV["USER"]
702
- config.host_name = "127.0.0.1"
703
- config.proxy_user = ENV["USER"]
704
- config.proxy_host_name = "127.0.0.1"
705
- end
706
-
707
246
  data = "Hello World @ #{Time.now.utc}"
708
247
 
709
248
  local_temp = Tempfile.new('local')
@@ -722,18 +261,18 @@ EOBOOTSTRAP
722
261
  IO.write(remote_file, data)
723
262
  end
724
263
 
725
- File.exists?(local_file).should == false
264
+ expect(File.exists?(local_file)).to be false
726
265
  subject.download(remote_file, local_file, :use_scp => use_scp)
727
- File.exists?(local_file).should == true
266
+ expect(File.exists?(local_file)).to be == true
728
267
 
729
268
  File.exists?(local_file) && File.delete(local_file)
730
269
  File.exists?(remote_file) && File.delete(remote_file)
731
270
 
732
- expect(subject.close).to be true
271
+ expect(subject.close).to be == true
733
272
  end
734
273
  end
735
274
 
736
- end
275
+ end #download
737
276
 
738
277
  end
739
278