vx-lib-shell 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vx/lib/shell/process.rb +4 -14
- data/lib/vx/lib/shell/ssh.rb +2 -11
- data/lib/vx/lib/shell/version.rb +1 -1
- data/spec/lib/process_spec.rb +7 -14
- data/spec/lib/ssh_spec.rb +0 -7
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2b7d6fc28b5070948dd75094444b620d57f1163
|
4
|
+
data.tar.gz: 5987143de05073b0b25008041dc9896994cdf87a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd2eca44bf45eb1a9814f8e55861b1fec627c8c28fc71fae42e6792a63d39109a5b73723c8fecc79a18989d70ca384d15fd77495e955057e299849b4919316ef
|
7
|
+
data.tar.gz: d249cb474a35de4a6a80ed9e5fe329c1f83dcc88bee6006da656ebc32385351b907cda5545d4672326e0a645f148a187ea3b48f16173225d1b510e9434fdd22d
|
data/lib/vx/lib/shell/process.rb
CHANGED
@@ -18,11 +18,7 @@ module Vx
|
|
18
18
|
read_timeout = Shell::ReadTimeout.new options.delete(:read_timeout)
|
19
19
|
|
20
20
|
prefix = "/usr/bin/env - TERM=ansi USER=$USER HOME=#{home} SHELL=/bin/bash /bin/bash -l"
|
21
|
-
|
22
|
-
command = "#{prefix} -c #{Shellwords.escape command}"
|
23
|
-
else
|
24
|
-
command = prefix
|
25
|
-
end
|
21
|
+
command = "#{prefix} -c #{Shellwords.escape command}"
|
26
22
|
|
27
23
|
status = spawn_command_internal(command, options) do |r|
|
28
24
|
read_loop r, timeout, read_timeout, select_timeout, &block
|
@@ -35,25 +31,20 @@ module Vx
|
|
35
31
|
|
36
32
|
def request_pipes(options)
|
37
33
|
m,s = PTY.open
|
38
|
-
r1,w1 = IO.pipe
|
39
34
|
|
40
35
|
s.raw! # disable newline conversion.
|
41
36
|
m.sync = true
|
42
37
|
s.sync = true
|
43
38
|
|
44
|
-
[m, s
|
39
|
+
[m, s]
|
45
40
|
end
|
46
41
|
|
47
42
|
def spawn_command_internal(command, options)
|
48
|
-
r1, w1
|
43
|
+
r1, w1 = request_pipes(options)
|
49
44
|
|
50
|
-
pid = ::Process.spawn(command,
|
45
|
+
pid = ::Process.spawn(command, out: w1, err: w1)
|
51
46
|
|
52
47
|
begin
|
53
|
-
if i = options[:stdin]
|
54
|
-
IO.copy_stream i, w2
|
55
|
-
end
|
56
|
-
w2.close
|
57
48
|
w1.close
|
58
49
|
|
59
50
|
yield r1
|
@@ -64,7 +55,6 @@ module Vx
|
|
64
55
|
_, status = ::Process.wait2(pid)
|
65
56
|
|
66
57
|
r1.close
|
67
|
-
r2.close
|
68
58
|
|
69
59
|
status
|
70
60
|
end
|
data/lib/vx/lib/shell/ssh.rb
CHANGED
@@ -23,11 +23,7 @@ module Vx
|
|
23
23
|
read_timeout = Shell::ReadTimeout.new options.delete(:read_timeout)
|
24
24
|
|
25
25
|
prefix = "/usr/bin/env - TERM=ansi USER=$USER HOME=#{home} SHELL=/bin/bash /bin/bash -l"
|
26
|
-
|
27
|
-
command = "#{prefix} -c #{Shellwords.escape command}"
|
28
|
-
else
|
29
|
-
command = prefix
|
30
|
-
end
|
26
|
+
command = "#{prefix} -c #{Shellwords.escape command}"
|
31
27
|
|
32
28
|
channel = spawn_channel command, read_timeout, options, &block
|
33
29
|
|
@@ -47,7 +43,7 @@ module Vx
|
|
47
43
|
private
|
48
44
|
|
49
45
|
def request_pty(channel, options)
|
50
|
-
channel.request_pty
|
46
|
+
channel.request_pty do |_, pty_status|
|
51
47
|
raise StandardError, "could not obtain pty (ssh.channel.request_pty)" unless pty_status
|
52
48
|
yield if block_given?
|
53
49
|
end
|
@@ -87,11 +83,6 @@ module Vx
|
|
87
83
|
raise StandardError, "FAILED: couldn't execute command (ssh.channel.exec)"
|
88
84
|
end
|
89
85
|
|
90
|
-
if i = options[:stdin]
|
91
|
-
channel.send_data i.read
|
92
|
-
channel.eof!
|
93
|
-
end
|
94
|
-
|
95
86
|
channel.on_data do |_, data|
|
96
87
|
yield data if block_given?
|
97
88
|
read_timeout.reset
|
data/lib/vx/lib/shell/version.rb
CHANGED
data/spec/lib/process_spec.rb
CHANGED
@@ -23,13 +23,13 @@ describe Vx::Lib::Shell::Process do
|
|
23
23
|
context "timeout" do
|
24
24
|
it 'run command with timeout' do
|
25
25
|
expect {
|
26
|
-
run("echo $USER && sleep 0.5", timeout: 0.2
|
26
|
+
run("echo $USER && sleep 0.5", timeout: 0.2)
|
27
27
|
}.to raise_error(::Vx::Lib::Shell::TimeoutError)
|
28
28
|
expect(subject.strip).to eq "#{user}"
|
29
29
|
end
|
30
30
|
|
31
31
|
it 'run command with timeout successfuly' do
|
32
|
-
code = run("echo BAR && sleep 0.1", timeout: 0.5
|
32
|
+
code = run("echo BAR && sleep 0.1", timeout: 0.5)
|
33
33
|
expect(subject.strip).to eq "BAR"
|
34
34
|
expect(code).to eq 0
|
35
35
|
end
|
@@ -45,43 +45,36 @@ describe Vx::Lib::Shell::Process do
|
|
45
45
|
|
46
46
|
it 'run command with read timeout in loop' do
|
47
47
|
expect{
|
48
|
-
run('sleep 0.1 ; echo $USER ; sleep 0.5', read_timeout: 0.3
|
48
|
+
run('sleep 0.1 ; echo $USER ; sleep 0.5', read_timeout: 0.3)
|
49
49
|
}.to raise_error(Vx::Lib::Shell::ReadTimeoutError)
|
50
50
|
expect(collected.strip).to eq "#{user}"
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'run command with read timeout successfuly' do
|
54
|
-
code = run('echo $USER; sleep 0.1', read_timeout: 0.5
|
54
|
+
code = run('echo $USER; sleep 0.1', read_timeout: 0.5)
|
55
55
|
expect(collected.strip).to eq "#{user}"
|
56
56
|
expect(code).to eq 0
|
57
57
|
end
|
58
58
|
|
59
59
|
it 'run command with read timeout in loop successfuly' do
|
60
|
-
code = run('sleep 0.3 ; echo $USER; sleep 0.3 ; echo $USER', read_timeout: 0.5
|
60
|
+
code = run('sleep 0.3 ; echo $USER; sleep 0.3 ; echo $USER', read_timeout: 0.5)
|
61
61
|
expect(collected).to eq "#{user}\n#{user}\n"
|
62
62
|
expect(code).to eq 0
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
66
|
it 'run and kill process' do
|
67
|
-
code = run( "echo $USER; kill -KILL $$"
|
67
|
+
code = run( "echo $USER; kill -KILL $$")
|
68
68
|
expect(subject).to eq "#{user}\n"
|
69
69
|
expect(code).to eq(-9)
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'run and interupt process' do
|
73
|
-
code = run( "echo $USER; kill -INT $$"
|
73
|
+
code = run( "echo $USER; kill -INT $$")
|
74
74
|
expect(subject).to eq "#{user}\n"
|
75
75
|
expect(code).to eq(-2)
|
76
76
|
end
|
77
77
|
|
78
|
-
it "should copy stdin" do
|
79
|
-
io = StringIO.new("echo foo ; exit")
|
80
|
-
code = run(stdin: io)
|
81
|
-
expect(subject).to eq "foo\n"
|
82
|
-
expect(code).to eq 0
|
83
|
-
end
|
84
|
-
|
85
78
|
def run(*args, &block)
|
86
79
|
@proxy ||= ShellTest.new
|
87
80
|
timeout do
|
data/spec/lib/ssh_spec.rb
CHANGED
@@ -87,13 +87,6 @@ describe Vx::Lib::Shell::SSH, ssh: true do
|
|
87
87
|
expect(code).to eq(-4)
|
88
88
|
end
|
89
89
|
|
90
|
-
it "should copy stdin" do
|
91
|
-
io = StringIO.new("echo foo ; exit\n")
|
92
|
-
code = run_ssh(stdin: io)
|
93
|
-
expect(collected).to match "foo\r\n"
|
94
|
-
expect(code).to eq 0
|
95
|
-
end
|
96
|
-
|
97
90
|
def open_ssh(&block)
|
98
91
|
described_class.open(host, user, password: pass, paranoid: false, verbose: 2, port: port, &block)
|
99
92
|
end
|